2013-06-27 79 views
14

我有一個修補程序文件。git:修補程序沒有有效的電子郵件地址

我想將這個補丁應用到我在git倉庫中的代碼。

當我使用subversion時,這個過程非常簡單:右擊 - > tortoise svn - >應用補丁。它始終如我所願。

但我不能這樣使用git。 Git不適用我的補丁。它抱怨

修補程序沒有有效的電子郵件地址。

所以,我的問題是: 「如何在這種情況下應用補丁文件?」

回答

9

Git創建的補丁意在與Git工具一起使用。使用

git apply <patch> 

如果補丁不是用Git創建的,那麼就使用Git後面的補丁程序。通常這是程序'補丁':

patch <patch> 

應用補丁後,像往常一樣在Git中添加和提交。

+1

正是這個命令不起作用。我上面寫道,git抱怨錯過了電子郵件。 – tmporaries

+0

您是否使用Git創建了修補程序? – GoZoner

+0

不可以。這是由龜差異查看器生成的「統一」補丁格式。 – tmporaries

1

如果它對你使用圖形界面而不是命令行更有幫助,那裏有相當多的工具可以使它在Git中做很多事情比較簡單,包括應用修補程序)。我找到的最有幫助的是SourceTree,但我相信如果您搜索,那裏還有其他好的東西。

5

此工程與mbox下載的文件pipermail許多開源項目使用。這在OP的情況下可能不起作用,但當使用提取的消息/補丁使用git ampipermail時,會出現相同的症狀/問題結果。


製作該文件的備份和編輯,以添加一行,

From: [email protected] (Proper Name) 

常行已經存在,但反垃圾郵件功能可能已經轉換的@標誌文本。您可以修補一堆文件與GNU sed命令一樣,

sed -ie 's/\(From:.*\) at /\[email protected]/' *.patch 

這只是取代了「在」與@標誌。在此之後,git am應該接受它。


如果您有機會獲得你可以使用常規的命令Git倉庫,

  1. git checkout oldbranch
  2. git format-patch HEAD~4這將使四個文件是最後修改補丁(更改號碼你的情況)。
  3. git checkout master
  4. git am *.patch

你會得到同樣提交IDS,信息等作爲遠程倉庫,可以以後會有用。


工具,比如gitkkdiff產生相同的數據格式補丁和你沒有得到提交歷史。如果你有這種類型的數據,你必須使用git apply或者像上面那樣生成補丁。

參見:Difference between git format-patch and git diff

+0

在.patch文件中添加電子郵件地址後,git抱怨缺少SHA哈希值。我想我會嘗試GoZoner的回答。 –

+0

我有我的本地回購,一年前從國外項目中複製了一些源代碼。同時該項目已更新,以及我本地的回購。我想要納入國外的改進。通過將最新版本複製到舊分支並顯示所有差異,我對外國項目做了一系列修改。我還沒有找到一個工具,將這個統一的差異應用到我的本地回購。 –

+0

我終於用kdiff3做了,但沒有使用我以前創建的補丁。 –

1

如果您的提交消息中有一行以From:開頭的行,則可能出現此錯誤。例如,我有一個補丁,其中我固定一個錯字,並且在提交消息的主體我有:

Fixes a typo. 
From: 873524cab1 "Introduced some bug on this commit" 

的.patch文件,由格式補丁生成有兩個From:線,其中之一是電子郵件地址,另一個是我糟糕的消息。 Git正在拿起第二個From:行,並試圖找到電子郵件地址。

修復方法是將行提交消息更改爲不在行的開頭處有From:

相關問題