Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算自fork之后Git上的提交数_Git - Fatal编程技术网

计算自fork之后Git上的提交数

计算自fork之后Git上的提交数,git,Git,我们使用git rev list HEAD--count作为构建过程的一部分来生成修订号 我们已经完成了这个项目,然后将它作为一个新项目添加到我们的私有gitlab中。生成此项目时,希望修订号仅统计自fork之后所做的提交 实现这一目标的最佳方式是什么 我对git还是新手。我们是否应该在分叉点进行标记,并从那里计算提交数?在新项目中重新定基?或者别的什么?如果您知道“fork point”的提交(我们在这里称之为abc1234): 或者(其他语法,可能更直观一些?) 应该从提交列表中删除那些与原

我们使用
git rev list HEAD--count
作为构建过程的一部分来生成修订号

我们已经完成了这个项目,然后将它作为一个新项目添加到我们的私有gitlab中。生成此项目时,希望修订号仅统计自fork之后所做的提交

实现这一目标的最佳方式是什么


我对git还是新手。我们是否应该在分叉点进行标记,并从那里计算提交数?在新项目中重新定基?或者别的什么?

如果您知道“fork point”的提交(我们在这里称之为
abc1234
):

或者(其他语法,可能更直观一些?)


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

我建议标记提交,然后从那里开始计数。 可以通过以下方式实现这一点:

git版本列表——计数头^

例子 这将输出:
1

如果您要分支机构:

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

有很多方法可以做到这一点,但我要提醒的是,这种生成生成版本号的方法可能会限制您在项目超出当前分支策略时如何使用分支(仅举一个例子)

您可以使用fork之前最后一次提交的提交ID。我不喜欢这种方法,因为当您看到这样的命令时,无法立即弄清楚“为什么”

git rev-list abcdef12..HEAD --count
(“那么,为什么
abcdef12
有意义/”)。此外,如果您曾经执行影响该提交的历史重写,那么您必须为新的提交ID更新构建脚本(但无论如何,这种重写是一件非常激烈的事情,所以这很容易就不重要了;我只是希望避免不必要的限制)

另一个选项是在fork处标记commit(正如您自己所建议的)。这缓解了这两个问题,因为您可以为标记指定一个有意义的名称,并根据历史重写的需要移动它

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

或者,由于它肯定是一个常量,您可以只计算一次到分叉点的提交次数,并在脚本中从该次数中减去该次数。从某些方面来说,这似乎更简单,但我认为实际上实施起来有点困难。

您能否详细说明这种方法在构建数字方面的局限性,或者提出更好的替代方案?@ChrisR-不太可能。这取决于项目的需要和假设。它可能会很好地工作,这取决于你如何使用它。e、 g.如果您只以这种方式对主版本进行编号,并且不允许从主版本中删除历史记录的重写,并且对单调递增的版本编号感到满意,即使它不是连续的。。。那么这可能很好。但在更一般的情况下,根据您对哪些构建进行编号或您的回购遵循哪些规则,构建可能会重新使用或重新使用。确保你明白什么时候会发生这种情况,然后你可以决定它是否有效。
git checkout -b test
<We do 3 commits>
git rev-list --count HEAD ^v1.0
git rev-list --no-merges --count HEAD ^v1.0
git rev-list abcdef12..HEAD --count
git rev-list project-start..HEAD --count