Как получить список коммитов, связанных с конкретной версией? - PullRequest
0 голосов
/ 20 февраля 2019

Мне нужно получить список коммитов между двумя выпусками библиотеки из репозитория 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"

, затем вывести 4 хеша коммитов, связанных с выпуском 3.0

"cef7992412382bfb0a48d7a4c853a968e5489f81"
"1e9fe06192d96b298007d050628e853340ea9548"
"a5ef456d556beab241a8071b08139b148858fb34"
"4e0d434429356798e5d9c7e576a930df6bbd6a97"

Я подозреваю, что это можно сделать с помощью тегов, поскольку новые выпуски снабжены тегами ... но я понятия не имею, как это сделать.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вы можете использовать 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

Ваш пробег может варьироваться в зависимости от линейности вашей истории.

0 голосов
/ 20 февраля 2019

Предполагая линейную историю, список коммитов между 2.11 и 3.0 будет просто:

git log 2.11..3.0

Если вы просто хотите количество коммитов, это будет что-то вроде:

git log --oneline 2.11..3.0 | wc -l
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...