Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 吉特';s ls远程测试开关始终返回false_Git_Bash - Fatal编程技术网

Git 吉特';s ls远程测试开关始终返回false

Git 吉特';s ls远程测试开关始终返回false,git,bash,Git,Bash,出于某种原因,我下面的bash开关将始终返回false/或者,我正在寻找一种方法来抑制来自git的响应,当存储库不存在时,这将与用户/传递序列一样,但无法使其工作 [ git ls-remote https://github.com/ehime/Bash-Tools.git &>- /dev/null ] && { echo Exists } || { echo Nope } 我尝试过这个,它确实有效,但不会像我想要的那样压制内容 [ "$

出于某种原因,我下面的bash开关将始终返回false/或者,我正在寻找一种方法来抑制来自git的响应,当存储库不存在时,这将与用户/传递序列一样,但无法使其工作

[ git ls-remote https://github.com/ehime/Bash-Tools.git &>- /dev/null ] && { 
    echo Exists 
} || { 
    echo Nope 
}
我尝试过这个,它确实有效,但不会像我想要的那样压制内容

[ "$(git ls-remote foo)" ] && { echo Yes; } || { echo No; }

在测试中,您没有运行git,而是为测试提供了一系列字符串(这几乎肯定会导致
[
输出错误消息)

如果您试图运行该命令,忽略所有输出并仅测试返回代码,则要删除括号
[
]
。它们不属于
If
语法的一部分。
[
是二进制代码(与
test
同义)

如果git ls remote…;则
将运行git并测试其返回代码


此外,那里的
/dev/null
没有为您做任何事情。
$>-
已经关闭了标准输入和标准输出。
/dev/null
有一个“ref”参数指向
git ls remote

我要找的是

[ "$(git ls-remote $REPOSITORY_URL 2> /dev/null)" ] && { echo Exists; } || { echo Nope; }
如果有人想要,可以使用受限制git shell的完整git命令

# If no project name is given
if [ $# -eq 0 ]; then
    # Display usage and stop
    echo "Usage: addrepo <project.git>" ; exit 1
fi

# Set the project name, adding .git if necessary
project=$(echo "$*" | sed 's/\.git$\|$/.git/i')

[ "$(git ls-remote $project 2> /dev/null)" ] && {
    cd /home/git/repositories/
    git clone --mirror "${project}"
} || {
    echo "[ERROR] Unable to read from '${project}'"; exit 1
}
#如果没有给出项目名称
如果[$#-eq 0];则
#显示用法和停止
echo“用法:addrepo”;退出1
fi
#设置项目名称,必要时添加.git
项目=$(echo“$*”| sed's/\.git$\\\\124;$/.git/i')
[“$(git ls remote$project 2>/dev/null)”]&&{
cd/home/git/repositories/
git克隆--镜像“${project}”
} || {
echo“[ERROR]无法读取“${project}”;退出1
}

在该测试中,您没有运行git,而是为测试提供了一系列字符串(这几乎肯定会导致
[
输出错误消息)https://github.com/ehime/Bash-Tools.git &>-/dev/null)]&{echo Yes;}|{echo No;}这将正确运行git命令,但由于您正试图放弃所有也无法实现目标的输出。您可能确实希望测试返回代码,而不是输出。这就是为什么存在
--退出代码
的原因,但是是的,这将在假定
ls remote
仅在某些r找到EF(假设这是您想要的测试)。不幸的是,退出代码在成功与回购协议通信时通常返回bool false,因此也总是会使语句失败。IMHO尝试镜像空存储库是毫无意义的。啊,没错,
--exit code
的文档似乎确实表明返回代码没有它可能那么有用。