如何获取与特定版本相关的提交列表?

时间:2019-02-20 13:08:57

标签: git github

我需要从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"

我怀疑这是可以通过标签完成的,因为新发行版都带有标签注释...但是我不知道该怎么做。

2 个答案:

答案 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

您的里程可能会因您的历史记录的线性而异。