在stackoverflow中有很多問題,詢問如何確定一個目錄是否在git控制之下 。答案是使用git
命令,通過子進程調用 命令。如何確定一個目錄是否是一個有效的git目錄而不需要git?
我想知道的是我們如何確定目錄是否是有效的git 目錄?
config
description
HEAD
hooks
info
objects
refs
這同樣與git init --bare
:
git init
命令.git
目錄下創建這些文件。
假設我運行git init
命令,然後從 我的系統中刪除/卸載git
。然後我想檢查一下目錄是否是git
目錄。顯然,我不能使用git rev-parse
命令 命令。所以,我懷疑檢查需要通過檢查這些文件來完成。在那些文件中需要存在那麼那麼.git
目錄 是一個有效的.git
存儲庫?還有什麼額外的檢查需要完成嗎?
UPDATE細節:
我需要通過這裏有效的最低檢查允許任何其他操作 進一步。我不善於解釋。但是,讓我們說,我有兩個函數(僞代碼):
fn is_valid(gitdir) {
// here will happens checking if a git dir is valid. it doesn't care
// if any content is corrupted.
return valid;
}
fn current_branch(gitdir) {
// here will show current branch. but, will only run if the gitdir
// is valid
// this function will read 'refs' directory
return current;
}
fn list_branches(gitdir) {
// here will list of branches. but, will only run if the gitdir is valid
// this function will read 'refs/heads'
return branches;
}
如果我只檢查.git
目錄,它不會在bare
庫工作。然後,我 發現git rev-parse
只會工作,如果HEAD
,refs
和objects
是 存在。那麼,如果檢查HEAD
,refs
和objects
就足夠了?
取決於「有效」的含義。 – 1615903
定義「有效」。如果某些Git對象損壞,可以嗎?如果* all * Git對象損壞怎麼辦?在聲明該目錄無效之前,您希望允許多少「與」目錄「錯誤」? – torek