2012-08-09 33 views
4

執行大型Perforce回購的選擇性導入的正確方法是什麼?使用git-p4克隆部分Perforce回購

git-p4文檔提到您可以使用-//depot/main/ignore開關來過濾目錄。這是否等同於運行git filter-branch以克隆後刪除相同的目錄?

此外,它看起來Perforce提供了另一個稱爲「客戶端」視圖的功能。我之前沒有使用過Perforce,所以我對使用模型有點不熟悉。我目前的理解是,在運行git p4 clone之前,我們會以某種方式使用p4來設置正確的客戶端視圖。有沒有人有完整的細節?

回答

4

Perforce clientspec確定Perforce存儲庫的哪些部分對Perforce客戶端可見(並將同步)。 clientspec還提供從Perforce存儲庫路徑到本地路徑的映射。

您可以通過選擇包括Perforce代碼庫的部分修剪一個Perforce客戶端:

//depot/main/path1/... //your-perforce-client/main/path1/... 
//depot/main/path2/... //your-perforce-client/main/path2/... 

將只包括//depot/main/path1/和而不是//depot/main/path3/。正如您所指出的那樣,你也可以明確排除的路徑:

//depot/main/path1/... //your-perforce-client/main/path1/... 
-//depot/main/path1/foo/... //your-perforce-client/main/path1/foo/... 

將包括在其foo子目錄//depot/main/path1/除了文件的一切。

根據您的Perforce代碼庫是如何組織取決於你想要包括(或排除),你可能會直接告訴git-p4要導入的Perforce的樹的部分內容:

git p4 clone --destination=/path/to/new/git/tree //depot/path1 //depot/path2 

如果您想要使用排除項,或者如果要調整Perforce軟件倉庫路徑映射到本地路徑的方式,則需要添加--use-client-spec選項。你可以配置哪些Perforce的客戶應使用Git樹的父目錄創建一個.p4config文件,其中包含可用於:

P4CLIENT=.p4config 

,然後設置環境變量:

P4CONFIG=.p4config 

這樣做將使p4看爲當前目錄中的.p4config文件(然後逐步搜索父目錄)獲取Perforce配置數據。

將要導入的文件將是由Perforce的clientspec和通過顯式地設置在git p4 clone命令行的路徑包括路徑的交叉點。 (如你所提到的,git-p4 clone確實允許排除路徑前綴爲-。但是,我不建議這樣做,因爲這意味着這些路徑只會在初始導入時被排除,如果那個路徑中的文件被觸及在未來的Perforce中,執行git p4 rebase/git p4 sync將會選取這些已更改的文件(除非您記得在命令行上再次明確排除它們)。使用--use-client-spec最初進口,但是,在未來的使用git p4 rebase/git p4 sync時,將設置在.git/config一個標誌,允許其自動履行。)


一個需要注意的是,進行選擇性克隆會,如果增加額外的複雜性有一天你想要包含Perforce存儲庫的其他部分。如果您需要這樣做,請參閱my answer to "Extending git-p4 clientspec after initial clone"

+0

我能問運行此命令時,「混帳P4克隆--destination = /路徑/到/新/的git /樹//倉庫/路徑1 //倉庫/路徑」,將採取從路徑1和路徑2的代碼,並把它們到一個git目錄?這裏的目錄名爲git/tree /? – 2017-11-23 10:01:04

+0

@鄭宇我懷疑它會起作用。就沒有辦法與git的變化發送回Perforce的,因爲這將是不明確的一個新的文件是否屬於'//庫/ path1'或'//庫/ path2',以及如果相同文件名存在中會發生都? (當然,你可以自己只是嘗試一下,看看會發生什麼,有這樣做沒有壞處。) – jamesdlin 2017-11-23 12:23:51

+0

'''SH 混帳P4克隆--destination = /路徑/ //庫/路徑1 //倉庫/路徑 ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''那麼在運行這個命令之後你能告訴我,倉庫中的兩條路徑(1和2)在git repo中看起來如何git中的兩個文件夾還是? – 2017-11-23 12:58:36