2011-11-27 187 views
2

當我嘗試使用git am來修補這個問題時,考慮perforce diff,它表示「修補程序格式檢測失敗」。perforce diff to git

如何從perforce獲取我的更改並將其應用到git分支?

這是DIFF的前幾行

==== //depot/a.c#162 - /asdf/a.c ==== 
4326a4327,4642 
> /* 
> *---------------------------------------------------------------------------- 
> * 
> * -- 
+3

檢查'p4 diff'是否有創建*統一差異*的選項。 '-u'可能值得一試。 – ThiefMaster

回答

5

請確保您生成p4 diff -du的差異來獲得unified diff format,這對於像patch這樣的工具來說效果更好,並且(我相信)是Git可以理解的唯一格式。

您還可能需要編輯修補程序以取出Perforce語法;如您所見,文件名稱顯示爲//depot/a.c#162,其中patchgit apply可能會被解釋爲實際的文件名; a.c#162。如果出現在補丁中,請嘗試刪除#162部分。

,準確地取決於你在哪裏應用補丁,你可能需要通過-p1patchgit apply爲了脫光領先/,或-p2脫光整個領導目錄。

+0

任何想法如何讓'describe'生成的diff被'patch'識別? – haridsv

+0

嗨@布萊恩,有沒有任何命令可以快速刪除所有'#N'。謝謝! –

+1

@dien沒有Perforce在我面前檢查確切的格式,但是像'sed -Ee's |(//.*)#[0-9] + | \ 1 |' output.patch應該可以做到。這是相當不準確的,所以在試圖應用補丁之前檢查它是否合理。 –

0

使用git apply,或做不到這一點使用patch(1)直接,然後提交結果。

+0

他們都沒有工作。 –

+1

爲什麼不,你會得到什麼錯誤?你的perforce diff工具是什麼,它爲什麼不生成適當的補丁格式? –

+0

我做了p4 diff>文件和patch -p0