【发布时间】:2011-08-21 12:03:55
【问题描述】:
我正在尝试使用 git diff 将 .patch 文件应用于单个 .cpp 文件。
这些是我的文件:old.cpp、new.cpp 和 fix.patch。
old.cpp是未修改的原始源代码,new.cpp是修改后的源代码,fix.patch是我要的补丁创建应用于 old.cpp 时应将 new.cpp 的更改应用到它。 old.cpp 和 new.cpp 都以 Windows (CR LF) 行结尾,两个文件都是 918 KB 很大,源码中只修改了一行。
我通过将两个文件 old.cpp 和 new.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 中使用什么 command 或者我还需要做什么才能保留我新创建的 fix.patch 文件带有 Windows (CR LF) 行结尾,并且在将补丁应用到 old.cpp 后,新修补的 old.cpp 文件带有 Windows (CR LF) 也以行结尾,文件大小并没有大幅减少。我在这里收到了使用git apply 代替patch 的建议,但我不知道在git apply 之后输入什么内容,所以它按照我的情况工作。 :(
我正在使用 Windows XP SP2、Git 1.7.6、Git Extensions 2.24 和 Microsoft Visual C++ 2010 >.
【问题讨论】:
-
一个小问题:为什么你的源文件大小接近 1MB?
-
源码不是我写的。这与我的问题有什么关系?
-
我尝试在应用之前手动将来自 Unix 的 fix.patch 的行尾更改为 Windows,但即便如此,在应用它之后,修补文件仍采用 Unix 样式的行尾。请帮忙。
-
不是。这就是为什么我将其作为评论发布,并在其前面加上“附带问题”!
-
我刚刚检查了
git config core.autocrlf,它返回给我true。我在“Git Bash”提示中使用patch。
标签: git diff patch line-endings