簡體   English   中英

如何在Linux上應用windows SVN制作的差異?

[英]How to apply diff made by windows SVN on linux?

在Windows上我創建了一個多文件差異:

svn diff > mydiff.diff

然后將其移動到linux機器(使用相同版本的相同repo,沒有更改)。 我怎么用它? 執行后

 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: 

最后一行是等待我的行動。

我應該如何創建/應用補丁以使其工作?

(編輯)現在我看到,文件丟失了,差異沒有創建它。 手動創建文件后,我得到這樣的錯誤:

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

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

此命令應該使用換行符的任意組合來完成工作:

patch -p0 -l --binary < patch.diff

當你在unix系統上時,當本地文件格式是CRLF而不是LF時,可能會發生這種類型的錯誤。

補丁嘗試使svn diff補丁適應unix文件格式,但當本地文件處於dos模式時會跳閘,這可能發生在dos和unix環境之間共享代碼庫時。

對我有用的是首先轉換即將受影響的所有文件,例如:

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

然后應用補丁:

patch -p0 < patchfile.patch

我經常在windows和mac系統之間修補文件, patch似乎確實正確地處理了換行,所以我不認為這是問題所在。 看起來你可能已經刪除了test_licstatactioncontainers.cpp ,第一個警告就是這個。 第二個似乎抱怨沒有找到文件本身。

這可能是文件名案例問題嗎? Windows對文件名大小寫不敏感,但Linux不是。 該文件實際上是linux上的Test_LicenceServerUsageMap.cpp嗎? 還是目錄LicStat / Test?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM