我们能说出 zshrc 函数中 git 命令失败的原因吗?
Can we tell the reason for failure of git command in zshrc function?
好的,所以我正在设置我的 .zshrc,在我的函数中,我想知道 git push
失败的原因,什么时候失败。
我知道我们可以通过检查 $?是0还是不是,像这样:
git push origin master # this command might fail for some reason.
if (($?)); then
# 1 == $? Failure
echo "Command Failed!!"
return 1
fi
echo "Command Successful!"
但这没有告诉我们原因(有冲突,一开始无法连接到互联网等)我该怎么做?
编辑
我正在创建自己的 .zshrc。目前的工作是 GitHub here.
我希望我的 .zshrc 能够 将对自身所做的更改保存到远程存储库并从远程存储库加载更改 。我快完成了,现在我正在创建一些错误陷阱。正如您在我的远程仓库中看到的那样,函数 savezshrc
将:
- 通过比较 home zshrc 和本地 repo(称为 repo zshrc)中的 .zshrc,查看 ~/.zshrc(称为 home zshrc)是否有更改。
- 如果有变化,将 home zshrc 复制到本地 repo,
git add .
那里,然后 git commit
。
- 如果提交成功,它将尝试
git push origin master
。
此处,第 3 步可能会产生错误。如果该错误是:
- 无法连接到 github 或其他东西,我希望
git reset --hard HEAD~
回滚所有内容。否则,当您再次尝试时,您将停留在第 1 步。
- 检测到合并冲突,做进一步的git过程可能会搞砸一切,所以我希望它建议我解决冲突并
git push
手动.
目前卡住了怎么区分状态1和状态2,请问有什么办法吗?
考虑先尝试 fetch
从 Github。如果 git fetch bla bla
失败,那么您肯定无法访问存储库(或者没有访问权限,或者存储库不存在或...等)。
一旦提取成功,您应该按照此处的说明在内存中进行本地合并 如果内存合并成功。请参阅该答案的最新评论 "somewhat tested" 意味着这样做。
如果合并没有成功,您将中止。
现在,如果与上游的合并正常,那么推送也正常。
写出 shell 代码作为练习留给 reader :-P
好的,所以我正在设置我的 .zshrc,在我的函数中,我想知道 git push
失败的原因,什么时候失败。
我知道我们可以通过检查 $?是0还是不是,像这样:
git push origin master # this command might fail for some reason.
if (($?)); then
# 1 == $? Failure
echo "Command Failed!!"
return 1
fi
echo "Command Successful!"
但这没有告诉我们原因(有冲突,一开始无法连接到互联网等)我该怎么做?
编辑
我正在创建自己的 .zshrc。目前的工作是 GitHub here.
我希望我的 .zshrc 能够 将对自身所做的更改保存到远程存储库并从远程存储库加载更改 。我快完成了,现在我正在创建一些错误陷阱。正如您在我的远程仓库中看到的那样,函数 savezshrc
将:
- 通过比较 home zshrc 和本地 repo(称为 repo zshrc)中的 .zshrc,查看 ~/.zshrc(称为 home zshrc)是否有更改。
- 如果有变化,将 home zshrc 复制到本地 repo,
git add .
那里,然后git commit
。 - 如果提交成功,它将尝试
git push origin master
。
此处,第 3 步可能会产生错误。如果该错误是:
- 无法连接到 github 或其他东西,我希望
git reset --hard HEAD~
回滚所有内容。否则,当您再次尝试时,您将停留在第 1 步。 - 检测到合并冲突,做进一步的git过程可能会搞砸一切,所以我希望它建议我解决冲突并
git push
手动.
目前卡住了怎么区分状态1和状态2,请问有什么办法吗?
考虑先尝试 fetch
从 Github。如果 git fetch bla bla
失败,那么您肯定无法访问存储库(或者没有访问权限,或者存储库不存在或...等)。
一旦提取成功,您应该按照此处的说明在内存中进行本地合并 如果内存合并成功。请参阅该答案的最新评论 "somewhat tested" 意味着这样做。
如果合并没有成功,您将中止。
现在,如果与上游的合并正常,那么推送也正常。
写出 shell 代码作为练习留给 reader :-P