[英]How can I check whether a git repository has any commits in it?
我正在編寫一個自定義 git 命令,它應該只在沒有提交的全新存儲庫中運行(請參閱此問題)。 如何在我的腳本中執行簡單檢查以查看現有存儲庫是否具有零提交?
基本上,下面的空白處是什么?
if ___________ ; then
echo "Git repo already has commits. Aborting.
else
echo "Git repo has no commits. Doing whatever my script does."
fi
概括:
git rev-parse HEAD &> /dev/null
git rev-list -n 1 --all &> /dev/null
git fsck
測試輸出, git count-objects
,或檢查.git/objects
的內容現在開始討論!
如果你想知道一個提交是否被檢出,你可以使用git rev-parse HEAD
。 會有輸出,所以你可能想重定向到/dev/null
並只使用退出代碼。 出於所有實際目的,這已經足夠了 - 做正常的事情,幾乎不可能在沒有HEAD
指向任何東西的情況下結束。 但這是可能的,例如刪除 .git 目錄中的文件。 根據您的腳本,這可能很重要 - 如果您要炸掉 .git 目錄,您確實想變得偏執。
如果您想查看是否有任何提交的引用,您可以使用git rev-list -n 1 --all
。 同樣,會有輸出(遇到的第一次提交的 SHA1),因此重定向到/dev/null
並檢查退出代碼。
最后,如果你想檢查是否有任何提交——即使它們不在任何 refs 上(你必須非常努力地進入這種狀態)我可能只是用git fsck
或git count-objects
- 或者失敗,列出.git/objects
並檢查除info
和pack
之外的任何內容(如果沒有文件.git/HEAD
命令往往會失敗)。 是的,您實際上可以擁有一個包含 blob 和樹但沒有提交的 repo,但是您必須更加努力地到達那里。 如果您的腳本很嚇人,這些絕對是最安全的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.