Git의 subtree 명령어를 이용해 깃허브 레포지토리를 합치는 과정을 정리해보려 한다.
깃허브의 레포지토리가 너무 많아져 복잡해졌거나, 관련있는 내용의 레포지토리를 합치고 싶을 때 이용하면 유용할 것이라 생각한다.
여러 저장소의 내용을 합칠 레포지토리를 생성한다.
원하는 위치에 생성한 저장소를 clone해 원격 저장소와 연결된 로컬 저장소도 만들어준다.
> git clone <원격저장소 주소>
> git clone https://github.com/example-UserName/New-Repo.git
> cd <저장소 이름>
> cd New-Repo
> git remote add <remote 이름> <원격 저장소의 주소>
> git remote add Old-Repo https://github.com/example-UserName/Old-Repo.git
> git remote
origin
Old-Repo
> git subtree add --prefix <저장될 폴더 이름> <remote 이름> <브랜치 이름>
> git subtree add --prefix Old Old-Repo master
git fetch Old-Repo master
...
만약 처음부터 따라왔다면 여기서 저장소 내용이 안불러와질 것이다.
> git subtree add --prefix Old Old-Repo master
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
...
저장소에 아마 내용이 없기때문에 아무 파일이나 만들고 커밋을 하나 해주면 해결된다. 나는 README 파일을 간단하게 작성해 커밋을 해주었다.
> git push
레포지토리를 반드시 삭제할 필요는 없지만, 잔디(contributions)를 보게되면 같은 내용이 두 번씩 들어가있기 때문에 삭제를 통해 깔끔하게 유지해주는 편이다.
같은 깃허브 계정이 아닌 경우처럼 굳이 삭제할 필요가 없다면 삭제하지 않고 유지해도 무방하다. 또한, 합쳐진 현재 저장소에서 서브트리의 내용을 수정한 후 변경사항을 커밋하고 푸시도 가능하다.
> git subtree push --prefix <폴더 이름> <remote 이름> <브랜치 이름>
> git subtree push --prefix Old Old-Repo master