2011-07-14 18 views
1

我想创建一个使用差异的补丁,但我无法获得修补程序以使用在文件中使用的行结束字符时创建新文件或在文件更改时更改结束行。基本上,我在做:差异和补丁使用错误的行结束创建新文件或行结束时更改

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

所有dir1dir2之间的变化正确地应用,除了新文件换行符结束时默认为CR+LF,即使在dir2文件使用LF作为的结束线标记。此外,任何文件的差异只是一个行结束更改不以任何方式修补 - 差异似乎没有看到任何更改。

因此运行diff -rq dir2 dir3给出了一堆Files aaa and bbb differ,但diff -rwq dir2 dir3工作正常。

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

是否有任何方法可以使修补程序中包含的新文件和更改后的文件保持行从原始文件结束?

回答

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似乎是可选的,因为修补程序会自行确定修补程序类型。