2010-04-21 48 views
14

問題:2個項目共享中繼並正在更新一些相同的文件。現在需要發佈一個項目,因此在項目啓動之前從檢查點創建了一個新分支。是否可以使用一組更改列表創建修補程序?

我有一個只是從主線我的變更單號碼列表。使用該命令,我可以使用一系列'p4 describe#'命令生成一個列表,更改文件和diff輸出。

我可以重新格式化該輸出並以某種方式將其應用於新分支?

回答

4

Perforce會讓你挑選整合的修改表,這可能比嘗試生成和應用修補程序更容易。 Perforce將跟蹤您在哪裏集成的修訂版本,這可能會使未來的集成變得更加容易。

讓我們假設你曾經有一個主幹:

//depot/mycode/trunk 

你在所有的變化有檢查。你過去在某些點支幹線到:

//depot/mycode/rel 

而且你有主幹變更表合併列表。從映射相對客戶端規範,整合各自的變更表:

p4 integrate //depot/mycode/trunk/[email protected],1234 //depot/mycode/rel/... 

其中1234是變更表數。每次整合後解決。如果你能確定好的點,你也可能希望在整合過程中在各個檢查點建立,測試和提交你的集成。 (Perforce可以處理每個提交的多個集成,但是如果你犯了一個錯誤,你需要恢復到最後的版本簽入並重做中間集成並解決。)

+0

爲什麼我需要解決,如果我將成爲唯一一個簽入? 不在更改後提交的代碼中整合僅更改列表因素嗎?如果它正在查看整個文件,我可以描述衝突。 – webXL 2010-04-22 01:27:37

+0

Perforce讓您在每次集成時都解決問題,以防您需要手動解決任何衝突。在你的情況下,如果新的更改列表更改了以前更改列表中添加的代碼,則會發生衝突。 – 2010-04-22 02:44:39

19

對標題的迴應:「是否有可能使用一套更改列表創建一個補丁?「 是的。

p4 diff2 -u //path_to_your_sources/[email protected]_minus_1 //path_to_your_sources/[email protected] > /tmp/cln.patch. 

然後,您可以使用/tmp/cln.patch作爲修補程序實用程序的輸入。這裏,'cln'是您想要爲其創建補丁的已提交更改列表號。

+2

請注意,'p4 diff2'不會爲添加或刪除的文件輸出差異,所以那些需要特殊處理才能讓'patch'添加或刪除它們。 – jamesdlin 2016-09-28 23:21:18

8

我剛剛花了兩個小時與此掙扎。使用cygwin patch,我不得不走路,直到他們被識別。

最終,魔術咒語看起來像這樣(跨線斷開):

p4 diff2 -u //depot/foo/main/[email protected] //depot/foo/main/[email protected] | 
    sed '[email protected]//depot/@E:/Source/@g' | 
    sed '/^+++\|---/[email protected]/@\\@g' | 
    patch 

即:

  1. 使用p4 diff2獲得的部分統一差異(-u)我關心的兩個修訂之間的倉庫。第二個更改列表是我想要的第一個之前的,否則它不包含在diff中。
  2. 使用sed//depot/更改爲E:/Source/,這是我工作區所在的位置。
  3. 將正斜槓改爲雙反斜槓(這似乎使它工作)。
  4. 管理結果通過patch

Cygwin patch足夠聰明地檢查Perforce中的文件,但我不確定如何讓它靜靜地執行它。它會以Get file 'e:\Source\foo\whatever' from Perforce with lock?提示。

這是p4版本2010.1,它是在PowerShell上運行的最新Cygwin安裝。

呵呵,在此之後,patch寫出了unix風格的行結尾,所以我用u2d來修復它們。

+1

看到我的評論http://stackoverflow.com/a/4925343/179715有關使用'p4 diff2'的警告。 – jamesdlin 2016-09-28 23:22:27

相關問題