2010-07-02 61 views
9

在窗口我創建了一個多文件差異比較有:如何在Linux上應用Windows SVN創建的diff?

svn diff > mydiff.diff 

然後轉移到Linux機器(具有相同的版本相同的回購,沒有變化)。我如何應用它?執行

patch -p0 < mydiff.diff 

後,我得到以下輸出:

patching file licstat/test/unittest/test_licstatactioncontainers.cpp 
File licstat/test/unittest/test_licstatactioncontainers.cpp is not empty after patch, as expected 
patching file licstat/test/unittest/test_licstatactions.cpp 
Hunk #1 FAILED at 99. 
1 out of 1 hunk FAILED -- saving rejects to file licstat/test/unittest/test_licstatactions.cpp.rej 
can't find file to patch at input line 295 
Perhaps you used the wrong -p or --strip option? 
The text leading up to this was: 
-------------------------- 
|Index: licstat/test/unittest/test_licenseserverusagemap.cpp 
|=================================================================== 
|--- licstat/test/unittest/test_licenseserverusagemap.cpp  (revision 6767) 
|+++ licstat/test/unittest/test_licenseserverusagemap.cpp  (working copy) 
-------------------------- 
File to patch: 

最後一行是提示符等待我的行動。

我應該如何創建/應用修補程序以使其正常工作?

(編輯)現在我看到,該文件丟失,差異沒有創建它。創建文件後手動我得到的錯誤是這樣的:當本地文件格式是CRLF,而不是LF當你在UNIX系統上,可能會發生

patching file licstat/misc/generic/mysql/stored_procedures.sql 
Hunk #1 FAILED at 220. 
Hunk #2 FAILED at 245. 
Hunk #3 FAILED at 622. 
Hunk #4 FAILED at 661. 
Hunk #5 FAILED at 810. 
Hunk #6 FAILED at 822. 
Hunk #7 FAILED at 868. 
Hunk #8 FAILED at 999. 
8 out of 8 hunks FAILED -- saving rejects to file licstat/misc/generic/mysql/stored_procedures.sql.rej 

回答

0

這種類型的錯誤。

補丁嘗試將svn diff補丁修改爲unix文件格式,但在本地文件處於dos模式時會跳出來,這可能會在您在dos和unix環境之間共享代碼庫時發生。

我什麼工作是,首先將所有的文件將要受到影響,例如:

grep ^+++ patchfile.patch | awk '{print $2}' | dos2unix 

然後應用補丁:

patch -p0 < patchfile.patch 
0

我之間相當定期的補丁文件一個Windows和Mac系統和patch確實似乎正確處理新行,所以我不認爲這是問題。看起來你可能已經刪除了test_licstatactioncontainers.cpp,第一個警告就是這個。第二個似乎在抱怨沒有找到文件本身。

難道這是一個文件名的情況下的問題? Windows對文件名不區分大小寫,但linux不是。該文件實際上在Linux上稱爲Test_LicenceServerUsageMap.cpp嗎?或者目錄LicStat/Test?

+0

是的,我刪除了文件(SVN),所以它應該是罰款。不,所有的目錄/文件名都是小寫的。 – ssobczak 2010-07-02 08:30:49

0

嘗試使用dos2unix命令將補丁文件中的行結尾從DOS轉換爲Unix。

+0

如果底層文件具有混合行結束符,則這不起作用。 – dshin 2014-11-12 19:54:11

7

如果您在Linux上的文件中有CR + LF換行符,則使用「dos2unix」將無濟於事。

這個命令應該做的工作與線的組合提要:

patch -p0 -l --binary < patch.diff 
相關問題