gpt4 book ai didi

git - 如何检查 git 存储库中是否有任何提交?

转载 作者:IT王子 更新时间:2023-10-29 01:24:58 26 4
gpt4 key购买 nike

我正在编写一个自定义 git 命令,它应该只在没有提交的全新存储库中运行(请参阅 this question)。如何在我的脚本中执行简单检查以查看现有存储库是否有零提交?

基本上,下面的空白处是什么?

if ___________ ; then
echo "Git repo already has commits. Aborting.
else
echo "Git repo has no commits. Doing whatever my script does."
fi

最佳答案

总结:

  • checkout 一个提交:test git rev-parse HEAD &>/dev/null
  • 存在指向提交的引用:test git rev-list -n 1 --all &>/dev/null
  • 存储库中存在对象:git fsckgit count-objects 的测试输出,或检查 .git/objects 的内容>

现在开始讨论!

如果你想知道一个提交是否被 checkout ,你可以使用git rev-parse HEAD。会有输出,所以你可能想重定向到 /dev/null 并只使用退出代码。对于所有实际目的,这已经足够好了 - 做正常的事情,如果没有 HEAD 指向任何东西,几乎不可能结束。但这是可能的,例如通过删除 .git 目录中的文件。根据您的脚本,这可能很重要 - 如果您要炸毁 .git 目录,您确实想要变得偏执。

如果你想查看是否有任何提交的引用,你可以使用 git rev-list -n 1 --all。同样,会有输出(遇到的第一个提交的 SHA1),因此重定向到 /dev/null 并检查退出代码。

最后,如果你想检查是否有任何提交 - 即使它们不在任何引用上(你必须真的努力进入这种状态)我可能只是使用 git fsckgit count-objects 检查是否存在对象 - 或者失败,列出 .git/objects 并检查除此之外的任何内容infopack(如果没有文件 .git/HEAD,命令往往会失败)。是的,你实际上可以有一个包含 blob 和树但没有提交的 repo,但你必须更加努力才能到达那里。如果您的脚本很可怕,这些绝对是最安全的方法。

关于git - 如何检查 git 存储库中是否有任何提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5491832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com