开发者

How do I count the number of git commits affecting a given subtree?

开发者 https://www.devze.com 2022-12-15 22:00 出处:网络
My version number looks like 开发者_如何学Go0.1.3 and has two components: 0.1 (the tag) 3 (commits after tag)

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消