如何计算影响给定子树的git提交数?
我的版本号看起来像0.1.3,有两个组件:如何计算影响给定子树的git提交数?,git,build-process,build-automation,versioning,Git,Build Process,Build Automation,Versioning,我的版本号看起来像0.1.3,有两个组件: 0.1(标签) 3(标记后提交) 所有这些信息都很容易从git descripe--tags中获得 对于0.1.3版git descripe可能如下所示 0.1-3-g53d4dec 所有这些都很好,但我要寻找的是只影响给定子树的提交数量,而不是整个回购协议。如果examples/或test/中的内容发生更改,我不想更改版本号,但如果src/中的内容发生更改,我会这样做 基本上,我正在寻找与git log--relative工作原理相同的git
- 0.1(标签)
- 3(标记后提交)
git descripe
可能如下所示
0.1-3-g53d4dec
所有这些都很好,但我要寻找的是只影响给定子树的提交数量,而不是整个回购协议。如果examples/
或test/
中的内容发生更改,我不想更改版本号,但如果src/
中的内容发生更改,我会这样做
基本上,我正在寻找与
git log--relative
工作原理相同的git descripe--relative src/
,听起来最简单的方法是编写一个简短的脚本-调用git descripe来确定您基于哪个标记,然后执行类似于git log--pretty=%H$tag$路径| wc-l
来计算提交次数。我找到了以下方法:
git log $tag.. --pretty=%h --relative $path | wc -l
git日志$tag--pretty=%h——相对$path | wc-l
或者更简单:
git log --oneline $tag.. -- $path | wc -l
git日志--oneline$tag..--$路径| 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
初始化
已在/private/tmp/test/.Git中初始化空Git存储库/
$touch a
$git添加一个
$git提交-m“第一”
[master(root提交)f8529fc]f
0个文件已更改,0个插入(+),0个删除(-)
创建模式100644 a
$git标签-m'F'v0.1
$git标签
v0.1
$mkdir src
$touch src/b
$git添加src/b
$git提交
[母版a5345cd]B
0个文件已更改,0个插入(+),0个删除(-)
创建模式100644 src/b
$git log--oneline$tag..--$路径| wc-l
1.
1在
src/
中的最后一个标记之后提交。没错。如果您正在编写Git脚本,您应该真正使用“管道”命令而不是“陶瓷”命令(请参阅。在本例中,最有可能的候选命令如下所示
这不正确。我已在问题中添加了示例。将
$tag
更改为$tag..
以排除标记中包含的所有内容。否则,它将用作起点而不是停止点(您可能希望从开头开始,然后返回到(但不包括)$tag
)。很抱歉输入错误。是的,正如Chris所建议的,版本列表比日志稍微平滑一些,漂亮的东西被抑制了。当然,您仍然需要描述来确定标记是什么。对,重要的部分是v0.1..
,它与v0.1..HEAD
,它与^v0.1 HEAD
,它是same作为——不是v0.1 HEAD
。它们都表示HEAD可以访问的所有内容,但从v0.1无法访问。请参阅git rev parse(1)中的“指定修订”
git rev-list --full-history v0.1.. -- src | wc -l