如何计算影响给定子树的git提交数量?

时间:2010-01-07 15:32:43

标签: git build-process build-automation versioning

我的版本号看起来像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 个答案:

答案 0 :(得分:4)

如果您正在编写Git脚本,那么您应该使用“plumbing”命令而不是“瓷器”命令(请参阅git(1)。在这种情况下,最可能的候选者似乎是git rev-list。< / p>

git rev-list --full-history v0.1.. -- src | wc -l

答案 1 :(得分:2)

听起来最简单的事情就是编写一个简短的脚本 - 调用git-describe来确定你所依据的标记,然后执行git log --pretty=%H $tag.. -- $path | wc -l之类的操作来计算提交。

答案 2 :(得分:1)

我想出了这个:

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

src/内的最后一个标记后提交1次。那是对的。