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"。
我能問運行此命令時,「混帳P4克隆--destination = /路徑/到/新/的git /樹//倉庫/路徑1 //倉庫/路徑」,將採取從路徑1和路徑2的代碼,並把它們到一個git目錄?這裏的目錄名爲git/tree /? – 2017-11-23 10:01:04
@鄭宇我懷疑它會起作用。就沒有辦法與git的變化發送回Perforce的,因爲這將是不明確的一個新的文件是否屬於'//庫/ path1'或'//庫/ path2',以及如果相同文件名存在中會發生都? (當然,你可以自己只是嘗試一下,看看會發生什麼,有這樣做沒有壞處。) – jamesdlin 2017-11-23 12:23:51
'''SH 混帳P4克隆--destination = /路徑/ //庫/路徑1 //倉庫/路徑 ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''那麼在運行這個命令之後你能告訴我,倉庫中的兩條路徑(1和2)在git repo中看起來如何git中的兩個文件夾還是? – 2017-11-23 12:58:36