2010-03-18 51 views
16

所以這裏是我的場景:Perforce:我如何將p4集成一個本地uncommited更改列表?

我有兩個項目projectA和projectB。 branchspec自動將projectA與projectB集成。 現在,我有一個修改projectA中某些文件的更改列表 - 我還沒有提交/提交此更改列表。

我想這個更改列表只能進入projectB。

做一個 P4整合-b branchspec -c changelistNumber

顯示

「所有版本(段)集成。」

如何整合未提交的更改列表?

+0

這是一件顯而易見的事情要做。爲什麼Perforce讓它變得如此痛苦? 「 – 2015-11-09 14:24:12

+1

」5年前問,查看14087次。「 Perforce會很好地研究這些論壇,以瞭解用戶想要如何處理他們的軟件以及哪些方面不足。這裏有一個鏈接到大多數瀏覽的問題https://stackoverflow.com/search?tab=active&q=%5bperforce%5d%20views%3a2500 – 2016-03-09 11:22:03

回答

11

砍十歲上下的解決方案:

  1. 退房B工程
  2. 手動從項目中的文件複製到B項目文件(他們不是因爲寫保護步驟1)
  3. 擱置項目修改列表
  4. 提交到B
  5. 整合的B文件A和步驟解決
  6. 取消擱置文件3.解決需要ACCE配合你的。
  7. 提交給準備當

另一種方法是創建一個單獨的分支,你需要做你的工作,然後INTEG爲A或B。

總體思路是,Perforce根據提交或擱置的更改列表工作。集成非承諾更改列表的想法似乎違背了Perforce的自然穀物,這使得這些解決方法變得繁瑣。

+4

「一般的想法是,Perforce的作品提交或擱置變更名單」。我會記住:) – PlagueHammer 2010-03-18 22:39:27

+0

忽略它的危險;) – 2010-03-19 00:55:44

+1

「一般的想法是,Perforce的作品...」樂觀。 – 2015-12-02 15:41:53

1

您可以使用P4_Shelve將更改移至新分支,然後您可以將其集成到projectB。

+1

你是怎麼做到的?你如何在不同的分支取消擱置? – 2011-06-02 01:27:36

+0

我並不是指主要的p4客戶端擱置命令,而是我鏈接到的較舊的P4_Shelve代碼,它將確切地將待處理的更改列表放在另一個分支上,並將其還原到原始列表上。 – 2011-06-02 14:43:21

5
p4 diff -u your/branch/... | patch -p x -d your/otherbranch 

其中x是一個int,你應該從0開始直到它工作,使用--dry-run在補丁中測試。 (-p在這個例子中剝離,以便在你的/支和你/ otherbranch比賽中,2是文件路徑目錄的數量)

+0

應該是'-du'我認爲(對p4 diff),以獲得統一的差異。 – 2012-06-13 11:02:54

+0

這種方法的問題在於大多數補丁實現都無法理解p4 diff的輸出。你可以編寫代碼來調整輸出到補丁將接受的東西。 – jrodman 2015-02-05 23:17:16

0

敲了一個快速的PowerShell腳本2要做到這一點:

https://gist.github.com/1173044

param([int]$changelistNum, [string]$destBranch) 
$regex = "^\s+//[^/]+(/\S+)\s" 
$sourceFiles = p4 change -o $changelistNum | select-string $regex | %{$_.matches[0]} 

$sourceFiles | %{ 
    $sourcePath = (p4 where $_.groups[0].value.trim()).split(' ')[2]; 
    $destPath = (p4 where ($destBranch + $_.groups[1].value)).split(' ')[2]; 
    p4 edit $destPath; 
    copy $sourcePath $destPath; 
    p4 add $destPath; 
} 

(不知道爲什麼壓痕以上不工作 - 我已經8個空格爲前綴的腳本塊內?)

腳本翻出所有文件進行變更表的描述,併爲每一個嘗試找到對應的在另一個分支中的ng路徑。它蠻力強制每個文件的p4編輯和p4添加,而不是試圖猜測哪個是正確的。它非常詳細!

要複製的變更表443分支myBranch:

Copy-PendingChangelistToBranch.ps1 443 "//myBranch" 
4

我只是碰到了同樣的情況,這是我爲它的解決方案(非常類似於傑夫但在過程中沒有提交),也許它將有助於某人某一天:

  1. 集成(並解決)從ProjectB到ProjectA的相關文件,而編輯但未提交的文件在那裏。
  2. 簽出ProjectB中的相關文件。
  3. 手動將相關文件從ProjectA複製到ProjectB。
  4. 恢復ProjectA中的文件。
+1

嗨,在第1步中,如何將未提交的文件從B集成到A? – 2013-04-11 00:33:34

27

Perforce公司擁有實現這個的一個更簡單的方法:

  1. 擱置您的變更表上branchA(注意變更列表#,我們將在這裏稱之爲NUM僅供參考)

  2. 創建分支A和分支B之間的分支映射(我們稱之爲A_to_B)

  3. 執行以下命令:

    p4 unshelve -s NUM -b A_to_B 
    
+1

應該指出,這在舊版本的perforce中不可用。 – 2014-07-25 22:33:21

+0

無需首先提交,這對我至關重要,節省了大量時間。 – 2015-05-29 13:25:31

+0

你能解釋一下如何做第二步嗎? – 2015-11-09 14:19:27

相關問題