Diff和补丁使用错误的行结束时,创建新文件或行结束改变



我试图使用diff创建补丁,但我无法让补丁在创建新文件时使用文件中使用的行结束字符,或者在文件更改时更改行结束字符。基本上,我在做:

cp -r dir1 dir3
diff -ruN dir1 dir2 > dir3patch.txt
cd dir3
patch -p1 < patch.txt

dir1dir2之间的所有更改都适用,除了新文件的行结束字符默认为CR+LF,即使dir2中的文件使用LF作为行结束标记。此外,任何文件之间的差异只是行尾的变化,都不会以任何方式修补——diff似乎没有看到任何变化。

所以运行diff -rq dir2 dir3给出一堆Files aaa and bbb differ,但diff -rwq dir2 dir3工作得很好。

我在Windows XP上使用UnxUtilsdiff - GNU diffutils version 2.7patch 2.5

是否有办法使补丁中包含的新文件和更改文件保持原始文件的行结束?

这行得通:

cp -r dir1 dir3
diff --binary -ruN dir1 dir2 > dir3patch.txt
cd dir3
patch --no-backup-if-mismatch --binary -u -p1 < patch.txt

不使用--binary标志意味着逐行解析文件,忽略EOL。由于某种原因,它不会总是干净地打补丁(给出Hunk #1 succeeded at 1 with fuzz 1.消息),所以我不得不包括--no-backup-if-mismatch,以防止它制作.orig文件。-u似乎是可选的,因为补丁会自己找出补丁类型。

相关内容

  • 没有找到相关文章

最新更新