我有一个脚本(称为update_content.sh
),应该运行 3 个连续的git
命令,第一个版本如下所示:
#!/bin/sh
git fetch --all && git reset --hard && git merge
当我运行它时,我看到这个输出:
web@bane:~# ./update_content.sh
Fetching origin
error: unable to create file locales/fr.json (File exists)
error: unable to create file locales/it.json (File exists)
fatal: Could not reset index file to revision 'HEAD'.
然而当我把它改成这样时:
#!/bin/sh
git fetch --all
git reset --hard
git merge
运行它我看到这个:
web@bane:~# ./update_content.sh
Fetching origin
HEAD is now at 5859b2e Added Business tab
Already up-to-date.
换行方法得到了我想要的结果,但是它不具有“如果步骤失败则不继续”的质量&&
。是否有一些关于git
工作原理的内容使其与 不兼容,&&
或者我是否遗漏了一些内容&&
?
我做了更多的挖掘,发现&&
从命令行运行时的一个衬垫不会抛出错误,但实际上也没有重置本地工作副本,但是脚本内部的新行方法(并在时间)确实如此。
答案1
通常我会猜测前两个命令之一以非零代码退出。但这会阻止运行以下所有命令,并且未运行的命令无法生成错误消息......
但是,您可以使用以下命令检查命令的退出代码:
git fetch --all ; echo "exit code: ${?}"
git reset --hard ; echo "exit code: ${?}"
git merge ; echo "exit code: ${?}"
这将有助于运行脚本
bash -vx ./update_content.sh