2014-12-17 4 views
4

У меня есть небольшой Баш скрипт:Неправильный подсчет мерзавец совершает

echo "Total commits: " 
git log --all --pretty=format:"%h %ad | %s%d [%an]" --date=short | wc -l 
echo "Total no-merge commits: " 
git log --all --pretty=format:"%h %ad | %s%d [%an]" --date=short --no-merges | wc -l 
echo "Total merge commits: " 
git log --all --pretty=format:"%h %ad | %s%d [%an]" --date=short --merges | wc -l 

Я знаю, что код не является оптимальным. Результат моего сценария:

Total commits: 
1000 
Total no-merge commits: 
817 
Total merge commits: 
182 

Вопрос: почему сумма не-слияний и слияние коммитов (182 + 817 = 999) ниже общее число фиксаций (1000)?

+0

Что произойдет, если вы 'for x in -merges -no-merges" "; do git rev-list --count $ x -all; сделано?? –

ответ

8

Вывод из этих команд журнала использует \n как разделитель, а не терминатор, поэтому ваши wc -l подсчеты все один короткий. У вас действительно есть:

1001 = 818 + 183 

коммиты, которые складываются.

От git help log:

Формат tformat: работает точно так же, как format:, за исключением того, что он обеспечивает "терминатор" семантику вместо "сборщиков" семантика. Другими словами, каждый фиксатор имеет символ терминатора сообщения (обычно это новая строка), а не разделитель, помещенный между записями. Это означает, что окончательный ввод однострочного формата будет соответствующим образом завершен новой строкой, как это делает формат «oneline».

Смежные вопросы