我有一个脚本(名为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 config alias.op '!git fetch --all && git reset --hard && git merge'
git op
&&
仅当第一个命令以状态 0 退出(成功)时才运行第二个命令。;
运行两个命令,即使第一个命令以非零状态退出。
你的例子&&
可以等效地解释为
if git fetch --all ; then
if git reset --hard; then
git merge
fi
fi