무작정 개발.Vlog

[Git] GitHub 여러 Repository 합치기 간단 총 정리

by 무작정 개발
반응형

이번 글에서는 이전에 생성하였던 여러 Repository를 하나의 Repository로 합치는 방법에 대해 쉽게 알아볼 것이다.

 

이 과정을 진행한 후에 기존에 있던 Repository를 삭제해도 이전에 남겼던 git commit 기록(잔디)을 그대로 남길 수 있다.

또한 리포지토리 병합 과정에서 만났던 Error 또한 함께 정리하여 누구든 쉽게 이 방법을 진행할 수 있을 것이다.

 

과거 국비 때 만들어놓은 여러 Repository들
과거 국비 때 만들어놓은 여러 Repository들

위는 이전에 국비 수업을 들으며 생성하였던 리포지토리이다. 그 당시에는 다른 기술을 배울 때마다 새로운 리포지토리를 생성하였지만, 지금 보기엔 쓸데없는 리포지토리 개수만 늘어난 것 같아 합치는 과정을 진행한다.

 

[ 개발 환경 ]
- Windows 10
- git 2.40.1

 

해당 과정을 진행하기 위해서는 본인 PC에 git이 설치되어 있어야 한다.

[git 설치]

 

Git - Downloading Package

Download for Windows Click here to download the latest (2.40.1) 32-bit version of Git for Windows. This is the most recent maintained build. It was released 6 days ago, on 2023-04-25. Other Git for Windows downloads Standalone Installer 32-bit Git for Wind

git-scm.com

 

지금부터 Repository(리포지토리) 를 합치는 방법에 대해 설명할 것이다.


여러 Repository를 저장할 새로운 Repository를 생성하자.

아래는 필자가 만든 새로운 Repository이다.

새로운 리포지토리 생성 방법은 [ github 로그인 ] -> [ Your Repositories ] -> [ New ] 버튼을 클릭해서 생성하자.

 

[ github 로그인 ] -> [ Your Repositories ] -> [ New ]
[ github 로그인 ] -> [ Your Repositories ] -> [ New ]

 

새로운 리포지토리를 생성하면 아래와 같은 화면이 나올 것이다.

아래 화면을 보면 README.md는 필자가 미리 작성한 것이고, 새로운 리포지토리를 생성하였으면 README.md가 작성된 것을 제외하면 나머지는 동일하게 빈 리포지토리가 보일 것이다.

새로운 리포지토리 생성 완료
새로운 리포지토리 생성 완료


새로운 Repository를 Clone 한다. (복제)

필자는 Itwill_PlayGround 라는 이름으로 새로운 리포지토리를 생성하였다.

아래의 표시된 부분이 해당 리포지토리 주소이고, 해당 주소를 복사한다.

새로운 리포지토리 생성 완료

우선 git clone을 진행하기 전에 clone을 진행할 위치는 로컬저장소가 있는 위치여야 한다.

 

필자는 귀찮음으로 바탕화면에 gitstart 라는 폴더를 생성하였다.

바탕화면에 폴더 생성
바탕화면에 폴더 생성

지금부터는 git Bash를 통해 명령어를 입력해서 진행할 것이다.

바탕화면에 만들 폴더 우 클릭 -> git bash here을 클릭해서 git bash를 실행한다.

# 먼저 해당 위치에 새로운 git 저장소를 생성하기 위해
$ git init

# 위에서 만들었던 새로운 리포지토리 주소를 복사해서 넣어 clone한다.
$ git clone https://github.com/chaehyuenwoo/Itwill_PlayGround.git

git init
git init
git clone 하나로 합칠 리포지토리 주소
git clone 하나로 합칠 리포지토리 주소


Clone 한 Repository에 commit 기록 남기기

clone(복제)한 리포지토리는 새롭게 생성 후 어떠한 행동(commit, push 등)을 하지 않았기에 아무런 기록이 없다.

해당 상태에서 여러 리포지토리를 합치는 과정을 진행한다면 아래의 Error를 만날 것이다.

 

Working tree has modifications. Cannot add.

 

위의 문제를 미리 예방하기 위해 복제한 리포지토리에 commit 기록을 남겨준다.

$ git add .
$ git commit -m 'commit test'

commit 할 파일들이 없어도 commit 은 정상적으로 진행되니 위의 명령어 2개를 수행한다.

 

반응형

합칠 Repository들을 새롭게 생성한 Repository로 합치는 작업 시작!

이제 본격적으로 새롭게 생성한 Repository에 기존에 있던 Repository를 합치는 작업을 시작한다.

 

들어가기 전에 앞서

GitHub를 보면 브랜치(Branch) 명이 master인 경우도 있고, main인 경우도 있으므로 브랜치 명을 잘 봐야 한다.

브랜치 명이 다를 경우 아래의 에러가 발생한다.

 

fatal: couldn't find remote ref 브랜치명

 

git bash 터미널에 아래의 명령어를 입력한다.

$ git subtree add --prefix=기존리포지토리명 기존리포지토리주소 기존브랜치명

# EX)
$ git subtree add --prefix=Workspace https://github.com/chaehyuenwoo/Spring5.0.git main
  • 만약 합칠 Repository가 여러 개라면 합칠 Repository마다 위의 명령어를 수행하면 된다.

git subtree add 참고 사진
git subtree add 참고 사진

정상적으로 해당 명령어가 수행되었다면 위의 결과를 볼 수 있다.

이러한 방법으로 합칠 리포지토리만큼 명령어를 반복 수행하면 된다.

 

간혹 메인 브랜치 명이 아래의 화면처럼 main이 아닌 master인 경우가 있다. 그러한 경우에는 main 대신 master을 명령어에 작성하면 된다.

$ git subtree add --prefix=Workspace https://github.com/chaehyuenwoo/Spring5.0.git master

새롭게 만든 Repository에 Push 하기

이제 새롭게 만든 Repository에 Push를 진행할 것이다. 해당 작업만 완료하면 정상적으로 Repository 합치는 작업은 마무리된다.

(4) 번을 진행하면서 여러 리포지토리를 하나의 리포지토리에 모으게 되었다. 이제 원격 저장소인(GitHub)에 저장된 사항들을 Push 해서 업데이트를 진행하면 된다.

 

 

들어가기 전에 앞서 간혹 git push를 진행할 때 하단의 에러를 만날 수 있다.

$ git push origin HEAD:main --force
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

origin' does not appear to be a git repository
origin' does not appear to be a git repository

위의 경우에는 다시 해당 리포지토리를 연결시켜 주면 해결이 가능하다.

아래의 명령어를 수행하면 위의 문제를 해결할 수 있다.

$ git remote add origin [리포지토리 주소]

위의 에러가 발생하지 않으면 넘어가서 아래의 방법을 진행한다.

 

$ git push origin HEAD:main --force

$ git push origin HEAD:main --force
$ git push origin HEAD:main --force

위의 결과가 나온다면 정상적으로 Repository 합치는 과정이 완료된 것이다.

이제 위에서 만들었던 GitHub 새로운 리포지토리를 들어가 보자.

 

리포지토리 합치기 성공
리포지토리 합치기 성공

위의 화면처럼 새로 만든 리포지토리에 기존에 있던 리포지토리들이 추가된 것을 볼 수 있다.

이제 기존에 있던 리포지토리들을 삭제해도 이전에 남겼던 commit 기록(잔디)을 그대로 유지할 수 있다.

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기