【问题标题】:How do I count the number of git commits affecting a given subtree?如何计算影响给定子树的 git 提交数?
【发布时间】:2011-01-02 13:06:13
【问题描述】:

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

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

所有这些信息都可以从git describe --tags 轻松获得。

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

0.1-3-g53d4dec

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

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

【问题讨论】:

    标签: git build-process build-automation versioning


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      听起来最简单的做法是编写一个简短的脚本 - 调用 git-describe 来确定您基于哪个标签,然后执行类似git log --pretty=%H $tag.. -- $path | wc -l 的操作来计算提交次数。

      【讨论】:

      • 这不能正常工作。我在问题中添加了示例。
      • $tag 更改为 $tag.. 以排除标签中包含的所有内容。否则,它将用作起点而不是终点(您可能希望从 HEAD 开始并返回,直到(但不包括)$tag)。
      • 抱歉打错字了。是的,正如 Chris 建议的那样,rev-list 比 log 稍微平滑一些,而漂亮的东西被抑制了。当然,您仍然需要 describe 来确定标签是什么。
      【解决方案3】:

      我想出了这个:

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

      甚至更简单:

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

      感谢来自 irc://irc.freenode.net/git 的人

      我已经测试过了:

      git 初始化
      在 /private/tmp/test/.git/ 中初始化空的 Git 存储库
      $触摸一个
      $ git 添加一个
      $ git commit -m '第一'
      [主(根提交)f8529fc] f
       0 个文件更改,0 个插入 (+),0 个删除 (-)
       创建模式 100644 a
      $ git tag -m 'F' v0.1
      $ git标签
      v0.1
      $ mkdir 源代码
      $触摸源/b
      $ git 添加 src/b
      $ git提交
      【大师a5345cd】B
       0 个文件更改,0 个插入 (+),0 个删除 (-)
       创建模式 100644 src/b
      $ git log --oneline $tag.. -- $path | wc -l
             1

      src/ 内最后一个标签后的 1 次提交。没错。

      【讨论】:

      • 对,重要的部分是v0.1..,和v0.1..HEAD一样,和^v0.1 HEAD一样,和--not v0.1 HEAD一样。它们都意味着 HEAD 可以访问的所有内容,但不能从 v0.1 访问。请参阅 git-rev-parse(1) kernel.org/pub/software/scm/git/docs/git-rev-parse.html中的“指定修订版”
      猜你喜欢
      • 1970-01-01
      • 2020-01-04
      • 2012-11-14
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2012-07-24
      • 2019-05-31
      相关资源
      最近更新 更多