Git 저장소를 병합하는 방법(How to merge repositories in Git)

GIT 저장소를 다른 저장소에 병합하는 방법

Git?

Git은 컴퓨터 파일의 변경 내용을 추적하고 여러 사람들일 공유하는 파일에 대해 협업할 수 있도록 파일의 변경을 제어하는 버전 제어 시스템이다. 기존에 CVS, SVN 등 다양한 버전 제어 시스템들이 나왔지만, 최근에는 Git으로 통일되는 것 같다. Git은 분산 리비전(개정) 관리 시스템으로서 속도, 데이터 무결성 및 분산 된 비선형 작업 진행을 지원하는 것이 목표이다. 

Git은 Linux 커널 개발을 위해 2005년 리누스 토발즈(Linus Torvalds)가 개발 되었으며, 다른 커널 개발자들도 초기 개발에 기여했다.

대부분의 다른 분산 버전 제어 시스템과 마찬가지로 Client-Server 버전 제어 시스템과는 다르게 중앙 서버와 관계없이 모든 컴퓨터의 Git 디렉토리는 파일 변경 이력(버전)을 추적할 수 있는 분산형 저장소이다.

Client-Server 버전 제어 시스템으로 많이 사용했던 SVN(Subversion)은 네트워크 연결이 안될 경우 독립적인 위치에서 동시에 개발이 진행될 때 코드 병합과 이력 관리에 많은 어려움이 있었다. Git은 이런 기본적인 문제점들을 해결하면서 보다 진보적인 방법들을 제공한다. 

인터넷 검색을 통해 보다 세부적인 내용과 더불어 다양한 기능들에 대해 찾아 보기 바란다.

서로 다른 저장소를 한 곳에 병합하는 방법

프로젝트 특성에 따라 한 개 이상의 저장소들에서 개발이 진행되다가 저장소의 병합이 필요할 때가 있다. 특정 디렉토리를 생성하여 복사해서 추가하면 되겠지만, 이련 경우에는 기존 저장소의 수정 이력(버전) 정보는 포기해야 한다. 

쉽게 기존 저장소의 수정 이력 정보를 포함하여 저장소를 병합하는 방법이 있다.

우선 다음과 같이 세 개의 저장소가 있다고 가정한다.

  1. git/project1
  2. git/project2
  3. git/project3

project2와 project3를 project1에 병합하는 방법은 다음과 같다.

사전 고려사항

  • 저장소가 병합되면 디렉토리 위치에 따라 코드가 합쳐질 수 있다. 따라서 병합전에 project1, project2, project3의 디렉터리를 병합하기 좋게 구성하여 커밋 후 PUSH 한다. (매우 중요)
  • 병합 과정에 .gitignore 파일이 충돌 날 수 있는데, 이럴 경우에는 다음과 같이 입력한다.
    • git reset .gitignore

병합

Git 터미널 창을 연다. 그리고 git/project1으로 이동한다.
$cd ~/git/project1

project2를 project1에 병합한다.

$git remote add project2 ../project2
$git fetch project2
$git merge --allow-unrelated-histories project2/master # 또는 브렌치 이름
$git remote remove project2
$git commit -m 'Merge project2 into project1'
$git push
project2와 동일하게 project3를 project1에 병합한다.

$git remote add project3 ../project3
$git fetch project3
$git merge --allow-unrelated-histories project3/master # 또는 브렌치 이름
$git remote remove project3
$git commit -m 'Merge project3 into project1'
$git push

이렇게 하면 쉽게 저장소를 수정 이력과 함께 병합할 수 있다.

참고

댓글

댓글 쓰기

이 블로그의 인기 게시물

macOS가 갑자기 부팅이 되지 않을 경우 데이터 복구 또는 백업 방법

CORS(Cross Origin Resource Sharing, 크로스 도메인) 이슈