2012-08-29 62 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

相关问题