混帐申请神秘失败,我该如何解决/修复?(git-apply fails mysteriously,

2019-08-16 16:57发布

我目前正试图向codestyle检查上(github上)库的永久居民,我希望提供的补丁,使他们能够轻松地解决codestyle提交者。 为此,我拉下自己的PR,运行我们uncrustify脚本在它修复任何风格的错误,并希望创建一个.patch文件,他们可以轻松地应用。 然而,它始终打破了一些文件。

我这样做(GIT版本1.7.10.4与core.autocrlf=inputcore.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)

这仅适用于某些文件,不是所有的人。 我不知道如何解决这一点,即如何让git的告诉我到底哪里出了问题 - 它只是告诉我,当我挖一大块#,但是这仍然是相当巨大的。

我到目前为止已经试过(没有成功):

  1. apply --reverseapply --whitespace=nowarn
  2. diff HEAD代替diff
  3. 做一个虚拟提交(提交作品没有问题!),利用format-patch ,删除假承诺,以应用补丁git-am带或不带-3 ,或申请git-apply
  4. 已在本地目录,而不是一升上来补丁文件(在抓救命稻草,在这里)
  5. 检查的git-DIFF的人的页面,-apply,-format补丁,用于-am有用的东西
  6. 与Linux补丁patch命令
  7. ....

我不知道什么可能是错误的差异。 空白的东西应该只给予警告,对不对? 在任何情况下,我不想理会他们,因为它是一个固定的风格,这显然涉及到的空白。

我怎样才能修复/诊断本甚至找出它捞出到底是什么? 它是否有助于如果我张贴的罪魁祸首文件之一的差异? 是什么令我感到困惑还在于,committ工作没有问题,但是从提交创建补丁不?

与此搏斗了几个小时后,我在我的知识结束...

Answer 1:

更新:

您可以使用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两个库,他们得到一个合理的最近的共同承诺。



Answer 2:

尝试检查对你的补丁文件 - 例如:

git apply --reject mypatch.patch

这将显示差异(如有) - 这里是它如何可能看起来像一个例子:

error: patch failed: <filename>:<linenumber>
error: while searching for :
    cout << "}" << endl; // example of a line in your patch


文章来源: git-apply fails mysteriously, how do I troubleshoot/fix?
标签: git patch