Perforce中變更列表的順序可能在提交的原始號碼。因此對於例如當創建更改列表時將編號爲777,但在提交更改列表時,它將重新編號爲790.Perforce公司:如何找到一個變化列表
我的問題是如何獲取新的CL編號(790),如果我知道舊CL編號777,反之亦然?
Perforce中變更列表的順序可能在提交的原始號碼。因此對於例如當創建更改列表時將編號爲777,但在提交更改列表時,它將重新編號爲790.Perforce公司:如何找到一個變化列表
我的問題是如何獲取新的CL編號(790),如果我知道舊CL編號777,反之亦然?
如果你真的想原來的變更表號,可以從Perforce的檢索而無需在描述中嵌入原始更改列表號碼。您可以使用-ztag命令行選項來獲取它。你只能通過'changes'命令來獲得它(據我所知):
d:\sandbox>p4 submit -c 24510
Submitting change 24510.
Locking 1 files ...
edit //depot/testfile.txt#2
Change 24510 renamed change 24512 and submitted.
d:\sandbox>p4 -ztag changes -m1 //depot/testfile.txt
... change 24512
... time 1294249178
... user test.user
... client client-test.user
... status submitted
... oldChange 24510
... desc <enter description here>
<saved
正如指出的那樣,它可能沒有那麼有用。但是,我確實想要注意到有可能得到它。
我能想到的是將原來的變更表號變更表的描述字段的一部分的唯一途徑。首先,你需要一個腳本來存儲原始的變更表號:
#!/bin/env perl
$id = $ARGV[0];
open (CHANGE_IN, "p4 change -o $id|");
open (CHANGE_OUT, "|p4 change -i $id");
while (<CHANGE_IN>)
{
if (/^Description:/ and not /ORIGID/)
{
s/(^Description:)(.*)$/$1 ORIGID $id. $2/;
}
print CHANGE_OUT $_;
}
close (CHANGE_IN);
close (CHANGE_OUT);
保存爲與可執行位設置Perforce服務器上origid.pl。然後設置與p4 triggers
觸發。
Triggers:
add_origid change-submit //depot/... /usr/bin/origid.pl %change%
除非你做了類似Tim的建議,否則舊的更改列表號會在提交時丟失。
更改列表數字都只是暫時的,直到你真正提交。所以,如果你創建一個新的變化列表(777說了),然後決定要刪除它,你創建的下一個變化列表將是778
版Perforce公司的2012.1引進-O(大寫哦)參數P4描述,它允許您通過查詢其原來的號碼修改列表(之前被P4重新編號提交)。
我覺得這是非常有幫助的,因爲我經常發現自己做筆記關於變更在提交之前,然後忘記要注意它被重上提交。
所以,如果我有一張紙條談論變革12300,我現在可以看到它是指通過鍵入:
p4 describe -s -O 12300
,並具有Perforce的告訴我:
Change 12345 by [email protected] on 2013/10/31 00:00:00
Fix that thing I wrote that note about
Affected files ...
... //Proj/MAIN/foo.c
的ztag方法提到的較早可用於查找舊更改清單編號已提交更改:
> p4 -ztag describe -s 12345 | grep oldChange
... oldChange 12300
添加到埃裏克·米勒的答覆,因爲我不能評論(不夠分):
只發出1號
p4 -ztag describe $ORIG | sed -e 's/^\.\.\. oldChange //;t-ok;d;:-ok'
例如
OLD=$(p4 -ztag describe $ORIG | sed -e 's/^\.\.\. oldChange //;t-ok;d;:-ok')
,或者如果你想看看了許多數字,這將輸出地圖new old
在每一行(可能是「加入」命令非常有用)。如果沒有舊的提交,那麼它會重新發送新的提交。
p4 -ztag describe 782546 782547 ... | sed -e '${x;p};s/^\.\.\. change //;t-keep;b-next;:-keep;x;/./p;g;G;s/\n/ /;x;d;:-next;s/^\.\.\. oldChange //;t-ok;d;:-ok;H;x;s/ .*\n/ /;x;d;'
我試圖避免使用GNU擴展的sed。
你能解釋想要做到這一點的理由嗎? – 2010-12-22 08:54:53