Как подсчитать количество коммитов git, влияющих на данное поддерево? - PullRequest
4 голосов
/ 07 января 2010

Номер моей версии выглядит как 0.1.3 и состоит из двух компонентов:

  • 0.1 (тег)
  • 3 (фиксируется после тега)

Всю эту информацию легко получить от git describe --tags.

Для версии 0.1.3 git describe может выглядеть как

0.1-3-g53d4dec

Все это прекрасно работает, но я ищу количество коммитов , влияющих только на данное поддерево, а не весь репо.Я не хочу менять номер версии, если что-то в examples/ или test/ изменилось, но я делаю, если что-то в src/ изменилось.

По сути, я ищу git describe --relative src/, которыйработает по тем же принципам, что и git log --relative.

Ответы [ 3 ]

4 голосов
/ 08 января 2010

Если вы пишете Git, вы действительно должны использовать команды «plumbing» вместо «porcelain» (см. git (1) . В этом случае наиболее вероятный кандидат выглядит как git rev-list.

git rev-list --full-history v0.1.. -- src | wc -l
2 голосов
/ 07 января 2010

Звучит так, что проще всего было бы написать короткий скрипт - вызвать git-description, чтобы определить, на каком теге вы основываетесь, а затем сделать что-то вроде git log --pretty=%H $tag.. -- $path | wc -l для подсчета коммитов.

1 голос
/ 08 января 2010

Я придумал это:

git log $tag.. --pretty=%h --relative $path | wc -l

Или даже проще:

git log --oneline $tag.. -- $path | wc -l

Спасибо, ребята из irc: //irc.freenode.net/git

Я проверял:

git init
Initialized empty Git repository in /private/tmp/test/.git/
$ touch a
$ git add a
$ git commit -m 'first'
[master (root-commit) f8529fc] f
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
$ git tag -m 'F' v0.1
$ git tag
v0.1
$ mkdir src
$ touch src/b
$ git add src/b
$ git commit
[master a5345cd] B
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 src/b
$ git log --oneline $tag.. -- $path | wc -l
       1

1 коммит после последнего тега в src/. Это верно.

...