2017-03-17 7 views
0

프로젝트를 TFS에서 git로 변환하는 중입니다. 모든 기록을 유지하려고합니다.다른 저장소 위에 자식 저장소를 추가하는 방법

문제는 TFS 프로젝트가 1 년 전에 TFS에서 옮겨졌습니다. git-tfs 사용 두 위치를 모두 git로 변환 할 수 있지만 이제는 두 개의 git 저장소 (A와 B)가 있습니다.

저는 A와 B를 서로 다른 저장소와 동일한 저장소로 가져올 수있었습니다. B에서의 첫 번째 커밋의 부모를 A에서의 마지막 커밋으로 변경할 수 있습니까?

Branch A: a -> b -> c 
Branch B: d -> e -> f 

내가

a -> b -> c -> d' -> e' -> f' 

솔루션 갖고 싶어 :

git filter-branch --parent-filter 'sed "s/^\$/-p <last-commit-in-A>/"' HEAD_OF_B 

답변

1

물론을 정확히 않는 것을하는 graft을 설정합니다. 결과에 만족하면 filter-branch을 사용하여 영구히 만들 수 있습니다. 또는 바로 filter-branch--parent-filter과 함께 사용할 수 있습니다.

0

나는 두 가지 솔루션을 생각할 수 있습니다 :

  1. 부모 저장소를 만들고 서브 모듈로 저장소 A와 B를 추가합니다. git submodule에 대한 자세한 내용은이 설명서를 참조하십시오.

  2. 원격 리포지토리로서 저장소 B를 추가 A :

    이제
    $ git remote add repoB <directory where repo B is located> 
    

    당신은 예를 들어, 당겨 병합 및 환매 특약 B에서 리베이스, 가져올 수 :

    $ git checkout master 
    $ git pull repoB master 
    

    를 (그 경우, 다른 방법으로이 작업을 수행 할 수 있습니다. Repo를 Repo에 원격으로 추가 B. 동일한 개념이 적용됩니다.)

+0

git 리포지토리가 히스토리를 공유하지 않기 때문에 작동하지 않습니다. A의 마지막 커밋과 B의 첫 커밋은 똑같은 내용을 가지고 있습니다. 그러나 SHA1 해시는 동일하지 않습니다. 두 repos는 TFS에서 변환되었습니다. – sighol

+0

@sighol "작동하지 않음"이란 무엇을 의미합니까? 나는'git merge'를 예로 사용했습니다. 아마도'git rebase'가 여러분의 상황에 더 적절할 것입니다. –

+0

2 개의 브랜치가 관련없는 커밋을 가지고 있기 때문에'git merge' 또는'git rebase'가 작동하지 않을 것이라고 생각합니다. 브랜치 A : a -> b -> c 브랜치 B : d -> e -> f 두 개의 브런치는 완전히 관련이 없습니다. 이 기록을 원합니다. a -> b -> c -> d '-> e'-> f ' rebase는 병합 커밋을 제거하므로 rebase를 사용할 수 없습니다. – sighol