我编写了一个自动代码,以通过git python库应用git补丁。但是我想知道是否有可能 补丁已应用,但其中一些会出错。
try:
repo.git.execute(["git", "am", "patch")
except Exception as e:
for stat in status:
stat.update({"status": "failure"})
repo.git.execute(["git", "am", "--abort"])
return status
答案 0 :(得分:1)
您将必须在此处更精确地定义您的含义。尤其要注意:
我想知道的是[是否]有可能应用了某些补丁,而有些却给出了错误
git am path
当然有可能失败,并且git am
文档描述了在这种情况下发生的情况。如果邮箱格式的补丁程序包含七个部分,并且前三个部分干净地应用,但是第四个部分存在合并冲突或其他故障,则前三个部分将确实适用,而第四个部分实际上尚未应用。如果失败的原因是由于合并冲突,则索引和工作树将处于部分合并状态。如果补丁根本不适用,那么索引和工作树将与通过应用第三次提交而产生的状态匹配。无论哪种方式,git am
都会退出非零值。 (此时,您可以使用git am --abort
将所有内容恢复到开始之前的状态,并应用 no 补丁,或手动解决问题,然后运行{{1} }以继续该过程。)
gitpython documentation提到如果基础Git命令退出非零,则会引发git am --continue
。因此,您将在这里遇到异常。
旁注:git.exc.GitCommandError
在Python中通常太宽泛。通常,您应该在这里捕获期望的特定异常,在这种情况下,可能是except Exception
(对于 git.exc.GitCommandError
存在并运行,但报告失败)和{{ 1}}(对于总体上出了问题,例如未安装Git二进制文件,或者Git声称这根本不是一个存储库,等等。)