Подсчитайте количество коммитов на Git с момента fork - PullRequest
0 голосов
/ 27 февраля 2019

Мы используем git rev-list HEAD --count как часть нашего процесса сборки для генерации номера ревизии.

Мы разветвляли этот проект, а затем добавили его в наш приватный gitlab в качестве нового проекта.При создании этого проекта нужно, чтобы номер ревизии учитывал только коммиты, сделанные после разветвления.

Какой лучший способ добиться этого?

Я все еще новичок в Git.Должны ли мы ставить метки в точке разветвления и отсчитывать коммиты оттуда?Ребазинг в новом проекте?Или что-то еще?

Ответы [ 3 ]

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

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

git rev-list --count HEAD ^<tag-name>

Пример

git checkout master
git tag -a v1.0 -m "The forked release"
touch test.txt
git add test.txt
git commit -am "added test.txt"
git rev-list --count HEAD ^v1.0

Это выводит: 1

если вы собираетесь перейти:

git checkout -b test
<We do 3 commits>
git rev-list --count HEAD ^v1.0

Результат: 3

Игнорирование слияний

Если вы объедините другую ветку с текущей веткой без быстрой перемотки вперед иВы делаете выше, слияние также считается.Это потому, что для git слияние - это коммит.

Если вы не хотите считать эти коммиты, добавьте --no-merges:

git rev-list --no-merges --count HEAD ^v1.0
0 голосов
/ 27 февраля 2019

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

Вы можете использовать идентификатор последнего коммита перед вилкой.Мне не нравится этот подход, потому что не сразу понятно "почему", когда вы видите команду типа

git rev-list abcdef12..HEAD --count

("ну, почему abcdef12 имеет смысл /").Кроме того, если вы когда-нибудь сделаете переписывание истории, которое влияет на этот коммит, вам придется обновить свои скрипты сборки для нового идентификатора фиксации.(Но этот вид переписывания в любом случае довольно радикальный, так что это легко может никогда не иметь значения; я просто предпочитаю избегать ненужных ограничений.)

Другой вариант - пометить коммит на развилке (как вы сами предлагаете),Это устраняет обе проблемы, так как вы можете дать тегу осмысленное имя и переместить его по мере необходимости для переписывания истории.

git rev-list project-start..HEAD --count

Или, поскольку это, несомненно, константа, вы можете всего один раз сосчитать коммиты до точка разветвления, и в ваших сценариях вычтите это из числа.В некотором смысле это кажется проще, хотя я полагаю, что на самом деле это немного сложнее реализовать.

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

Если вы знаете фиксацию «точки разветвления» (назовем ее abc1234 здесь):

git rev-list HEAD ^abc1234 --count

или (альтернативный синтаксис, возможно, более интуитивно понятный для чтения?)

git rev-list abc1234..HEAD --count

должен удалить из списка коммитов те, которые были переданы исходному источнику разветвления, и дать правильный счет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...