2012-08-29 88 views
19

我正在寫一個bash腳本,我需要一個測試來查看給定的遠程是否存在。在第一次推動之前檢查git remote是否存在

假設,爲了具體,我想測試是否存在遠程faraway。如果我把東西推到faraway,我可以做if [ -d .git/refs/remotes/faraway ]; then ...。但據我所知,即使.git/refs/remotes/faraway不存在,別名faraway仍可以定義。

另一個選項是解析git remote的輸出,看看是否出現faraway。但我想知道是否有更簡單的方法來檢查是否定義了faraway,無論.git/refs/remotes/faraway/是否存在。

回答

32

一個想法:你可以在git ls-remote faraway上測試退出狀態。這實際上會強制與遠程的通信,而不是僅僅在本地尋找它的存在或缺席。

git ls-remote --exit-code faraway 
if test $? = 0; then 
    .... 
fi 
+7

這可以簡化爲'如果GIT中LS-遠程遙遠...'。測試命令不是必需的。 – jordanm

+0

優秀。謝謝!當'faraway'不存在時,我認爲在輸出中避免出現'致命...'的標準方法是在第一行的末尾添加&&/dev/null? – apc

+0

@apc使用幫助中有一個'--quiet'標誌,但它不在手冊頁中,它看起來沒有任何作用。 – Christopher

11

如果遙控器在.git/config定義,從而避免與git remote查驗遠程服務器。

if git remote | grep faraway > /dev/null; then 
    ... 
fi 
+7

這是一個子字符串搜索,所以如果有其他的包含'faraway'的遙控器。 –

20

的另一種方法,以檢查是否faraway.git/config定義:

if git config remote.faraway.url > /dev/null; then 
    … 
fi 
+0

這特別有助於防止遠程往返。 – hakre

相關問題