git-apply神秘地失败了,如何解决/修复?

我正在尝试对(github)存储库的PR进行代码样式检查,我想将补丁提供给提交者,他们可以轻松地修复该代码。为此,我正在拉下他们的PR,运行我们的uncrustify脚本来修复任何风格的错误,并希望创建一个可以轻松应用的.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)

这只适用于一些文件,而不是全部。我不知道如何解决这个问题,即如何让git告诉我确切的错误在哪里 – 它只是告诉我一个垃圾#当我挖,但这仍然是巨大的。

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

> apply –reverse,apply –whitespace = nowarn
> diff HEAD而不是diff
>做一个虚拟提交(提交作品没有问题!),使用格式补丁,删除虚拟提交,应用补丁与git-am有或没有-3,或应用于git-apply
>将补丁文件放在本地目录中,而不是一个(抓住吸管,这里)
>检查git-diff,-apply,-format-patch,-am的手册页是否有用
>补丁与linux补丁命令
> ….

我不知道差异可能是错的。空白的东西只能警告,对吧?无论如何,我不想忽视他们,因为它是一个明显涉及空白的风格修复。

我如何修复/诊断这个甚至找到它确切地在哪里?如果我发布其中一个匪徒档案的差异,会有帮助吗?什么阻碍我也是committ工作没有问题,但从提交创建的补丁不?

摔了几个小时后,我在知识的最后…

更新:

您可以使用git apply -v查看有关发生的更多详细信息,git apply –check来验证操作,或者git apply –index来重建本地索引文件。

根据你的评论,似乎你的本地索引被破坏,索引解决了它。

我会留下我的原始答复和评论,主要是为了让人们了解发生了什么,因为我怀疑其他人会跳过与基于问题描述相同的初步结论。

——

很可能没有什么是差异的错误。而是看目标git仓库。当你进行git重置时 – HEAD,没有什么可以保证你那个其他存储库上的HEAD与你的HEAD是一样的。

git登录目标repo并查看顶部的提交。是否与您制作的差异相同?很可能不是。查看历史记录,检查您需要的提交是否存在。如果是,那么目标回购在你的前面,你必须回去,做git拉(或git rebase)并产生一个新的差异。如果不是,那么目标回购将落后于您,您需要在目标回购站上进行git pull(或git rebase),以提高速度。

请记住,如果您有其他人承诺您的“主”回购(您的机器人和目标存储库正在从其中提取),您可能必须git拉两个存储库,以使他们得到最近的一个常见的提交。

http://stackoverflow.com/questions/14649605/git-apply-fails-mysteriously-how-do-i-troubleshoot-fix

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:git-apply神秘地失败了,如何解决/修复?