git - "git rev-list --all --count"会掉下来吗?

标签 git

如果以后从任何分支执行,git rev-list --all --count 的输出会下降吗?同一个存储库?

(我想将它用作 build number,它将在所有分支中单调递增。)

最佳答案

可能的,这取决于您可以简单地避免的某些条件:

  • --all 查找 refs/ 中的每个引用(另请参阅 git for-each-ref)以获取起点提交 DAG
  • git 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/

相关文章:

git - 无法解决 rebase 冲突

git - autosetuprebase 与 autosetupmerge

linux - 工作流 : Working with git and sandbox on linux

git - 如何使用 TortoiseGit 将单个文件更改推送到两个分支?

具有 ssh 访问权限的共享主机上的 Git 存储库 - 多个用户/一个 ssh 帐户

git - 如何在 Android Studio 中 git commit diff 期间编辑文件?

ruby-on-rails - 无法验证 https ://rubygems. org/的 SSL 证书

svn - 使用 git-svn 处理 SVN 关键字扩展

git - 使用 TortoiseGit 撤消 git 提交

python - 如何使用 python 从 git 存储库获取特定文件版本