問題:2個項目共享中繼並正在更新一些相同的文件。現在需要發佈一個項目,因此在項目啓動之前從檢查點創建了一個新分支。是否可以使用一組更改列表創建修補程序?
我有一個只是從主線我的變更單號碼列表。使用該命令,我可以使用一系列'p4 describe#'命令生成一個列表,更改文件和diff輸出。
我可以重新格式化該輸出並以某種方式將其應用於新分支?
問題:2個項目共享中繼並正在更新一些相同的文件。現在需要發佈一個項目,因此在項目啓動之前從檢查點創建了一個新分支。是否可以使用一組更改列表創建修補程序?
我有一個只是從主線我的變更單號碼列表。使用該命令,我可以使用一系列'p4 describe#'命令生成一個列表,更改文件和diff輸出。
我可以重新格式化該輸出並以某種方式將其應用於新分支?
Perforce會讓你挑選整合的修改表,這可能比嘗試生成和應用修補程序更容易。 Perforce將跟蹤您在哪裏集成的修訂版本,這可能會使未來的集成變得更加容易。
讓我們假設你曾經有一個主幹:
//depot/mycode/trunk
你在所有的變化有檢查。你過去在某些點支幹線到:
//depot/mycode/rel
而且你有主幹變更表合併列表。從映射相對客戶端規範,整合各自的變更表:
p4 integrate //depot/mycode/trunk/[email protected],1234 //depot/mycode/rel/...
其中1234
是變更表數。每次整合後解決。如果你能確定好的點,你也可能希望在整合過程中在各個檢查點建立,測試和提交你的集成。 (Perforce可以處理每個提交的多個集成,但是如果你犯了一個錯誤,你需要恢復到最後的版本簽入並重做中間集成並解決。)
對標題的迴應:「是否有可能使用一套更改列表創建一個補丁?「 是的。
p4 diff2 -u //path_to_your_sources/[email protected]_minus_1 //path_to_your_sources/[email protected] > /tmp/cln.patch.
然後,您可以使用/tmp/cln.patch作爲修補程序實用程序的輸入。這裏,'cln'是您想要爲其創建補丁的已提交更改列表號。
請注意,'p4 diff2'不會爲添加或刪除的文件輸出差異,所以那些需要特殊處理才能讓'patch'添加或刪除它們。 – jamesdlin 2016-09-28 23:21:18
我剛剛花了兩個小時與此掙扎。使用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
即:
p4 diff2
獲得的部分統一差異(-u
)我關心的兩個修訂之間的倉庫。第二個更改列表是我想要的第一個之前的,否則它不包含在diff中。sed
將//depot/
更改爲E:/Source/
,這是我工作區所在的位置。patch
。Cygwin patch
足夠聰明地檢查Perforce中的文件,但我不確定如何讓它靜靜地執行它。它會以Get file 'e:\Source\foo\whatever' from Perforce with lock?
提示。
這是p4
版本2010.1,它是在PowerShell上運行的最新Cygwin安裝。
呵呵,在此之後,patch
寫出了unix風格的行結尾,所以我用u2d
來修復它們。
看到我的評論http://stackoverflow.com/a/4925343/179715有關使用'p4 diff2'的警告。 – jamesdlin 2016-09-28 23:22:27
爲什麼我需要解決,如果我將成爲唯一一個簽入? 不在更改後提交的代碼中整合僅更改列表因素嗎?如果它正在查看整個文件,我可以描述衝突。 – webXL 2010-04-22 01:27:37
Perforce讓您在每次集成時都解決問題,以防您需要手動解決任何衝突。在你的情況下,如果新的更改列表更改了以前更改列表中添加的代碼,則會發生衝突。 – 2010-04-22 02:44:39