计算自fork以来在Git上的提交次数

时间:2019-02-27 14:36:48

标签: git

我们在构建过程中使用git rev-list HEAD --count来生成修订号。

我们已经分叉了这个项目,然后将其作为新项目添加到我们的私人gitlab中。在构建该项目时,希望修订号仅计算自分叉以来所做的提交。

实现此目标的最佳方法是什么?

我还是git的新手。我们是否应该在派生点处进行标记并从那里开始计数提交?重新参与新项目?还是其他?

3 个答案:

答案 0 :(得分:1)

如果您知道“叉点”的提交(在这里将其称为abc1234):

git rev-list HEAD ^abc1234 --count

或(替代语法,也许更直观?)

git rev-list abc1234..HEAD --count

应从提交列表中删除与原始fork源共享的那些提交并提供正确的计数。

答案 1 :(得分:1)

我建议标记提交,然后从那里开始计数。 可以使用git rev-list实现这一目标:

git rev-list --count HEAD ^<tag-name>

示例

git checkout master
git tag -a v1.0 -m "The forked release"
touch test.txt
git add test.txt
git commit -am "added test.txt"
git rev-list --count HEAD ^v1.0

这将输出:1

如果您要分支:

git checkout -b test
<We do 3 commits>
git rev-list --count HEAD ^v1.0

结果:3

忽略合并

如果没有快速前进就将另一个分支合并到当前分支中,并且执行上述操作,则合并也将计算在内。这是因为对于git来说,合并就是一次提交。

如果您不想计算这些提交,请添加--no-merges

git rev-list --no-merges --count HEAD ^v1.0

答案 2 :(得分:1)

您可以通过多种方法来执行此操作,尽管我会提醒您,如果项目超出了当前的分支策略,那么生成内部版本号的方法可能会限制您使用分支的方式(仅举一个示例) )。

您可以使用派生之前最后一次提交的提交ID。我不喜欢这种方法,因为当您看到类似

的命令时,并不能立即清除“为什么”
git rev-list abcdef12..HEAD --count

(“好吧,abcdef12为什么有意义/”)。另外,如果您进行了会影响该提交的历史记录重写,则必须为新的提交ID更新构建脚本。 (但是无论如何,这种重写都是一件非常艰巨的事情,所以这很容易就没关系了;我只希望避免不必要的限制。)

另一个选择是在派生标签处标记提交(如您自己所建议)。这样可以缓解这两个问题,因为您可以为标签指定一个有意义的名称,并根据需要进行移动以进行历史记录重写。

git rev-list project-start..HEAD --count

或者,因为它肯定是一个常数,所以您可以只计算一次直到 分叉点的提交,然后在脚本中将其减去。在某些方面,这似乎更简单,尽管我认为它实际上很难实现。