2012-08-09 6 views
4

대규모 Perforce Repo를 선택적으로 가져 오는 올바른 방법은 무엇입니까?git-p4로 부분적 Perforce Repo 복제하기

git-p4 문서에는 -//depot/main/ignore 스위치를 사용하여 디렉토리를 필터링 할 수 있다고 나와 있습니다. 이것은 복제 후 동일한 디렉토리를 제거하기 위해 을 실행하는 것과 같습니다.

또한 Perforce는 "클라이언트"보기라는 또 다른 기능을 제공합니다. 필자는 Perforce를 사용하지 않았기 때문에 사용 모델에 익숙하지 않습니다. 현재 나의 이해는 git p4 clone을 실행하기 전에 p4을 사용하여 적절한 클라이언트보기를 설정하는 것입니다. 누구든지 완전한 세부 사항을 가지고 있습니까?

답변

4

PERFORCE 클라이언트 스펙은 PERFORCE 클라이언트에 표시되고 (동기화 될) PERFORCE 저장소의 어떤 부분을 결정합니다. clientspec은 또한 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/를 제외하고 파일의 모든 것을 포함 할 것이다.

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

당신 경우 : 억지로 저장소를 구성하고, 당신은 잠재적으로 억지로 트리의 부분은 당신이 가져올 직접 git-p4 말할 수 포함하거나 제외하려는 작업에 따라 방법에 따라

제외를 사용하거나 Perforce 저장소 경로를 로컬 경로에 매핑하는 방법을 조정하려면 --use-client-spec 옵션을 추가해야합니다. 보고 p4의 원인이됩니다

P4CONFIG=.p4config 

이렇게 : 환경 변수를

P4CLIENT=.p4config 

을 다음 설정 : 당신은가 포함 된 힘내 트리의 부모 디렉토리에 .p4config 파일을 생성하여 사용되어야하는 억지로 클라이언트 구성 할 수 있습니다 PERFORCE 구성 데이터에 대해 현재 디렉토리에 .p4config 파일을 저장 한 다음 (상위 디렉토리를 점진적으로 검색) 가져옵니다

파일은 억지로 clientspec에 의해 명시 적으로 git p4 clone 명령 줄에서 제공하는 경로가 포함 된 경로의 교차로 될 것입니다.

(당신이 언급 한 바와 같이, git-p4 clone-로 접두사를 지정하여 경로를 제외 할 수 없습니다. 그러나, 그 경로는 초기 수입에만 제외됩니다 것을 의미하기 때문에 나는이 일을하지 않는 것이 좋습니다. 그 경로에있는 파일을 터치하는 경우 퍼 포스에서 미래에 git p4 rebase/ git p4 sync을 수행하면 변경된 파일이 선택됩니다 (명령 행에서 명시 적으로 제외시키지 않은 경우).미래에 git p4 rebase/ git p4 sync를 사용할 때 처음 --use-client-spec를 사용하여 가져 오기, 그러나, 그것은 자동으로 영광 할 수 .git/config에 플래그를 설정합니다.)


한 가지주의해야 할 점은 선택적 복제를 수행하는 경우 별도의 합병증을 추가 할 것입니다 언젠가 PERFORCE 저장소의 다른 부분을 포함하기를 원할 것이다. 이를 수행하려면 my answer to "Extending git-p4 clientspec after initial clone"을 참조하십시오.

+0

"git p4 clone --destination =/path/to/new/git/tree // depot/path1 // depot/path2"명령을 실행하면 path1과 path2에서 코드를 가져와 배치 할 수 있습니까? 하나의 자식 디렉토리에? 여기에 디렉토리 이름은 git/tree /입니까? –

+0

@zhengyu 나는 이것이 효과가 있을지 의심 스럽다. 새로운 파일이'// depot/path1' 또는'// depot/path2'에 속하는지 여부가 모호 할 것이고, 동일한 파일 이름이 존재한다면 어떤 일이 벌어지기 때문에 Perl로 자식 변경을 다시 보낼 방법이 없습니다. 양자 모두? (당신은 물론 어떤 일이 일어나는지 직접 확인해 볼 수 있습니다.) – jamesdlin

+0

'''sh git p4 clone --destination =/path/// depot/path1 // depot/path2 ' ''이 명령을 실행 한 후에 저장소에서 나오는 두 경로 (1과 2)가 git repo에서 어떻게 보이는지 말해 줄 수 있습니까? 자식 또는 두 폴더? –