Как вывести количество коммитов скриптом bash? - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь вывести число коммитов Git между master и HEAD.Следующий скрипт генерирует список хэшей коммитов и пытается их подсчитать.

#!/bin/bash

git_list_commits_hashes_cmd="git rev-list --reverse master..HEAD"
commits=$($git_list_commits_hashes_cmd)
commits_count=${#commits[@]}
echo "==> ${commits_count}"

Однако значение всегда равно 1 независимо от реального числа коммитов.Почему?

Связано

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Как насчет

git rev-list --reverse master..HEAD | wc -l
0 голосов
/ 12 сентября 2018

В скриптах bash:

var=$(command)

устанавливает обычную (не массивную) переменную на основе вывода command. Поэтому, если рассматриваемая команда создает два хеша коммита H1 и H2, у вас есть эквивалент:

var="H1 H2"

, что означает, что $var - это строка длиной пять символов. (На практике git rev-list выводит 40-символьные хэши SHA-1 с символами новой строки после них, поэтому в результате получается одна строка длиной 40 символов, или 81 символ, или 122 символа, и т. Д.)

Использование:

var=(H1 H2)

установит $var в массив из двух элементов, поэтому в этом случае:

commits=($($git_list_commit_hashes_cmd))

сделает трюк.

Обратите внимание, что если вам не нужны сами хэши, git rev-list может произвести подсчет напрямую:

git rev-list --count master..HEAD

производит только количество (нет необходимости в --reverse, когда не используются фактические хэши).

Обратите внимание также, что --reverse меняет нормальный порядок. Нормальный порядок основан на дате коммиттера, где есть возможность вывести более одного коммита за раз (например, при прохождении нескольких ветвей слияния). Вы можете сортировать по дате автора или по топологической сортировке.

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