我正在爲一些同事編寫一個腳本供他們的Git存儲庫使用,我對如何可靠地找到回購協議工作樹的根目錄感到困惑:有沒有辦法找到一個Git倉庫的工作樹,因爲它的.git目錄?
通常,如果當前目錄位於工作樹,命令...
git rev-parse --git-dir
git rev-parse --show-toplevel
...將返回.git
目錄和工作樹的根部,分別。但是,如果當前目錄恰好是裏面的 a .git
目錄,那麼只有第一個命令有效。命令git rev-parse --show-toplevel
不顯示工作樹的頂層(至少,不適合我,在Linux上使用git 1.8.4.4)。
假設git rev-parse --is-bare-repository
回報false
,我通常會猜的git rev-parse --git-dir
父目錄或者是工作目錄(或地方工作目錄內),但如果用戶的GIT_DIR
設置了.git
目錄不是裏面的工作目錄,這是行不通的。 (例如,當用戶正在與子模塊,其GIT_DIR可能不是他們的工作樹中。)
我感到困惑的是,當一個GIT_DIR
,git rev-parse --show-toplevel
打印沒有錯誤消息中運行並返回0:
而某處運行相同的命令,這顯然不是一個Git倉庫返回錯誤代碼:
$ cd /; git rev-parse --show-toplevel ; echo $?
fatal: Not a git repository (or any of the parent directories): .git
128
如果there'a辦法找到從GIT_DIR
工作樹,可能有人TE讓我知道如何......或者如果根本無法從.git目錄中得出工作樹的位置,請幫我理解爲什麼,從哲學上講,.git目錄不保留對其工作樹的引用?
在此先感謝幫助/指針!