例如,这里我有一些在v0.5.1和v0.5.4之间的提交记录:
我想导出一个包括这些提交的捆绑文件。
这里我们可以看到它不包括v0.5.2和v0.5.3。
然而,如果我添加--tags,它会包含更多的提交。
从33个包变成了402个包,其中包括v0.5.1之后的所有标签。
到目前为止,唯一有效的方法是使用标签列表:
但这真的很烦人,我必须手动查找那些提交之间有哪些标签。
在更复杂的情况下,它不仅仅是简单的版本标签。可能是 fix-issue-220、feature-merge 等等。它可以是任何用词,而且无法确定顺序。
有没有一种标准的方法来处理这个问题?
git log --pretty=oneline v0.5.1..v0.5.4
ec7a6416580276d2f9975802f487c1216dcc540d (tag: v0.5.4) Release v0.5.4
64b2b14d3123c619db5bbfac718c579e8daa8da8 fix: decoding nested dicts with tuple keys (#297)
ccff0b51418b4c41b63ee48f31126435e5cfd2bd (tag: v0.5.3) Release v0.5.3
2e51315f0fd7e088a66346e67224f38eea0da4a3 (tag: 0.5.3) chore(deps): update Pipfile.lock
0d9d73ac9f8dd5dbe9712100ac977fa9bad51602 chore(deps): pin pytest to >=6.2.3 to bump its transitive dep py
3dc59e01ccdfec619ee4e4c3502b9759b67c3fa8 (tag: v0.5.2) Release v0.5.2
5aba46a417ce48137f16f0f7fd3cc51ccdfee8c3 Revert "refactor!: remove `encode_json` optional arg for `to_dict`"
da2f98104ae5722af5d57f0c0118f903f0f12a91 docs: formatting
f8ee0c04590cc31ebe039e7010a8a668a42f97fb Update README.md
我想导出一个包括这些提交的捆绑文件。
$ git bundle create ../notag-v0.5.4.bundle v0.5.1..v0.5.4
Enumerating objects: 44, done.
Counting objects: 100% (44/44), done.
Compressing objects: 100% (26/26), done.
Total 33 (delta 22), reused 17 (delta 7), pack-reused 0
$ git bundle list-heads ../notag-v0.5.4.bundle
ec7a6416580276d2f9975802f487c1216dcc540d refs/tags/v0.5.4
这里我们可以看到它不包括v0.5.2和v0.5.3。
然而,如果我添加--tags,它会包含更多的提交。
$ git bundle create ../v0.5.4.bundle --tags v0.5.1..v0.5.4
Enumerating objects: 432, done.
Counting objects: 100% (432/432), done.
Compressing objects: 100% (159/159), done.
Total 402 (delta 256), reused 363 (delta 220), pack-reused 0
从33个包变成了402个包,其中包括v0.5.1之后的所有标签。
到目前为止,唯一有效的方法是使用标签列表:
$ git bundle create ../v0.5.4.bundle v0.5.1..v0.5.4 v0.5.2 v0.5.3
Enumerating objects: 44, done.
Counting objects: 100% (44/44), done.
Compressing objects: 100% (26/26), done.
Total 33 (delta 22), reused 17 (delta 7), pack-reused 0
$ git bundle list-heads ../v0.5.4.bundle
ec7a6416580276d2f9975802f487c1216dcc540d refs/tags/v0.5.4
3dc59e01ccdfec619ee4e4c3502b9759b67c3fa8 refs/tags/v0.5.2
ccff0b51418b4c41b63ee48f31126435e5cfd2bd refs/tags/v0.5.3
但这真的很烦人,我必须手动查找那些提交之间有哪些标签。
在更复杂的情况下,它不仅仅是简单的版本标签。可能是 fix-issue-220、feature-merge 等等。它可以是任何用词,而且无法确定顺序。
有没有一种标准的方法来处理这个问题?
git log
命令来获取范围内的标签 来生成列表(而不是手动完成),并将其附加到命令中(还可以创建一个包装器来自动化这个过程)。 - undefined%D
,但仍需要解析。 - undefinedgit --no-pager log --simplify-by-decoration --decorate-refs='tags' --format='%D'
,但仍需要额外解析。因为每行都有tag: xxx, tag: yyy
。 - undefinedgit log --simplify-by-decoration --decorate-refs='tags' --format=format:'%(describe:tags=1)'
,只获取标签而无需额外的冗余信息。 - undefined$(describe:)
无法描述“未注释的标签”。在git describe
中,你需要指定--tags
,但这个选项在最近的 git 版本中并不存在。至少在2.34
版本中没有这个选项。 - undefined%(describe:tags)
应该可以工作,但是如果不支持的话,你可能只能解析输出结果了。 - undefined