How do I count the number of git commits affecting a given subtree?
My version number looks like 开发者_如何学Go0.1.3 and has two components:
- 0.1 (the tag)
- 3 (commits after tag)
All this information easy to obtain from git describe --tags.
For version 0.1.3 git describe may look like
0.1-3-g53d4dec
All of this works fine, but I'm looking for the number of commits affecting only a given subtree, not the whole repo. I don't want to change the version number if something within examples/ or test/ changed, but I do if something within src/ changed.
Basically, I'm looking for git describe --relative src/ that works along the same lines as git log --relative.
If you are scripting Git, you should really use the “plumbing” commands instead of the “porcelain” commands (see git(1). In this case, the most likely candidate seems like git rev-list.
git rev-list --full-history v0.1.. -- src | wc -l
It sounds like the easiest thing to do would be to write a short script - call git-describe to determine what tag you're basing off of, then do something like git log --pretty=%H $tag.. -- $path | wc -l to count the commits.
I came up this this:
git log $tag.. --pretty=%h --relative $path | wc -l
Or even simpler:
git log --oneline $tag.. -- $path | wc -l
Thanks guys from irc://irc.freenode.net/git
I've tested:
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 commit after last tag within src/. That's right.
加载中,请稍侯......
精彩评论