首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >git-应用程序神秘失败,如何排除/修复?

git-应用程序神秘失败,如何排除/修复?
EN

Stack Overflow用户
提问于 2013-02-01 15:29:12
回答 3查看 62.7K关注 0票数 40

我目前正在尝试对一个(github)存储库的PRs进行代码样式的检查,并且我希望将补丁交付给提交者,他们可以轻松地修复代码。为此,我正在删除他们的PR,在上面运行我们的uncrustify脚本来修复任何样式错误,并希望创建一个可以轻松应用的.patch文件。但是,它总是会破坏一些文件。

我知道(使用core.autocrlf=inputcore.filemode=false的git版本1.7.10.4 ):

代码语言:javascript
运行
复制
$ 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告诉我它到底出了什么问题--它只在我挖掘的时候告诉我一个hunk#,但这仍然是相当大的。

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

  1. apply --reverseapply --whitespace=nowarn
  2. diff HEAD而不是diff
  3. 进行虚拟提交(提交工作没有问题!),使用format-patch,删除虚拟提交,使用带或不带-3git-am应用修补程序,或使用git-apply应用修补程序
  4. 将补丁文件放在本地dir中,而不是一个向上(抓取吸管,在这里)
  5. 查看git-diff,-apply,-format-修补程序,-am的手册页,以获得任何有用的信息。
  6. 使用linux patch命令的修补程序
  7. ……

我不知道这种差别会有什么问题。白色空间的东西只应该警告你,对吧?无论如何,我都不想忽视它们,因为这是一个很明显涉及空白的样式修复。

我如何修复/诊断这个问题,甚至找出它的确切位置?如果我贴出其中一个罪犯文件的差异会有帮助吗?还有什么让我感到困惑的是,提交没有问题,但是根据提交创建的补丁没有问题?

在与这个搏斗了几个小时后,我的知识已接近尾声.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-01 15:48:14

更新:

您可以使用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),以使其达到速度。

请记住,如果您有其他人承诺您的“主”回购( bot您的和目标存储库正在退出),您可能必须git pull这两个存储库,以使他们达到一个合理的最近的普通提交。

票数 39
EN

Stack Overflow用户

发布于 2016-11-18 12:09:11

尝试对照修补程序文件进行检查-示例:

代码语言:javascript
运行
复制
git apply --reject mypatch.patch

这将向您展示差异(如果有的话)--下面是一个示例,说明它的样子:

代码语言:javascript
运行
复制
error: patch failed: <filename>:<linenumber>
error: while searching for :
    cout << "}" << endl; // example of a line in your patch
票数 11
EN

Stack Overflow用户

发布于 2020-06-17 16:17:12

在这种情况下,如果您已经尝试了下面列出的所有选项:

  1. 调查文件中潜在的不可打印/不可见字符
  2. 使用dos2unix进行转换
  3. 更改git配置以调整处理行尾的方式,例如:

代码语言:javascript
运行
复制
git config --global core.autocrlf input

在这种情况下,另一个邪恶的根源可能是您的IDE。

例如,一些JetBrains IDE(如PHPStorm )有以下选项:

今天在一个奇怪的修补问题上花费了超过4个小时的时间之后,最终出现了以下错误:

代码语言:javascript
运行
复制
git apply < my.git.patch --verbose
...
error: patch failed: plugins/some/file.php:74

我意识到我是我的编辑的牺牲品(我不确定这是否是默认行为)。

我使用PHPStorm检查修补程序文件,它静默地从补丁文件中删除一个空白,该空白实际上存在于需要修补的目标文件上。

这是非常狡猾的,最后我将Strip trailing spaces on Save for选项设置为None,使其再也不会碰到这样的问题。

还请记住,与平台相关的差异,如底层文件系统(MacOS/Linux )的区分大小写,也可能是可疑的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14649605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档