2015-05-28 40 views
2

我正在尋找可能把git showgit format-patch甚至diff產生的補丁文件中的一個普遍的方式提交的最好的方式。如何將補丁應用到git,包括新文件和提交消息?

我希望以下特點:

  1. 現有文件應該被修改,並且修改上演了新的提交。
  2. 應該爲新提交創建並分階段創建新文件。
  3. 文件刪除也應爲新提交階段。
  4. 如果補丁使用git format-patch創建,提交信息應被解析並用於新的承諾。
  5. 如果補丁使用git show創建,提交信息應被解析並用於新的承諾。
  6. 如果補丁不受上述兩個工具創建的,它應該繼續處理。
  7. 的CLI應該能夠接受多個補丁,從而創造多次提交。

我在現有的解決方案最感興趣我考慮創建一個新工具之前。

以前的研究:

最接近的工具是git am但失敗#5,#6,所以它不是爲目的的。另一方面,git apply不會自行創建提交,並且至少失敗#2和#5。我不知道那些比這兩個更成功的工具。

當應用從RPM spec文件補丁的格式如下:

Patch0: abc.patch 
Patch1: xyz.patch 

我使用下面的sed命令目前正在建設的腳本:

sed -re 's/.*: *(.*)/git apply \1 \&\& git add . \&\& git commit -am \1/' 

這當然不會做# 4和#5,因爲它總是使用補丁文件名作爲提交消息,並且#7解決了。

+0

DIFF,顯示和格式的補丁都是爲了不同的目的。 – jthill

+0

@jthill這可能是事實,但不能回答這個問題,請參閱我的評論,以便Andreas回答。我能做些什麼來使問題更清楚嗎? –

回答

0

我知道傻冒詢問diffgit format-patchgit show但所有這些的意志爲轉移的改變,不提交。

有命令叫git bundle將轉移,而不是提交,包括作者,時間和一切。你可以閱讀docs

基本上你將創建至少包含新的提交,然後將該文件發送周圍包文件。接收器會將該文件克隆到一個存儲庫中,您可以合併,拉取或重新綁定等。

+0

我的問題是由包管理的動機,你不能選擇創建補丁工具,但你最好的生活與任何格式在野外使用。 –