출처
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 이상 가지겠지만 문제가 되지는 않을 것입니다.
'Git' 카테고리의 다른 글
Git에서 특정 commit만 수정하는 방법? (0) | 2016.03.11 |
---|---|
git의 출력에 색을 입히는 방법? (0) | 2016.01.27 |
git log (0) | 2015.08.31 |
Git에서 새롭고 비어 있는 branch를 만드는 방법 (0) | 2015.07.17 |
Git: 파일 checkout 없이 git branch 변경하기 (0) | 2015.03.18 |