簡體   English   中英

如何檢查 git 存儲庫中是否有任何提交?

[英]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

概括:

  • 一個提交被檢出:test git rev-parse HEAD &> /dev/null
  • 存在指向提交的引用: test git rev-list -n 1 --all &> /dev/null
  • 對象存在於 repo 中: 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 fsckgit count-objects - 或者失敗,列出.git/objects並檢查除infopack之外的任何內容(如果沒有文件.git/HEAD命令往往會失敗)。 是的,您實際上可以擁有一個包含 blob 和樹但沒有提交的 repo,但是您必須更加努力地到達那里。 如果您的腳本很嚇人,這些絕對是最安全的方法。

你想使用git log

如果您正在使用 cygwin 或在 linux 機器上, gitk也是一個有用的程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM