如果以后从任何分支执行,git rev-list --all --count
的输出会下降吗?同一个存储库?
(我想将它用作 build number,它将在所有分支中单调递增。)
最佳答案
它是可能的,这取决于您可以简单地避免的某些条件:
--all
查找refs/
中的每个引用(另请参阅git for-each-ref
)以获取起点提交 DAGgit rev-list
然后跟踪每个提交对象到它的所有父项,一直回到根提交- 和
--count
打印没有--count
时本应打印的提交数。
这意味着这个问题等同于“如何减少此树遍历中访问的提交数?”答案是从存储库中删除提交,或者甚至只是删除一些引用,使其中的一些引用提交可达。
例如,我们可以从创建一个“raise the count”引用开始;让我们把它变成一个分支,以便随后也能轻松地增加计数:
$ git checkout -b raise-the-count
现在让我们添加一堆提交:
$ for i in $(jot 10); do git commit -m "dummy commit $i" --allow-empty; done
有了这个 raise-the-count
分支,我们现在得到的 --count
比以前高 10。现在我们删除分支标签:
$ git checkout master; git branch -D raise-the-count
我们得到的 --count
会回落同样的 10 次提交。
删除提交非常困难(这相当于在删除的提交“之后”替换每个提交;这与删除敏感文件是同样的问题;git filter-branch
会让你这样做,但它是痛苦)但删除一个分支——这可以通过 reflogs 恢复一段时间——不是很难,最终只在该分支上的提交将被垃圾收集。
总结(如果“tl;dr”跳到这里)
同样的规则适用于所有其他引用(主要是标签和“注释”),所以如果你将“永远不要删除任何东西”的规则强加给自己,并坚持下去,你将得到一个非递减的 - -计数
。
关于git - "git rev-list --all --count"会掉下来吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801385/