【发布时间】:2013-01-16 23:03:13
【问题描述】:
我目前正在尝试对 (github) 存储库的 PR 进行代码样式检查,并且我想向提交者提供补丁,以便他们可以轻松地修复代码样式。为此,我正在拉下他们的 PR,在其上运行我们的 uncrustify 脚本以修复任何样式错误,并希望创建一个他们可以轻松应用的 .patch 文件。但是,它始终会在某些文件上中断。
我愿意(带有core.autocrlf=input、core.filemode=false 的 git 版本 1.7.10.4):
$ 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 - 进行虚拟提交(提交工作没有问题!),使用
format-patch,删除虚拟提交,使用git-am应用补丁,带或不带-3,或使用git-apply - 将补丁文件放在本地目录中,而不是一个向上(抓住稻草,在这里)
- 查看 git-diff、-apply、-format-patch、-am 的手册页是否有用
- 用 linux
patch命令打补丁 - ....
我不知道差异可能有什么问题。空白的东西应该只警告,对吧?在任何情况下,我都不想忽略它们,因为它是一种明显涉及空白的样式修复。
我该如何解决/诊断这个问题,甚至找出它的确切位置?如果我发布其中一个罪魁祸首文件的差异会有帮助吗?让我感到困惑的是,提交工作没有问题,但从提交创建的补丁却没有??
在与这个问题搏斗了几个小时后,我的知识已经走到了尽头......
【问题讨论】:
-
git apply --reject查看被拒绝的更改。 -
已经试过了...这只显示了失败的整个大块(在这种情况下大约 2-300 行),所以信息量不是很大
-
另一个猜测 - 可能有一些文件重命名,结果可能会变成“gitignored”。
-
不,这只是文本文件中的样式更改,没有重命名。 Franci 的 --index 选项似乎解决了这个问题。
-
遇到了同样的问题。对我有帮助的是
--whitespace=fix,但我仍然不明白为什么,因为我刚刚创建了补丁并没有手动编辑它。