2013-01-24 48 views
20

我試過在TextWrangler中編輯一個php文件,將行結束符設置爲Unix,NetBeans和vim。當我將diff保存到一個補丁並嘗試應用它時,它會給出空白錯誤。當我輸入git diff時,我可以在我的行尾看到^M,但是如果我在vim中手動刪除這些文件,它會說我的修補程序文件已損壞,然後該修補程序根本不適用。我的差異包含尾隨空白 - 如何擺脫它?

我創建具有以下命令補丁:

git diff > patchname.patch

而且我通過查看一個乾淨的版本要修補的文件,並鍵入

git apply patchname.patch

如何應用它我可以創建這個補丁沒有空白錯誤?我之前創建了補丁程序,從未遇到過這個問題。

+0

您可能想要提供有關創建補丁程序的更多詳細信息。 – Chronial

+0

我添加了詳細信息。不知道這將是多麼有用,但它不會受到傷害。 – beth

+0

我面臨同樣的問題,並做了一些研究。它看起來像git自動添加這些空格到'git diff'和'fit show',所以用這樣的代碼製作的任何補丁都會有尾隨的空格。如果你有本地的linux內核git倉庫(linus內核樹),你可以運行'git show 402bae597e'。它會在靜態DEVICE_ATTR_RO(flags)之前向您顯示一個尾隨的空白。和上一行中的閉括號,即使它們不在代碼中。 – Hamzahfrq

回答

13

你確定那些是很難的錯誤嗎?默認情況下,git會警告空白錯誤,但仍然會接受它們。如果他們是很難的錯誤,那麼你必須改變一些設置。您可以使用--whitespace=標誌至git apply以每個調用爲基礎進行控制。嘗試

git apply --whitespace=warn patchname.patch 

這將強制默認行爲,即警告但接受。您也可以使用--whitespace=nowarn完全刪除警告。

控制這個的配置變量是apply.whitespace


僅供參考,這裏的空格錯誤並不是您的補丁錯誤。這是一種代碼風格的東西,默認情況下git會在應用補丁時抱怨。值得注意的是,它不喜歡尾隨空格。同樣,git diff將突出顯示空白錯誤(如果您要輸出到終端並且顏色處於打開狀態)。默認行爲是警告,但無論如何接受補丁,因爲不是每個項目都對空白狂熱。

+1

我明白了。然而,我很困惑這個空白是從哪裏來的。我沒有問是否應該關心它,我問了如何解決它。 – beth

+0

@beth:你爲什麼需要修復它? –

+1

空格來自您要應用的修補程序。這意味着它來自你最初採用的差異。 –

7

嘗試補丁-p1 < filename.patch

+0

這是做什麼用的? .diff文件從哪裏來? – beth

+0

它只是一個補丁文件 – flash

+0

我認爲你的克拉是向後或缺少某些東西。 – beth

20

GIT中應用--reject --whitespace =固定mychanges.path

+2

用於自動修復空白錯誤。 --whitespace = fix確保在應用路徑之前修復空白錯誤,--reject確保原子性,因此如果修補程序不適用,則不會修改工作目錄文件。來源:https://git-scm.com/docs/git-apply –