2014-05-07 54 views

回答

2

我想你想

git rev-parse --show-toplevel &>/dev/null 

雖然你的問題的措辭混淆了我一下。當在Git倉庫中的任何地方運行時,它將成功(返回0),否則將失敗(返回非零),但不會產生輸出,因此適用於鏈接&&或與if一起使用。

請注意,這不在[[ ... ]]測試中,例如,

git rev-parse --show-toplevel &>/dev/null && echo "$PWD is in a Git repo." || echo "$PWD is not in a Git repo." 

會宣告當前工作目錄是否在Git倉庫中。

+0

這樣做的好處是什麼(__gitdir&>/dev/null && echo「foo」)?兩者似乎都有效。感謝您的時間! – user2251284

+1

哦,我甚至沒有意識到'__gitdir'是一個文字函數!我認爲這只是你製作的一個名字,而你正在尋找這樣一個功能的實現。但是,我仍然認爲'git rev-parse'方法更好,因爲它更強大:它不依賴於正在安裝的Git完成。的確,[Git完成並沒有爲所有人安裝](http://stackoverflow.com/questions/8314674/bash-gitdir-command-not-found-error-in-terminal)。 – ntc2

1

我只是這樣做。不fullproof,但它已經爲我工作了一段時間

if [ -d .git ] 

Example

+0

是這樣做的(然後用..或者../.git來做),但是我想象這在幾個級別之後是低效的(並且我計劃在每次更改目錄時都運行這個) – user2251284

+0

這是* not * the與'__gitdir'相同。 '__gitdir'命令似乎等同於'git rev-parse --top-level'。即,當PWD位於Git倉庫中的任何位置時,'__gitdir'成功,而[[-d .git]'只能在Git倉庫的頂層運行。 – ntc2

+0

沒錯,我想把所有的(或者至少是5個)關卡放到一個目錄中 – user2251284

2

此:

git rev-parse --quiet --git-dir 

它實際上是什麼Git使用本身git-sh.setup.sh其外殼腳本。

+0

請注意,'--quiet'實際上並沒有使命令安靜!?!? – ntc2

+0

它應該。 IIRC你是對的,但這是一個錯誤,它應該是固定的。 – FelipeC

相關問題