我讀了documentation,並說這樣的: -使用perforce sync -p選項的優點是什麼?
填充一個客戶工作區,但不更新的有列表。任何已經同步或打開的文件 都會被警告消息繞過。 此選項通常用於在過程(例如 某些構建或出版物的環境)中使用的工作區,其中沒有必要 跟蹤工作區的狀態時,它首先已經同步後。
但我不太明白這樣做的優點(或缺點)。
我讀了documentation,並說這樣的: -使用perforce sync -p選項的優點是什麼?
填充一個客戶工作區,但不更新的有列表。任何已經同步或打開的文件 都會被警告消息繞過。 此選項通常用於在過程(例如 某些構建或出版物的環境)中使用的工作區,其中沒有必要 跟蹤工作區的狀態時,它首先已經同步後。
但我不太明白這樣做的優點(或缺點)。
我想這是類似於svn export
,你想獲得的所有文件,但你不打算從該工作區提交任何東西。
例如,對於持續集成工具,只是希望建立並執行一些測試文件,然後將刪除所有內容。我不確定,但它可能阻止從這個工作區提交(因爲你沒有「有名單」),所以它可能是一個保障。
下面是一個例子,其中,這是有用的:你有一個構建農場(例如10個生成服務器);這10臺服務器是克隆:每臺服務器都安裝了相同的軟件,每臺服務器可以建立您的項目,並且每臺服務器都建立在同一本地路徑上(例如C:\buildServer\projectFoo\
)。爲了節省維護費用,您創建了一個單個的 P4客戶端(我們稱之爲clientFoo
),而不是10個客戶端(每個構建服務器一個)。您可以在所有10個構建服務器上使用它,因爲clientFoo
未指定其Host
(在客戶端設置中)。顯然,clientFoo
將您的軟件倉庫路徑映射到C:\buildServer\projectFoo\
,該軟件在您的所有10個構建框中都能很好地工作。
現在想象你的構建服務器使用p4 sync
而非p4 sync -p
。首先,構建服務器A將調用p4 sync
並在本地文件系統上獲取Foo項目。好。但是,由於它沒有使用-p
,因此它還更新了Perforce服務器,該服務器現在認爲Foo項目已同步到clientFoo
的最新版本。如果構建服務器A再次同步Foo,它將獲得增量同步。還好。但是,如果客戶端B同步美孚未來,它將也得到增量同步,即它只會同步幾個文件,甚至沒有(如果沒有文件,因爲一個同步美孚修改)。這是錯誤的,因爲B目前還沒有Foo!增量同步是無意義的。
該解決方案將用於構建服務器B以調用p4 sync -f
:即忽略「有」表(即忽略Perforce服務器認爲clientFoo
已有的表)並強制完全同步。這當然是可行的:所有10個編譯框可以調用p4 sync -f
來解決不必要的增量同步問題。但是每個p4 sync -f
仍然會更新Perforce服務器的「有」表,這是浪費的,因爲我們從不使用它(我們總是使用-f
忽略它)。因此,爲了避免維護「有」表,我們可以從所有構建服務器調用p4 sync -p
,並且不更新「有」表。
不錯!感謝您的解釋。 – lionel319
它以更復雜的客戶端編程爲代價降低了服務器的負載。如果你不是**某人**,你需要它,你不需要它。 –