본문 바로가기
Develop/etc

[GitHub] Repository 합치기 (feat: subtree)

by 연로그 2021. 12. 7.
반응형

목차

1.  Remote Repository 생성

2. Local이랑 Remote Repository 연결

3. Remote 추가

4. Subtree 생성

5. Push 진행


 

 

1. Remote Repository 생성

깃허브에서 새로운 레포지토리를 생성한다.

이제 이 레포지토리에 옮기고 싶은 레포지토리들을 다 넣을 것이다.

 

이 포스팅에서는 여기서 새로 만든 레포지토리부모라 하고, 합쳐지는 레포지토리들은 자식이라고 부르겠다.

 

Profile에서 New 버튼 클릭
Repository 생성

 

2. Local이랑 Remote Repository 연결

$ git init 		#깃 초기화
$ git clone <url>	#부모 레포지토리 클론

 

3. Remote 추가

$ git remote add <리모트명> <레포지토리 url>

 

4. Subtree 생성

$ git subtree add --prefix=<저장할 폴더명> <자식 레포지토리의 remote명> <부모 레포지토리의 브랜치>

 

🔻 [에러] fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree...

더보기

git subtree add .. 명령어를 쓰니 아래와 같은 오류가 발생했다.

fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Working tree has modifications.  Cannot add.

 

4-1) 부모 레포지토리에 Dummy File 생성하고 커밋하기

부모 레포지토리는 방금 새로 만들어서 아무것도 존재하지 않는 상태이다.

나는 마침 README.md 파일도 없었기 때문에 이를 생성하고 푸시까지 마쳤다.

 

4-2) 자식 레포지토리 fetch 하기

remote를 add만 하고 fetch만 받아 내용이 없는 상태였다.

아래 명령어를 통해 자식 레포지토리들의 내용을 fetch 받아오자

$ git fetch <remote명> <브랜치명>

 

5. Push 진행

$ git push

 

🔻 [에러] fatal: The current branch master has no upstream branch.

더보기

해결 방법부터 말하자면 오류 내역에서 알려준 git push --set ... 어쩌구 명령어를 사용하면 된다.

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

 

또는 아래 명령어를 사용해도 된다.

$ git push <부모 레포지토리의 remote명> <브랜치명>

 

오류의 원인은 원격 저장소를 제대로 세팅해주지 않았기 때문이다.

나같은 경우에는 remote add를 통해 origin이라는 이름의 remote를 생성만 하고 이를 local repository와 연결하진 않은 상황이었다.

 

결과 화면

(리드미 파일 잘못 만든건 무시해주세요..............😂)

 

각 폴더에 레포지토리 내역들이 모두 복사된 것을 확인할 수 있다.

커밋 목록을 조회하면 이전 레포지토리에서 커밋했던 내역들이 그대로 복사되어 왔다.

다만 문제점은 파일 하나하나의 히스토리는 열람하지 못한다.

전체 커밋 히스토리를 조회할 때 자식 레포들의 커밋 히스토리를 볼 수 있다.

 

추가로 자식 레포지토리를 삭제해도 부모 레포지토리는 영향을 받지 않는다.

안심하고 자식 레포지토리들을 삭제해도 된다!

 

이 글이 나처럼 깃허브를 아무렇게나! 막! 쓰다가 레포지토리를 관리하려고 시작하는 사람들에게 많은 도움이 되었으면 좋겠다. 😄

 


참고

  1. fatal: ambiguous argument 'HEAD' ... 오류
  2. Git Repository 합치기
반응형