总结:
- 一个提交已签出:测试
git rev-parse HEAD &> /dev/null
- 指向提交一个REF存在:测试
git rev-list -n 1 --all &> /dev/null
- 对象在回购存在:的
git fsck
测试输出,git count-objects
,或检查内容.git/objects
现在讨论!
如果您想知道提交是否已签出,您可以使用git rev-parse HEAD
。将会有输出,所以你可能想重定向到/dev/null
,并使用退出代码。出于所有实际目的,这将足够好 - 做正常的事情,几乎不可能在没有任何指示的情况下结束。但是可以,例如删除.git目录中的文件。根据你的脚本,这可能很重要 - 如果你要吹掉.git目录,你确实想成为偏执狂。
如果你想查看是否有任何提交的文件,你可以使用git rev-list -n 1 --all
。同样,会有输出(遇到第一次提交的SHA1),因此重定向到/dev/null
并检查退出代码。最后,如果你想检查是否有任何提交 - 即使他们没有任何参考(你必须尝试真的很难进入这个状态),我可能只是检查存在与git fsck
或git count-objects
- 或如果没有,请列出.git/objects
并检查除info
和pack
之外的任何对象(如果没有文件.git/HEAD
,命令往往会失败)。是的,你实际上可以有一个回报与斑点和树木,但没有承诺,但你不得不努力到达那里。如果你的脚本是可怕的,这些是绝对最安全的方法。
git log会有什么用处? – 2011-03-30 20:21:18