리모트에 있는 git 서버에 repogitory가 있는데 이것과 git 리포지토리가 아닌 디렉토리를 병합해야 하는 경우에 어떻게 하는지 알아본다.

예를들면 이런 경우이다.

A가 프로젝트를 만들고 틀을 짠뒤에 전체 소스를 하드카피를 해서 B에게 전달한다. 서로 각자 개발을 진행하다가 형상 관리가 필요해서 A가 본인 소스를 git repository로 만들고 remote에도 bare repository를 만들어서 upstream으로 사용한다. B가 가지고 있는 소스도 서로 공유를 위해 A가 올린 원격 Repository와 연결을 하고자 할 때이다.

테스트 상황 만들기

원격지 bare repository 만들기

$ mkdir gittest
$ cd gittest
gittest$ git init --bare --shared base.git

샘플 데이터 만들고 원격지에 올리기

gittest$ mkdir base
gittest$ cd base
base$ ls
base$ echo "abc" > a.txt
base$ echo "def" > b.txt

base$ git init
base git:(master)$ git add *
base git:(master)$ git commit -m 'init'
base git:(master)$ git remote add origin ../base.git
base git:(master)$ git push --set-upstream origin master

원격지와 연결해야하는 리포지토리로 만들기

base git:(master)$ rm -rf .git

데이터를 일부 변경해서 B의 디렉토리 처럼 연출

base$ echo "hij" > c.txt
base$ echo "abd" > a.txt

이제 연결 해보기

base 디렉토리를 git repository로 초기화

base$ git init
base git:(master)$ git add *
base git:(master)$ git commit -m 'new init'

리모트 등록

base git:(master)$ git remote add origin ../base.git

원격지 데이터 Fetch

base git:(master)$ git fetch

Branch Tracking 설정

base git:(master)$ git branch --set-upstream-to=origin/master master

Local와 리모트 자원 병합

base git:(master)$ git pull origin master --allow-unrelated-histories

충돌 제거

base git:(master)$ vi a.txt
base git:(master)$ git commit -m 'merged'

리모트로 Push

base git:(master)$ git push

결과

깔끔하게 원격지 디렉토리와 로컬을 병합하였다.