1

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

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

dir1和之间的所有更改都dir2正确应用,除了新文件的行尾字符默认为CR+LF,即使文件dir2用作LF行尾标记。此外,它们之间的差异只是行尾更改的任何文件都不会以任何方式修补 - diff 似乎没有看到任何更改。

所以运行diff -rq dir2 dir3会产生一堆Files aaa and bbb differ,但diff -rwq dir2 dir3工作正常。

我在 Windows XP 上使用diff - GNU diffutils version 2.7patch 2.5从。UnxUtils

有什么方法可以使补丁中包含的新文件和更改的文件保持从原始文件结束的行?

4

1 回答 1

1

这有效:

cp -r dir1 dir3
diff --binary -ruN dir1 dir2 > dir3\patch.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似乎是可选的,因为补丁会自行确定补丁类型。

于 2011-09-13T21:36:51.217 回答