2011-07-14 24 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似乎是可選的,因爲修補程序會自行確定修補程序類型。