4

我正在尝试使用git diff将.patch文件应用于单个.cpp文件。

这些是我的文件:old.cppnew.cppfix.patch

old.cpp是未修改的原始源代码,new.cpp是修改后的源代码,而fix.patch是我要创建的补丁,当应用于old.cpp时,应该将 new.cpp 的更改应用到它。old.cpp和new.cppWindows (CR LF)行结尾,两个文件都是918 KB大,源代码中只修改了一行。

我通过将两个文件old.cppnew.cpp放在同一个文件夹中并使用带有命令的Git Bash提示符来创建补丁:

git diff -u old.cpp new.cpp > fix.patch

fix.patch文件成功出现,但是当我实际测试它并使用Git Bash将其应用于 old.cpp,键入:

patch old.cpp fix.patch

该补丁已成功应用,但old.cpp 的大小从918 KB减少894 KB在对kdiff3进行一些研究后,我发现我新创建的 fix.patch文件带有Unix (LF)行尾,并且在将其应用于old.cpp后,修补后的old.cpp也采用了Unix (LF)行尾。我想这也是old.cpp文件大小减小的原因。

我的问题是我应该在git中使用什么命令,或者我还需要做什么才能使我新创建的 fix.patch文件保留Windows (CR LF)行结尾,并且在将补丁应用到old.cpp后,新修补的old.cpp文件也带有Windows (CR LF)行结尾,文件大小并没有大幅减少。我在这里收到了一个建议来代替,但我不知道具体要输入什么,所以它按照我想要的方式工作,适合我的情况。:(git applypatchgit apply

我正在使用Windows XP SP2Git 1.7.6Git Extensions 2.24Microsoft Visual C++ 2010

4

3 回答 3

9

好的,我终于解决了这个问题,也吸取了教训。:)

补丁是使用Git Bash命令提示符创建的:

git diff -u old.cpp new.cpp > fix.patch

然后确保old.cppfix.patch同一个文件夹中, fix.patch的标题读取:

diff --git a/old.cpp b/old.cpp
index 04784e1..da68766 100644
--- a/old.cpp
+++ b/oldcpp

Git Bash提示符下输入:

git apply fix.patch

瞧!没有线路混乱、错误或问题。我希望这可以帮助有一天偶然打开同样东西的人感谢大家快速而深入的回复,他们帮助我今天学到了新的东西。:)

于 2011-08-22T05:02:54.790 回答
1

尝试使用“git apply”而不是“patch”来应用补丁。git apply 将调用补丁,但应遵守任何其他可能在此处对您的 crlf 问题进行排序的 git 指令。它还接受补丁选项(例如用于修剪路径元素的“git apply -p1”)。我也经常使用“git apply”将补丁从 git 应用到 CVS 树。'git apply' 不要求目标是 git 存储库。

于 2011-08-21T12:38:49.470 回答
0

使用--include标志。

git apply patch.patch --include=new.cpp
于 2018-12-03T12:46:48.587 回答