Pla*_*der 4 git diff patch line-endings
我正在尝试使用git diff将.patch文件应用于单个.cpp文件.
这些是我的文件:old.cpp,new.cpp和fix.patch.
old.cpp是原始未修改的源代码,new.cpp是修改源和fix.patch是我想要的,当应用到创建补丁old.cpp应适用从变化new.cpp它.既old.cpp和new.cpp与视窗(CR LF)行结尾,这两个文件是918 KB大,只有一行被在源修改.
我通过将两个文件old.cpp和new.cpp放在同一个文件夹中并使用Git Bash提示符来创建补丁:
git diff -u old.cpp new.cpp > fix.patch
Run Code Online (Sandbox Code Playgroud)
该fix.patch文件成功出现,但是当我实际测试,并运用它来old.cpp与混帐击键入:
patch old.cpp fix.patch
Run Code Online (Sandbox Code Playgroud)
补丁正在成功应用,但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 SP2,Git 1.7.6,Git Extensions 2.24和Microsoft Visual C++ 2010.
好的,我终于解决了这个问题并学到了我的教训.:)
使用Git Bash命令提示符创建补丁:
git diff -u old.cpp new.cpp > fix.patch
Run Code Online (Sandbox Code Playgroud)
然后确保old.cpp和fix.patch位于fix.patch标题所在的同一文件夹中:
diff --git a/old.cpp b/old.cpp
index 04784e1..da68766 100644
--- a/old.cpp
+++ b/oldcpp
Run Code Online (Sandbox Code Playgroud)
在Git Bash提示符后输入:
git apply fix.patch
Run Code Online (Sandbox Code Playgroud)
瞧!没有线路混乱,错误或问题.我希望有一天能帮助那些偶然发现同样事情的人感谢大家快速而深刻的回复,他们帮助我学到了今天的新知识.:)