반응형

출처 

http://stackoverflow.com/questions/13040958/merge-two-git-repositories-without-breaking-file-history

파일 히스토리를 없애지 않고 두 개의 Git 저장소를 합치는 방법?

저는 2개의 Git 저장소를 새로운 3번째 저장소로 합치고 싶습니다. subtree 합치기를 사용하는 방법에 대한 많은 글을 찾았고(예를 들어, 어떻게 2개의 git 저장소를 합칩니까? 에 대한 Jakub Narebski의 답변) 이전 보관소로부터 모든 파일을 서브트리로 합치는 commit을 할 때를 제외하고 새로 추가된 파일들은 기록됩니다. 다음 명령어들은 대부분 작동합니다. git log 할 때 이전 저장소로부터 commit 히스토리를 볼 수 있지만 git log <file> 하면 subtree 합치기를 한 그 파일에 대한 하나의 commit만 보여줍니다. 위의 답변에 달란 댓글로 판단하였을 때 이러한 문제를 겪은게 저 혼자만은 아닌듯 보이며 이에 대해 게시된 해결책을 발견하지 못하였습니다.

저장소들을 합치고 각 파일의 히스토리를 남기는 방법이 있을까요?

----

4 개의 답변 중 1개의 답변만 추려냄.

여기에 히스토리를 다시 쓰지 않고 모든 commit  ID들이 유효하게 남아있게 하는 방법이 있습니다. 마지막 결과는 서브디렉터리에 두 번째 저장소 파일들이 있게 됩니다.

1. remote로 두 번째 저장소를 추가합니다.

cd firstgitrepo/
git remote add secondrepo username@servername:andsoon

2. 두 번째 저장소의 모든 커밋을 확실하게 다운 받습니다.

git fetch secondrepo

3. 두 번째 저장소로부터 지역 브랜치를 생성합니다.

git branch branchfromsecondrepo secondrepo/master

4. 서브디렉터리로 두 번째 저장소의 모든 파일을 이동시킵니다.

git checkout branchfromsecondrepo
mkdir subdir/
git ls-tree -z --name-only HEAD | xargs -0 -I {} git mv {} subdir/
git commit -m "Moved files to subdir/"

5. 첫 번째 master(마스터) 브랜치로 두 번째 브랜치를 합칩니다.

git checkout master
git merge branchfromsecondrepo

당신의 저장소는 하나의 root commit 이상 가지겠지만 문제가 되지는 않을 것입니다. 


반응형

+ Recent posts