我目前正在尝试对(github)存储库的PR进行代码样式检查,并且我希望向提交者提供补丁,以便他们可以轻松地修复代码样式.为此,我正在拉下他们的PR,在它上面运行我们的解密脚本以修复任何样式错误,并且想要创建一个可以轻松应用的.patch文件.但是,它一直打破一些文件.
我这样做(git版本1.7.10.4 with core.autocrlf=input,core.filemode=false):
$ git checkout pr-branch
$ git log -1 (shows: commit dbb8d3f)
$ git status (nothing to commit, working directory clean)
$ <run the code styler script, which modifies some files>
$ git diff > ../style.patch (so the patch file lands outside the repo)
$ git reset --hard HEAD (to simulate the situation at the submitter's end)
$ git log -1 (shows: commit dbb8d3f)
$ git status (nothing to commit, working directory clean, so we are where we started)
$ git apply ../style.patch
error: patch failed: somefile.cpp:195
error: somefile.cpp: patch does not apply (same output using the --check option)
Run Code Online (Sandbox Code Playgroud)
这仅适用于某些文件,而不是所有文件.我不知道如何对此进行故障排除,即如何让git告诉我它到底出错的地方 - 它只是在我挖掘时告诉我一个大块#,但这仍然是非常巨大的.
到目前为止我尝试过的(没有成功):
apply --reverse, apply --whitespace=nowarndiff HEAD而不是diff孤单format-patch,删除虚拟提交,应用git-am或不使用补丁-3,或申请 git-applypatch命令修补我不知道差异有什么不对.空白的东西应该只发出警告,对吗?在任何情况下,我都不想忽略它们,因为它是一种明显涉及空白的样式修复.
我该如何修复/诊断这个,甚至找出它确切的位置?如果我发布其中一个罪魁祸首文件的差异会有帮助吗?令我感到困惑的是,committ工作没有问题,但是从提交创建的补丁没有?
经过几个小时的摔跤,我知道了......
Fra*_*nov 34
更新:
您可以使用git apply -v以查看有关正在进行git apply --check的操作的更多详细信息,仅验证操作或git apply --index重建本地索引文件.
根据您的评论,您的本地索引似乎已损坏,因此index解决了它.
我将留下我的原始答案和评论主要是为了让人们了解正在发生的事情,因为我怀疑其他人会根据问题描述跳转到相同的初步结论.
------
差异很可能与差异没什么不对.而是查看目标git存储库.在你做的时候git reset --hard HEAD,没有什么可以保证你HEAD在那个其他存储库上与HEAD你的存储库相同.
做git log目标回购,并期待在提交上方.它与你制作差异的那个一样吗?最有可能的不是.查看历史记录并检查是否存在您需要的提交.如果是,那么目标回购就在你的前面,你必须回去,做git pull(或git rebase)并产生新的差异.如果不是,则目标仓库在您的后面,您需要在目标仓库上执行git pull(或git rebase)以使其加速.
请记住,如果你有其他人承诺你的"主"仓库(你的机器人和目标存储库正在从中撤出),你可能需要git pull两个存储库,以使它们进入合理的最近常见提交.
尝试检查您的补丁文件 - 示例:
git apply --reject mypatch.patch
Run Code Online (Sandbox Code Playgroud)
这将显示差异,如果有的话 - 这是一个如何看起来的例子:
error: patch failed: <filename>:<linenumber>
error: while searching for :
cout << "}" << endl; // example of a line in your patch
Run Code Online (Sandbox Code Playgroud)