2014-04-07 3 views
1

TFS에 액세스 할 수없는 원격 작업자의 경우 git tfs를 사용하여 TFS 저장소를 복제했습니다. 그의 저장소를 되찾았을 때 새로운 지형지 물에서 일하는 것을 보았습니다.git tfs : tft에 다른 체크인이있을 때 ritckin git 커밋을 수행하는 방법은 무엇입니까?

변경 사항을 확인하기 전에 기능 브랜치를 마스터 브랜치에 병합했습니다. 그는 마스터하기 위해 아무 것도하지 않았으므로 빨리 감기가 발생하여 단일 스트림 git 로그가 생성됩니다. 불행히도 초기 복제본 (완전히 관련이없는)은 TFS에서 발생했습니다. 나는 우리가 TFS에 체크 인으로 반영하기 위해 모든 커밋이 필요한 경우 제안 된 REBASE가 도울 수있는 방법을 이해하지 않습니다

Fetching changes from TFS to minimize possibility of late conflict... 
error: New TFS changesets were found. 
You may be able to resolve this problem. 
- Try to rebase HEAD onto latest TFS checkin and repeat rcheckin or alternatively checkin s 

: 우리가 rcheckin 할 때 , 우리는 다음과 같은 오류 메시지가 나타납니다.

이 상황에서 모든 git 커밋을 개별 TFS 체크 인으로 가져 오는 방법이 있습니까?

+0

사이드 노트에서 왜 git-tfs 플러그인을 사용하고 있습니까? TFS의 최신 버전은 git support와 함께 제공됩니다. 어떤 버전의 TFS를 사용하고 있습니까? –

+0

@Cupcake git-tfs를 사용하면 순수한 TFSVC보다 진정한 이득을 얻을 수 있습니다! 그리고 모든 팀 (언젠가) 또는 회사 (종종)의 선택이 아니더라도 사용할 수 있습니다. – Philippe

+0

@Philippe git-tfs는 [prototype version 0.19.2'] (https://github.com/git-tfs/git-tfs/tree/v0.19.2)에있는 공식 플러그인입니다. TFS의 최신 버전을 사용하지는 않았지만 git과 함께 사용할 수 있다고 들었습니다. TFS가 git out-of-the-box 사용을 지원한다면 git-tfs를 사용하지 않을 것입니다. 개인적으로 git-tfs를 사용하여 특정 파일 병합, 추가 및/또는 삭제를 기록하지 않는 등 예상대로 작동하지 않는 경우가 있습니다. [*** 알려진 버그가 있습니다 ***] (https://github.com/git-tfs/git-tfs/issues?sort=comments&state=open). –

답변

2

@Cupcake의 대답은 잘하지만 난 몇 가지를 추가 할 ...

당신은 그냥 확인하고이 단계에서 병합 충돌을 해결할 때 TFS 워크 플로우를보다 가까이하고 싶다면

, 당신은 할 수 사용 :

git tfs rcheckin --quick --autorebase 

동등에 : 일반적으로 pull --rebase 사이에 반드시 있기를 할 수있는 더 좋은 것은 아니다

git tfs pull --rebase 
git tfs rcheckin 

(여기서 Y 우리의 변경 사항과 tfs에서 오는 변경 사항이 '병합'됨) 및 rcheckin (변경 사항을 tfs에 적용한 경우) 솔루션을 빌드하고 유닛 테스트를 실행해야합니다.

그러나 나는 때로는 훨씬 쉽고 팀 (모든 오래된 tfs 사용자) 만 그렇게하고 싶어한다는 것을 알고있었습니다!

pull --rebase 단계에서 변경 사항이 팀원과 '병합'되어 있으므로 파일 수준에서 병합이 수행되고 체크인 할 때 tfs와 마찬가지로 병합되어야합니다. 갈등을 해결하십시오.

rcheckin --quick --autorebase의 경우 충돌이 발생하면 명령이 종료됩니다. 당신은 그것들을 풀고 명령을 다시 시작해야 할 것입니다.

1

단순히 플러그인의 내용을 수행하고 TFS의 새로운 변경 사항 위에 원격 직원의 작업이 포함 된 master의 git repo 버전을 리베이스 할 수 있습니다. rebase는 원래 커밋의 순서를 유지합니다 ... 충돌이있는 경우 충돌이 발생한 커밋에서 해결해야합니다.

git tfs pull --rebase 
git tfs rcheckin 

또한 단지 git tfs fetch를 사용하고이 작업을 수행하는 자식의 기본 REBASE 도구를 사용하지만, 그것은 자식-TFS 명령은 당신을 위해 모두의주의를 기울여야한다 ... 더 많은 단계를 포함 할 것이다 할 수 있습니다.

또한, 어떤 이유에서든 rebase가 원하지 않는 결과를 얻는 경우, 하드 리셋 할 수있는 master 끝에 임시 분기를 넣어야합니다.

git branch temp master 
git tfs pull --rebase 

# In case you don't like the rebase results: 
git reset --hard temp 

# Or if you like the results, check-in 
git tfs rcheckin 

Documentation for git-tfs pull.

+0

위대한, 그것은 쉽습니다. 내 잘못은'git tfs pull'에서 rebase를 사용하지 말고 어떻게 든 내 git repo를 리베이스해야한다는 생각이었습니다. – paulroho