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

发布于 2024-08-17 06:20:08 字数 473 浏览 8 评论 0原文

我的版本号看起来像 0.1.3,有两个组成部分:

  • 0.1(标签)
  • 3(标签后提交)

所有这些信息都很容易从 git describe --tags 获取。

对于版本 0.1.3 git describe 可能看起来像

0.1-3-g53d4dec

所有这些都工作正常,但我正在寻找仅影响给定子树的提交数量,而不是整个存储库。如果 examples/test/ 中的某些内容发生更改,我不想更改版本号,但如果 src/ 中的某些内容发生更改,我会这样做。

基本上,我正在寻找与 git log --relative 工作方式相同的 git describe --relative src/

My version number looks like 0.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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

日久见人心 2024-08-24 06:20:08

如果您正在编写 Git 脚本,则应该使用“plumbing”命令而不是“porcelain”命令(请参阅 git(1)。在这种情况下,最有可能的候选者看起来像 git rev-list

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

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
我恋#小黄人 2024-08-24 06:20:08

听起来最简单的事情就是编写一个简短的脚本 - 调用 git-describe 来确定您基于哪个标签,然后执行类似 git log --pretty=%H $tag.. -- $路径| 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.

夜雨飘雪 2024-08-24 06:20:08

我想出了这个:

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/ 内的最后一个标签后提交。这是正确的。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文