在第一次推送之前检查git remote是否存在

apc*_*apc 24 git bash

我正在写一个bash脚本,我需要一个测试来查看给定的遥控器是否存在.

假设具体,我想测试遥控器是否faraway存在.如果我把东西推到了faraway,我就能做到if [ -d .git/refs/remotes/faraway ]; then ....但据我所知,faraway即使.git/refs/remotes/faraway不存在,别名仍然可以定义.

另一个选择是解析输出,git remote看看是否faraway出现.但我想知道是否有更简单的方法来检查是否faraway已定义,无论是否.git/refs/remotes/faraway/存在.

Chr*_*her 36

一想法:你可以测试退出状态git ls-remote faraway.这实际上会强制与遥控器进行通信,而不是仅仅在本地查找它的存在与否.

git ls-remote --exit-code faraway
if test $? = 0; then
    ....
fi
Run Code Online (Sandbox Code Playgroud)

  • 这可以简化为`如果git ls-remote遥远......".不需要测试命令. (9认同)
  • @apc啊哈.是的,你想要重定向到`/ dev/null`.当没有参数发出`git ls-remote`时,`--quiet`标志被[添加到一行沉默](https://github.com/git/git/commit/cefb2a5e39b165146aee3b093872721cc1155a87). (2认同)

tig*_*tig 30

另一种检查是否faraway定义的方法是.git/config:

if git config remote.faraway.url > /dev/null; then
  …
fi
Run Code Online (Sandbox Code Playgroud)


reu*_*ano 11

如果定义了远程.git/config,则可以避免使用ping远程服务器git remote.

if git remote | grep faraway > /dev/null; then
  ...
fi
Run Code Online (Sandbox Code Playgroud)

  • 这是一个子字符串搜索,所以如果你有其他包含`faraway`的遥控器,它可能会给出误报. (9认同)