2012-07-17 86 views
32

好吧,我已經嘗試了所有可以在stackoverflow上找到的答案,但顯然沒有人能夠解決我的問題。我想將由SVN製作的補丁應用到git存儲庫。顯然,最簡單的方法是使用'git apply',但這似乎不起作用。將svn補丁應用到git存儲庫

$ git apply --ignore-space-change --ignore-whitespace < xxx_parser.patch 


<stdin>:10: trailing whitespace. 
     FORCE_LA_CHECK = false; stdin:23: trailing whitespace. 

<stdin>:79: trailing whitespace 
. 
. 
. 
. 
error: pmd/grammar/JspParser.jjt: No such file or directory 
error: patch failed: pmd/pom.xml:251 
error: pmd/pom.xml: patch does not apply 

這是xxx_parser.patch的內容:

$ head xxx_parser.patch Index: etc/grammar/JspParser.jjt 
--- etc/grammar/JspParser.jjt (revision 7704) 
+++ etc/grammar/JspParser.jjt (working copy) 

現在爲什麼它抱怨說,它無法找到文件PMD /語法/ JspParser.jjt?

修補程序中的路徑指向正確的目錄。

+0

您知道補丁文件可以對多個文件進行更改嗎?只需查看文件頭就可以看到補丁中的第一個文件。 – asm 2012-07-17 11:41:17

回答

43

我有一些問題應用SVN生成的補丁與Git。我建議直接使用patch命令應用任何Subversion修補程序,並使用git來驗證所述修補程序是否已成功應用。如果你有patch在命令行可執行命令

$ patch -p0 < xxx_parser.patch 
$ git diff 
+0

不幸的是,當我嘗試上述命令斷言失敗時,出現以下錯誤:(s &&大小),函數savebuf,文件/SourceCache/gpatch/gpatch-2/patch/util.c,第424行。 中止陷阱:6 – 2012-11-22 10:11:58

+0

我相信在[patch](http://savannah.gnu.org/projects/patch/)的舊版本中,'assert(s && size)'是與「_ \在file_結尾沒有換行符」相關的錯誤。幸運的是,它已經得到解決。確保您的系統是[patch-2.7.1](http://ftp.gnu.org/gnu/patch/)的最新版本。 – emcconville 2012-11-23 14:21:43

+0

如果出現行結束問題(修改了太多行),請嘗試使用二進制選項:patch --binary --no-backup-if-mismatch -p0 too 2015-09-07 08:51:29

5

@emcconville答案的作品。

對於其他人:

  1. 去了svn回購

    SVN差異--git >> gitFormat.patch

  2. 從您的(這個文件複製到)混帳回購協議

    git apply gitFormat.patch