깃허브 레포지토리 합치기

최윤성·2023년 1월 21일
0

Git의 subtree 명령어를 이용해 깃허브 레포지토리를 합치는 과정을 정리해보려 한다.
깃허브의 레포지토리가 너무 많아져 복잡해졌거나, 관련있는 내용의 레포지토리를 합치고 싶을 때 이용하면 유용할 것이라 생각한다.


1. 합칠 저장소 생성

  1. 여러 저장소의 내용을 합칠 레포지토리를 생성한다.

  2. 원하는 위치에 생성한 저장소를 clone해 원격 저장소와 연결된 로컬 저장소도 만들어준다.

> git clone <원격저장소 주소>
> git clone https://github.com/example-UserName/New-Repo.git
  1. 생성된 로컬 저장소로 이동한다.
> cd <저장소 이름>
> cd New-Repo

2. 합쳐질 저장소들 연결

  1. 로컬 저장소에 합쳐질 원격 저장소 연결한다.
> git remote add <remote 이름> <원격 저장소의 주소>
> git remote add Old-Repo https://github.com/example-UserName/Old-Repo.git
  1. 저장소가 제대로 연결이 되었는지 확인한다. (생략가능)
> git remote
origin
Old-Repo

3. 연결한 저장소들의 내용 불러오기

  1. 로컬 저장소에 연결한 합쳐질 저장소들의 내용을 불러온다.
> 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 파일을 간단하게 작성해 커밋을 해주었다.


4. 원격 저장소에 푸시

  1. 원격 저장소로 불러온 내용을 푸시한다.
> git push
  1. 성공적으로 푸시가 되었다면, 합쳐진 레포지토리들은 삭제해준다.

레포지토리를 반드시 삭제할 필요는 없지만, 잔디(contributions)를 보게되면 같은 내용이 두 번씩 들어가있기 때문에 삭제를 통해 깔끔하게 유지해주는 편이다.
같은 깃허브 계정이 아닌 경우처럼 굳이 삭제할 필요가 없다면 삭제하지 않고 유지해도 무방하다. 또한, 합쳐진 현재 저장소에서 서브트리의 내용을 수정한 후 변경사항을 커밋하고 푸시도 가능하다.

> git subtree push --prefix <폴더 이름> <remote 이름> <브랜치 이름>
> git subtree push --prefix Old Old-Repo master

0개의 댓글