我目前正在尝试对(github)存储库的 PR 进行代码样式检查,并且我想向提交者提供补丁,他们可以使用这些补丁轻松修复代码样式。为此,我正在拉下他们的 PR,在其上运行我们的 uncrustify 脚本以修复任何样式错误,并希望创建一个他们可以轻松应用的 .patch 文件。但是,它始终会在某些文件上中断。
我愿意(带有core.autocrlf=input
,的 git 版本 1.7.10.4 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
人- 进行虚拟提交(提交工作没有问题!),使用
format-patch
,删除虚拟提交,应用git-am
带有或不带的补丁-3
,或应用git-apply
- 将补丁文件放在本地目录而不是一个目录中(抓住稻草,在这里)
- 检查 git-diff、-apply、-format-patch、-am 的手册页是否有用
patch
用linux命令打补丁- ……
我不知道差异可能有什么问题。空白的东西应该只警告,对吧?在任何情况下,我都不想忽略它们,因为它是一种显然涉及空格的样式修复。
我怎样才能修复/诊断这个,甚至找出它到底在哪里?如果我发布其中一个罪魁祸首文件的差异会有帮助吗?让我感到困惑的是,提交工作没有问题,但从提交创建的补丁却没有?
在与这个搏斗了几个小时之后,我的知识已经走到了尽头......