2013-04-23 83 views
7

是否有Perforce的一個很好的方式提交他們(的git stashgit checkout otherbranchgit stash pop當量)之前,移動到不同的流未提交的變化?Perforce公司:移動未提交更改爲不同的流

我目前已經在本地(非獨佔)簽出和編輯文件。我已經嘗試擱置它們,然後試圖將它們擱置到目標流中,但是我得到「文件不在客戶端視圖中」。當我查看更改列表時(擱置與否),這些文件都具有包含原始流的路徑。

我的目標流是我剛剛創建的一個,源於原始流。我正在使用P4V。我安裝的Perforce Visual Components版本是123.57.9578,當我從命令行運行p4時,它會顯示「Server 2012.2/551823」。如有必要,我可以添加更多信息。

回答

1

我認爲擱置/擱置技術需要2013.1服務器,而不是2012.2服務器。您應該使用Perforce技術支持來確認這一點。

+0

感謝您的回答。不幸的是,我們必須等到下週才能確認這一點,因爲我們的「Perforce king」目前正在猜測 - Perforce會議:P – entheh 2013-04-25 14:47:03

+0

擱架適用於老版本的Perforce。但是,您只能取消擱置到包含分支根目錄的相同路徑,因此您不能在另一個分支中取消擱置。 – 2013-05-03 15:17:31

5

使用-S選項,可以使用p4 unshelve命令將更改列表中擱置的文件重新映射到另一個流。例如:

p4 unshelve -s <changlist#-with-shelved-files> -S //depot/streamname 

不確定這是否僅適用於特定版本或更高版本。但是,我們無法通過P4V找到一種方法。

1

如果您出於某種原因比使用命令行更適合使用P4V,可以使用GUI完成解決方案az2tonez,至少在P4V 2014.2中。

  1. 擱置您的變更集,並確保在工作區中沒有簽出其他文件。
  2. 在'流'選項卡中,將工作區圖標從當前流拖到要將更改更改爲並獲取最新更改的流。
  3. 取消「擱置」選項卡中的文件。在選項下選擇'映射未保存的文件',然後選擇要從移動變更集的流,然後按'Unshelve'。
  4. 使用源解析文件。
  5. 提交您的更改,並voilá!您的更改現在應該在其他流中。
3

這裏的其他答案是正確的,但他們並沒有警告你,你不能擱置任何流,並且不支持任何不相關的流。特別是,原始海報詢問錯誤消息「文件不在客戶端視圖中」,這是P4V在未選擇適當映射時顯示的錯誤消息。

以下是找到正確映射的技巧:您的非擱置流必須與擱置的流具有直接的父/子關係,並且您必須選擇描述該關係的流規範,即「使用流映射未保存的文件.. 。「對話框的一部分。這意味着可能需要多次從原始擱置流到目標流。

下面是一個具體的例子:假設您已將文件擱置爲Dev-1,並且您想將其移至Dev-2。這兩個Dev流都是Main的直接子項。您不能將Dev-1的文件直接放入Dev-2,首先您必須暫時擱置並暫時重新放入Main,因爲Dev流規範均以Main而非彼此描述了它們之間的關係。

所以,你取消擱置Dev-1的文件到Main與‘地圖使用流Dev-1 unshelved文件’,因爲規範描述所走過的關係。然後,將文件擱置到Main,然後將您的工作區切換爲Dev-2。現在,您可以取消擱置擱置文件的Main版本,並使用「使用流Dev-2映射未保存的文件」,因爲該規範描述了從MainDev-2之間的直接關係。

使用多跳,您可以訪問網絡中的任何其他連接流。這並不像git stashgit stash pop那麼容易,但請記住,Git假設文件名在git分支之間不會改變,而Perforce允許每一跳都隨意更改文件和文件夾的映射。

+1

感謝您的回答。我不能評論,因爲我已經移動並不再使用Perforce,但只是想說Git根據我的經驗在這種情況下處理重命名和移動的文件。 Perforce當然有自己的優勢(特別是局部視角),但這似乎並不是其中的一個! – entheh 2016-01-29 20:34:36