2011-01-22 115 views
164

我有一個名爲my_pcc_branch.patch的補丁。git:補丁不適用

當我嘗試應用它,我獲得以下信息:

$ git apply --check my_pcc_branch.patch 
warning: src/main/java/.../AbstractedPanel.java has type 100644, expected 100755 
error: patch failed: src/main/java/.../AbstractedPanel.java:13 
error: src/main/java/.../AbstractedPanel.java: patch does not apply 

是什麼意思?

我該如何解決這個問題?

+0

是否存在任何AbstractedPanel.java.rej文件?典型的這意味着一條線條機器人在源代碼和補丁中發生了變化(這裏第13行似乎受到了影響)。 – Rudi 2011-01-24 10:44:49

+0

不,我沒有找到任何* .rej文件。 – 2011-01-25 12:56:32

回答

231

約翰內斯Sixt的使用下面的命令行參數提示:

git apply --ignore-space-change --ignore-whitespace mychanges.patch 

這解決了我的問題。

10

它發生在混合UNIX和Windows git客戶端,因爲Windows並不真正具有「x」位的概念,所以您在Windows下的rw-r--r--(0644)文件的簽出由msys POSIX層「提升」爲rwx-r-xr-x(0755)。 git認爲模式差異基本上與文件中的文本差異相同,所以你的補丁不能直接應用。我認爲你唯一的選擇是將core.filemode設置爲false(使用git-config)。

這裏有一個問題msysgit與一些相關的信息:http://code.google.com/p/msysgit/issues/detail?id=164[email protected]郵件列表(重新路由到archive.org的2013年12月3日複印件)

+2

我試圖運行命令「git config core.filemode false」,但它沒有幫助 - 我仍然收到相同的消息。 – 2011-01-22 20:19:12

+0

假設您的樹中沒有未提交的更改,請嘗試`git reset --hard HEAD`以強制git使用新選項生效來重新簽出文件。 – 2011-01-22 20:25:54

+0

剛試過執行「git reset --hard HEAD」。它成功了(我看到了「HEAD現在在...」的信息),但「git apply」的問題仍然存在。 – 2011-01-22 22:46:23

159

git apply --reject --whitespace=fix mychanges.patch爲我工作。

33

該命令將應用補丁沒有解決它留下不好的文件作爲*.rej

git apply --reject --whitespace=fix mypath.patch 

你一定要解決這些問題。一旦解決運行:

git -am resolved 
1

當所有其他都失敗時,嘗試git apply's --3way option

git apply --3way patchFile.patch

--3way
當補丁不乾淨的應用,依傍3路,如果 補丁記錄它應該適用於斑點的身份合併,我們 在本地提供這些blob,可能會在工作樹中的文件中留下衝突 標記以供用戶解決。此 選項意味着--index選項,並且與 --reject和--cached選項不兼容。

典型的失敗案例儘可能多地應用該修補程序,並且讓你在git中遇到衝突,但通常情況下這樣做會造成衝突。可能比reject替代方案更容易一步。