我需要从git信息库获取库的两个发行版之间的提交列表。假设我们有以下版本:
3.0 (4 commits since 2.11)
2.11 (12 commits since 2.10)
2.10 (20 commits since 2.9)
2.9 (and so on...)
我想做类似的事情:
git log -release "3.0"
然后输出与版本3.0相关的4个提交哈希值
"cef7992412382bfb0a48d7a4c853a968e5489f81"
"1e9fe06192d96b298007d050628e853340ea9548"
"a5ef456d556beab241a8071b08139b148858fb34"
"4e0d434429356798e5d9c7e576a930df6bbd6a97"
我怀疑这是可以通过标签完成的,因为新发行版都带有标签注释...但是我不知道该怎么做。
答案 0 :(得分:3)
假设是线性历史记录,则2.11到3.0之间的提交列表将简单地是:
git log 2.11..3.0
如果您只想要提交次数,那将是这样:
git log --oneline 2.11..3.0 | wc -l
答案 1 :(得分:0)
您可以使用git log "--pretty=%h %D"
(例如)获取带有其引用的提交日志,然后通过这样的脚本(在Python 3.x中使用此脚本)将其管道传输,以将最后一个提交列表进行分组(最新)标签。
import sys
import collections
last_tag = None
commits_per_tag = collections.defaultdict(set)
for line in sys.stdin:
line = line.strip()
if not line:
continue
commit, _, refs = line.partition(" ")
if refs.startswith("tag:"):
last_tag = refs.split(", ")[0]
commits_per_tag[last_tag].add(commit)
for last_tag, commits in sorted(
commits_per_tag.items(),
key=lambda pair: len(pair[1]),
reverse=True,
):
print(last_tag, len(commits))
例如,对于babel,结果为:
$ git log "--pretty=%h %D" | python3 so54787120.py
tag: 1.0 708
tag: 2.3.1 125
tag: dev-2a51c9b95d06 118
tag: v2.4.0 72
tag: 2.0 66
tag: v2.6.0 44
tag: 2.2.0 37
None 32
tag: 2.3.4 25
tag: v2.5.0 23
tag: 1.2 19
tag: v2.5.2 18
tag: 1.1 14
tag: 1.3 13
tag: 2.3.2 11
tag: v2.5.1 6
tag: v2.5.3 5
您的里程可能会因您的历史记录的线性而异。