기타

[GitHub] Repository 합치기 / 하나의 Repository 에 여러 프로젝트 올리기

walwal_ 2023. 5. 29. 15:58

 

 

 

 

 

중구난방으로 흩어진 내 레포들

남한테 보여주기 부끄러워서 private 로 꽁꽁 숨겨둠.. 

 

 

 

이클립스 쓸 땐 하나의 repo안에 여러 프로젝트를 넣는 방법을 터득해서 나름 관리를 해왔었는데

  

인텔리제이를 쓰니까 감이 잡히질 않았다.

 

하나로 합치고 싶어 검색하고 또 검색한 결과 방법을 찾음!

 

 

++ 해당 방법 사용해본 후기

장점 : repository 수를 줄일 수 있다. (아래 과정 6번까지 마친 후 기존 자식 repo 삭제 가능)

단점 : 자식 repo의 변경사항을 부모 repo에 반영하려면(push 하려면) Bash 를 써야하며 명령어가 길다. 

           유지보수가 복잡할 수 있다.

 

 

 

 


 

 

 

 

 

만약 이미 부모(최상단) repository 가 git 과 연동되어 있다면 1~3 번은 생략하고 4번부터 보기 .

 

 

 

 

1. 부모 폴더 만들기

 

 

 

 

 

 

 

 

2.  깃 허브에서 부모 repository 만들고 주소 복사

 

 

 

 

 

 

 

 

 

 3. 만들었던 폴더로 이동해 repository 클론하기

 

 

새로 만든 부모 폴더에서 마우스 우클릭으로 Git Bash를 열어준다.  

 

 

 

 

 

 

 

.git 폴더 추가를 위해 init 하기 

 

$ git init

 

 

 

 

 

 

깃 허브 repo 클론하기 

 

 

$ git clone <부모 repo 주소>
$ ls

clone ls 를 했을 때 부모 repository 이름의 폴더가 뜨면 클론 완료..!

 

 

 

 

 

 

 

4. 부모 repository 에 자식 repository 원격 주소 추가하기

 

 

 

깃 허브로 이동해 자식 자식 repo 주소를 복사하고,

 

 

 

 

 

 

 

bash 에 아래와 같이 명령어 입력 

 

$ cd <clone 한 부모 repo 이름> # 클론한 폴더로 경로 이동
# ex ) cd new


$ git remote add <자식 repo 이름> <자식 repo 주소>
# ex ) git remote add Spring https://github.com/walwaljj/Spring.git

 

 

 

 

 

 

 

5. 부모 repository 에 자식 repository 를 서브트리로 추가하기 

 

 

 

git subtree add --prefix=<부모 repo에 저장할 자식 repo 이름> < 기존 자식 repo 이름> <자식 브랜치 이름>
# ex ) git subtree add --prefix=hello Spring main

 

 

 


 

 

 

(참고) fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.

이런 오류가 났다면 새로운 부모 repository가 비어있기 때문임. 

README 등 파일을 추가해 오류를 해결할 수 있다. 

echo "# new" >> README.md
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/walwaljj/new.git
git push -u origin main

 

이 후 다시 git subtree add 명령어 실행해 보기

 

 


 

 

6. 부모 repository 에 push 하기

 

 

 


 

 

 

 

push 까지 마치고 나서 부모 repo 로 이동해 보면

새롭게 지정해 주었던 자식 repo hello가 잘 들어와 있음을 볼 수 있다.

 

 

 

 

 

이제부터 4 ~ 6번 과정을 반복하며 부모 repo에 자식 repo 를 넣어주면 끝 !!