2010-04-27 5 views
2

개발 과정에서 perforce를 사용하여 코드 공유를 처리합니다. 회귀 테스트 준비가 될 때까지 변경 사항을 체크인 할 수 없기 때문에 "개정 관리"를 말하지 않을 것입니다. 리비전 제어하에 개인적인 변경 세트를 얻으려면 필자 자신의 자식을 빌드하고 perforce 저장소의 클라이언트 뷰를 git repo로 초기화하는 작업을 진행했습니다.Git repo 계획 질문

그러나 이렇게하는 데는 몇 가지 어려움이 있습니다.

  1. 클라이언트보기 ~의 하위 폴더 (~/p4)에 살고, 나는 자신의 별도의 역사뿐만 아니라 개정 통제하에 ~을 넣고 싶다. 하위 모듈을 사용하지 않고 ~의 기록을 ~/p4과 분리하여 보관하는 방법을 알아낼 수 없습니다. 하위 모듈의 문제점은 서브 모듈이 될 저장소를 만든 다음에 git submodule add <repo> <path>이되어야하는 것처럼 보입니다. 그러나 ~을 제외하고는 서브 모듈의 저장소를 만드는 데는 아무 것도 없습니다. git p4 clone을 사용하여 저장소의 초기 클라이언트보기를 만드는 안전한 장소가없는 것 같습니다.

    (지원되지 않습니다 내가 INITING 또는 자식의 repo의 서브 디렉토리로의 repo를 복제 가정의 떨어져 일하고 있어요. 적어도, 나는 중첩 된 자식의 repos에 권위 아무것도 찾을 수 있습니다.)

    편집 :~/p4에 중첩 된 저장소를 초기화 할 수있을 정도로 ~에 뿌리를 둔 저장소의 ~/p4을 무시한 것입니까? 내 __git_ps1 함수는 여전히 git 저장소의 무시 된 하위 디렉토리를 방문 할 때 git 저장소에 있다고 생각하므로 생각하지 않을 것입니다.

  2. ~/p4의 지점이되도록 git p4 sync에서 만든 "원격"저장소가 필요합니다. ~/p4에 모든 코드를 보관하여 백업되지 않도록해야합니다. 로컬 브랜치 인 "원격"브랜치에서 가져올 수 있습니까?

  3. 이 것은 편의를위한 것일 뿐이므로이를 묻는 것으로 뭔가를 배울 수 있다고 생각했습니다. 프로젝트의 99 %에 대해서, 필자는 p4 head 리비전을 inital commit 객체로 시작하려고합니다. 나머지 1 %는 전체 p4 history를 빨아 들여서 git에서 찾아 볼 수 있습니다.

    revision 1 of //depot/prod/Foo/Bar/* 
    revision X of other files in //depot/prod/*, where X is the head revision 
    

    을하고 remotes/p4/master 분기 Y는 Y가에서 파일을 가지고 변경 목록의 수, 커밋 포함 : 나는 그것을 initalizing 끝났어요 후 IOW는, 초기는 리모컨의 커밋/P4/마스터 지점이 포함됩니다 //depot/prod/Foo/Bar/*, p4 변경 목록 중 하나에 해당하는 히스토리에서 각 커밋 및 p4 머리와 비슷한 HEAD.

편집 : meagar의 답변이 저에게 효과적이지 않았습니다.

나는 initalized ~을하고 거기에 몇 가지 커밋을 확인했습니다. 나는 ~/P4를 무시하고 ~/P4는 객체를 저지하지 않을 =.

[[email protected]] (master) $ git show HEAD:p4 
fatal: Path 'p4' exists on disk, but not in 'HEAD'. 

내가 다음 ~/P4/자극에 가서, 내가 체크 아웃 할 지점을.

[~/p4/[email protected]] (master) $ git log 
(shows the log for the repo rooted at ~) 
[~/p4/[email protected]] (master) $ git init 
Initialized empty Git repository in ~/p4/prod/.git/ 
[~/p4/[email protected]] (master) $ git log 
fatal: bad default revision 'HEAD' 

편집 편집 : :하지만이 REPO가 고장 아차, 나는 ~/p4/prod에 뭔가를 저지하는 것을 잊었다. 나는 자식/동기화를 시도하고있다 // depot/prod to it ...

+1

하나의 git 저장소를 다른 저장소에 저장할 수 있습니다. 하위 모듈로 표시하지 않으면 git은 특별한 기능을 수행하지 않습니다. 하위 디렉토리 일뿐입니다. 그래도 .gitignore에 추가하는 것이 좋습니다. – Novelocrat

+0

당신의'__git_ps1'은 .git 디렉토리를 찾기 위해 나무를 걷고 있습니다. 현재 하위 트리가 무시되는지 여부를 git에 묻지 않습니다. – Novelocrat

+1

포인트 2 : 회귀 테스트를 통과 할 때까지는 계속 수행 할 수 없으며 백업에서 제외 된 지정된 디렉토리에 작업 복사본을 보관해야합니다. 이것은 실제로 진행중인 작업이 쓸데없는 것으로 간주된다는 것을 의미합니까? – Novelocrat

답변

2

# 1에 대한 답변으로 전체 홈 디렉토리를 git 저장소에두고 싶지만 ~/p4가 별도의 저장소에 있으면 홈 디렉토리의 .git_ignore에 "p4"를 추가하고 다른 디렉토리 P4의 REPO는 :

$ cd ~ 
$ git init 
$ echo "p4" > .git_ignore 
$ git add .git_ignore 
# add all files/directories except p4 
$ git commit 
$ cd p4 
$ git init 
$ git add . 
$ git commit 

꽤 # 2를 수행하지 않지만, 그래, 당신은 당신의 파일 시스템에 로컬에 "원격"의 repo에서 당길 수 있습니다. 현지 지부에서 "당기기"까지, 그것은 당기지 않습니다; 끌어 오기에는 가져 오기와 병합이 포함됩니다. 가져 오기를 생략하면 그냥 병합이므로 로컬 지점에서 병합하는 것을 실제로 말합니다.