본문 바로가기
👋국비 후기 모음👋 (이력도 확인 가능!)
개발/깃 & 깃허브

Git Repository 하나로 합치기 - git subtree // 잔디 유지 // commit log 유지

by 킴뎁 2021. 9. 4.
728x90
반응형

1일 1커밋을 하고 있는 중이다. 하다보니 너무나 많은 일회성 repository들이 생겨났다. 그걸 하나로 통합하기 위해 현재 깃허브를 정리하고 있다. 처음에 subtree를 이용할 때 잘 안되고 에러도 나고 그래서 제대로 한 번 정리해보려고 한다. 앞으로 자주 쓸 것 같기에.. ㅋㅋ

 

현재 하려는 작업을 간단히 소개해보겠다. 각 깃허브에 Repository A, Repository B, Repository C 이렇게 중구난방으로 있는 Repository를 Repository Z에 하나로 묶는 작업을 할 예정이다. 이런걸 할 때 사용하는 명령어가 git subtree다.

21년 3월 6일 ServletPractice라는 Repository가 있고 이 레포를 studyspace라는 레포에 넣으려고 한다. 

상단에 Repositories가 13개인 것을 확인할 수 있다.

git subtree add --prefix=[디렉토리명] [복사할 레포 주소] [복사할 레포의 브랜치]

위의 []안에 저런식으로 써놓으면 헷갈린다. 다른 블로그 찾아보면 로컬디렉토리니 원격 저장소니 부모 자식 뭐시기 등등 초짜인 내가 보기엔 너무 헷갈리게 쓰여있었다. 그래서 정확한 예시를 통해 설명하고자 한다.

이미 조금 정리를 해두었다. 

나는 위의 ServletPractice 레포를 studyspace레포에 넣을 생각이다. 순서대로 따라해보자.

studyspace의 기본 브랜치명이 main임을 기억해두자.

우선 studyspace 깃 터미널을 열어준다.

바로 위의 설명한대로 명령어를 쳐보자. 치기 전에 ServletPractice 깃허브 주소를 복사해온다.

명령어 입력 ㄱㄱ // ServletPractice의 기본 브랜치명이 master임을 기억해두자.

git subtree add --prefix=servlet-practice https://github.com/seongsoo96/ServletPractice.git master

위의 명령어를 설명해보겠다. 'git subtree add --prefix='까지는 똑같이 쓰고 다음에 나온 servlet-practice <- 얘는 폴더명이다. 위에 studyspace repository에 보면 정리되어있는 폴더들이 보일 것이다. 그 폴더명을 지정해준 것이다. https://github.com/seongsoo96/ServletPractice.git <- 얘는 설명 안해도 알 거라 생각한다. 복사한 레포 주소이다. 

그 다음 master가 중요한다. 처음에 난 헷갈려서 main을 쳤었다. studyspace에는 main이 기본 브랜치길래 main으로 쳤었는데 그게 아니라 ServletPractice에서 복사할 브랜치명인 master를 쳐야한다. 안그럼 에러 날 것이다.

명령어를 잘 쳐주면 저런식으로 fetch가 되었다고 나올거고 이제 push 해주면 끝.

다시 한번 말하지만 내 studyspace의 기본 브랜치명은 main이기에 git push origin main을 쳐준 것이다.!!

이렇게 push 까지 완료 되면 깃허브를 확인하면 된다.

 

혹시 아래와 같은 에러가 났을 땐 아마 처음 레포지토리를 생성해서 바로 subtree를 쳤을 것이다. 이럴 땐 아무 파일이나 만들어서(본인은 touch txt로 빈 텍스트파일 생성) commit -> push를 해준 후 다시 하면 잘 될 것이다. 레포지토리가 비어있으면 아래와 같은 에러가 뜨는 걸로 알고 있다.

 

studyspace에 잘 들어온 것을 확인할 수 있고 이제 기존의 ServletPractice를 지워주자..!

우선적으로 기존의 레포를 지우기 전에 커밋로그가 잘 남았는지 확인해야한다. 21년 3월 6일자로 spacestudy커밋이 생긴 것을 볼 수 있다. 이렇게 뜨면 제대로 커밋로그가 남았다는 뜻이고 ServletPractice를 지워도 커밋 잔디는 그대로 남을 거라는 얘기!!

과감히 지워보도록 하겠다.

ㅃ ㅃ

상단에 보면 Repositories가 12개인 것을 확인할 수 있다. 깔끔히 삭제되었지만 21년 3월 6일자 커밋로그 및 잔디는 studyspace로 대체되면서 그대로 남아있는 것을 확인할 수 있다..!!!!

반응형

 

** 한가지 주의할 점이 있는데 꼭 지우기 전에 해당 커밋 로그를 확인해서 studyspace가 잘 생성되었는지 봐야한다. 만약 여태까지 잔디를 잘 깔고 있다가 중간에 username을 바꾸는 경우 과거의 했던 repository중에 username 변경이 반영 안되있는 것을 확인할 수 있는데 그와 같은 경우는 잔디도 사라진다.

위와 같이 username과 커밋을 username이 다를 경우 커밋로그가 안남기 때문에 기존 레포를 삭제하면 잔디도 같이 삭제된다 유의할 것..!!

 

마저 정리해야겠다.. !!

반응형
👋국비 후기 모음👋 (이력도 확인 가능!)

댓글