2014-09-17 4 views
3

우리는 주 소스 컨트롤로 TFS를 사용하고 있는데, 나는 git-tfsrcheckin 명령과 함께 git를 "frontend"로 사용하고 싶지만 제 저장소를 git으로 가져 오는 데 문제가 있습니다. 하나의 git 저장소에서 두 개의 TFS 프로젝트를 관리하는 방법은 무엇입니까?

나는 나의 TFS

$/ProjectA 
$/ProjectB 

에 두 개의 프로젝트를하고 난 하나 개의 자식 저장소에서 관리하고 싶습니다.

이 두 파일을 하나의 자식 저장소에 복제하면 두 프로젝트의 변경 사항을 커밋하고 하나의 TFS 변경 집합으로 푸시 (push) 할 수 있습니까?

git tfs subtree을 사용해 보았지만 어떻게 든이 작업 과정을 파악할 수 없습니다. 아래 그림과 같이 내 접근 방식은 자식의 repo를 초기화하기 위해서했지만, 난에서 내가 복구 할 수없는 오류를 가지고 : 당신이 TFS에 힘내를 사용하는 경우

> git init 
Initialized empty Git repository in c:/somedir/.git/ 

> git tfs subtree add --prefix=ProjectA http://tfs_server:8080/tfs/ $/ProjectA 
executing subtree add 
-> new owning remote default 
-> new remote default_subtree/ProjectA 
Fetching from TFS remote 'default_subtree/ProjectA'... 
C3779 = 7e532464ef6120ac0b19aa3c7651ceae915dc366 
C3780 = 16f4636fc53d729767f65213ed047c11d1a707ee 
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. 
Use '--' to separate paths from revisions, like this: 
'git <command> [<revision>...] -- [<file>...]' 
error running command: git subtree add --prefix=ProjectA "-m Add 'ProjectA/' from commit '16f4636fc53d729767f65213ed047c11d1a707ee' 

git-tfs-id: [http://tfs_server:8080/tfs/];C3780" refs/remotes/tfs/default_subtree/ProjectA 
Command exited with error code: 1 
+0

대신 SubModule을 사용할 수도 있습니다. 당신은 각 프로젝트에 대해 3 개의 Git Repo로 끝날 것이고 하나는 하위 모듈로 호스팅됩니다. – jessehouwing

+0

@jessehouwing하지만 각 모듈을 수동으로 동기화해야합니다.그리고 나는 하나의 TFS 변경 집합으로 여러 프로젝트에서 TFS 변경 사항을 적용 할 수 없다고 생각합니다. –

답변

1

:

이 단순히 각을 확인하는 가장 쉬운 방법 프로젝트를 만들고 하나의 Git 저장소에 파일을 추가하십시오.

당신이 TFS에 TFVC를 사용하는 경우 :

이 작업을 수행 할 수있는 방법이 없습니다. 개별 repo를 개별적으로 복제하고 독립적으로 작업 할 수 있습니다. 하나의 Git repo에는 두 가지 분기 구조가 없습니다.

당신이 어떤 지점에 TFVC를 사용하는 경우 :

당신은 TFVC에서 두 개의 독립적 인 동기화 된 폴더를 포함하는 단일 힘내의 repo를 위해 GitTF 하위 트리 기능을 사용할 수 있습니다.

영구적으로 힘내 마이 그 레이션하는 것이 좋습니다.

+0

나는 그것을 고려하고 있었지만 전체 역사가 필요하며 하나의 TFS 변경 집합으로 여러 프로젝트에서 커밋하고 싶습니다. –

+0

각 프로젝트에 대해 Git-TF와 함께 기록을 가져 와서 기록과 함께 별도의 저장소를 만들 수 있습니다. 그런 다음 repos를 병합 할 수 있어야합니다. –

+0

하지만 일단 Repos를 병합하면 TFS로 다시 푸시 할 수 없을 것입니다. 그렇지 않습니까? –

1

나는 동일한 문제가 있었지만, this answer의 부분은 올바른 방향으로 나를 가리켰다.

> git init 
Initialized empty Git repository in c:/somedir/.git/ 

> git tfs subtree add --prefix=ProjectA http://tfs_server:8080/tfs/ $/ProjectA 
.... 
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. 
Use '--' to separate paths from revisions, like this: 
.... 

이 오류는 아마도 git diff-index HEAD 명령에서 발생합니다. 내가 그것을 시도 할 때, 나는 정확히 같은 메시지를 얻는다.

여기의 문제는 .. 아직 HEAD가 없습니다. 저장소는 비어 있습니다.입니다. 마스터 브랜치에는 커밋이 없으므로 머리가 없습니다. 더미 커밋을 추가 한 다음 git tfs subtree add ...을 실행하면 정상적으로 작동합니다.

git init 
touch foo 
git add foo 
git commit -m "dummy commit to get a HEAD on master" 
git tfs subtree add --prefix=AAA tfsurl $/path/to/AAA 
git tfs subtree add --prefix=BBB tfsurl $/path/to/different/BBB 

내 지역의 repo는 귀하의 경우처럼 비어있는이 작은 트릭은 자식-TFS 0.25.0.0 (TFS 클라이언트 라이브러리 14.0)

를 사용하여 자식 2.7.1.windows.2에 나를 위해 ambiguous argument 'HEAD' 오류를 해결

EDIT : 오. Windows 명령 프롬프트에서 git tfs 명령 을 모두 호출해야합니다. 최소한 git/gittfs 버전에서는 git-tfs-subtree가 제대로 작동하지 않습니다. git-bash 콘솔에서 호출하면 일부 경로와 refspecs가 망가집니다.

관련 문제