以下腳本是在Linux中使用perl腳本完成的。我相信你可以在Windows中使用Perl以外的腳本語言來適應它。
作爲admin用戶,輸入 p4 triggers
。
將此項添加到腳本的Triggers:
行下。
Trigger_name change-content //... "/<path_to_trigger_script>/<script_name> %changelist% %serverhost% %serverport% %user%"
的Trigger_name
是任意的。 //...
表示所有版本化文件,但您可以根據需要進行修改。任何被%
包圍的東西都是Perforce特有的特殊變量名,這些將成爲腳本的參數。這些應該是你所需要的。請注意,由<>
包圍的任何內容都是可變的,取決於您的環境。
現在,爲腳本本身。這是我寫的。
#!/usr/bin/perl
# ----- CHECK 1 : Make sure files NOT identical
# get variables passed in through triggers call 'p4 triggers'
$ChangeNum = $ARGV[0]; #change number
$Server = $ARGV[1];
$Port = $ARGV[2];
$User = $ARGV[3];
$p4 = "<path_to_p4_exec>/p4 -p $Port ";
# get list of files opened under the submitted changelist
@files = `$p4 opened -a -c $ChangeNum | cut -f1 -d"#"`;
# go through each file and compare to predecessor
# although workspace should be configured to not submit unchanged files
# this is an additional check
foreach $file (@files)
{
chomp($file);
# get sum of depot file, the #head version
$depotSum = `$p4 print -q $file\#head | sum`;
# get sum of the recently submitted file, use @=$ChangeNum to do this
$clientSum = `$p4 print -q $file\@=$ChangeNum | sum`;
chomp $depotSum;
chomp $clientSum;
# if 2 sums are same, issue error
if ($depotSum eq $clientSum)
{
# make sure this file is opened for edit and not for add/delete
if (`$p4 describe $ChangeNum | grep "edit"`)
{
printf "\nFile $file identical to predecessor!";
exit(1);
}
}
}
嗨,我偶然發現你去年的問題。只是一個評論:在我看來,創建一個文件的「空白三角洲」(即文件的不變版本)以使p4相信分支上的合併已經通過集成命令發生(即使你沒有合併任何東西,並保持你的分支版本的方式),以便隨後使用integ命令繼續從分支合併到分支不會檢測到文件上的衝突 - 因爲P4會相信它是合併過去。如果我錯了,請糾正我,但這是我從基礎培訓課程中瞭解到的。 – 2009-10-20 16:21:06