git으로 여러 repo 병합하기 (remote branch에 대하여)

shinychan95·2021년 7월 19일
0
post-thumbnail

참고한 사이트,

 

remote branch에 대해서

리모트 트래킹 브랜치의 이름은 <remote>/<branch> 형식으로 되어 있다.

  • 리모트 Refs는 리모트 저장소에 있는 포인터인 레퍼런스다.
  • 리모트 Refs가 있지만 보통은 리모트 트래킹 브랜치를 사용한다.
  • 리모트 트래킹 브랜치는 리모트 브랜치를 추적하는 레퍼런스이며 브랜치다. 리모트 트래킹 브랜치는 로컬에 있지만 임의로 움직일 수 없다. 리모트 서버에 연결할 때마다 리모트의 브랜치 업데이트 내용에 따라서 자동으로 갱신될 뿐이다.

 

git clone

  • 즉, 어떤 repo를 clone 했을 때, local branch인 master가 있고, 리모트 트래킹 브랜치는 origin/master가 되는 것이다.
  • 이 상황에서 추가로 로컬에서 커밋을 한다면, origin/master는 그대로 있고 master 브랜치에 커밋들이 추가되는 것이다.

 

git fetch

  • 로컬과 서버의 커밋 히스토리는 독립적이다. 리모트 서버로부터 저장소 정보를 동기화하려면 git fetch origin 명령을 사용한다.
  • 그렇다면, 내가 사용하던 동기화 git pull 명령과 차이점은 무엇일까?
  • git fetch 의 경우 워킹 디렉토리의 파일 내용은 변경되지 않고 그대로 남는다. 서버로부터 데이터를 가져와서 저장해두고 사용자가 Merge 하도록 준비만 해둔다. 간단히 말하면 git pull 명령은 대부분 git fetch 명령을 실행하고 나서 자동으로 git merge 명령을 수행하는 것 뿐이다.

 

git remote add

  • git remote add <name> <url> 을 통해 다른 저장소에 대한 내용을 추가시킬 수 있다. 현재 작업 중인 프로젝트에 팀의 저장소를 추가하는 예시이다.
  • 이 예제의 경우, 중복되는 내용이 있기 때문에 자연스럽게 합쳐진다. 서버를 추가하고 나면 git fetch teamone 명령으로 teamone 서버의 데이터를 내려받는다. 명령을 실행해도 teamone 서버의 데이터는 모두 origin 서버에도 있는 것들이라서 아무것도 내려받지 않는다. 하지만, 이 명령은 리모트 트래킹 브랜치 teamone/master31b8e 커밋을 가리키도록 만든다.

  • remote에 origin 말고, teamone도 생겼다.

 

과거 작업했던 것을 병합했을 때,

  • 7월 17일에 합치기 위해 새로운 repo를 파고, homework 별 repo를 합치고자 했다. 합치려고 하는 repo들 모두 각기 다른 작업을 과거에 수행했던 것이라, 독립적으로 merge 되는 것을 볼 수 있다.

 

Push 하기

로컬의 브랜치를 서버로 전송하려면 쓰기 권한이 있는 리모트 저장소에 Push 해야 한다. 로컬 저장소의 브랜치는 자동으로 리모트 저장소로 전송되지 않는다. 명시적으로 브랜치를 Push 해야 정보가 전송된다.

serverfix 라는 브랜치를 다른 사람과 공유할 때도 브랜치를 처음 Push 하는 것과 같은 방법으로 Push 한다. 아래와 같이 git push <remote> <branch> 명령을 사용한다.

Git은 serverfix라는 브랜치 이름을 refs/heads/serverfix:refs/heads/serverfix 로 확장한다. 이것은 serverfix 라는 로컬 브랜치를 서버로 Push 하는데 리모트의 serverfix 브랜치로 업데이트한다는 것을 의미한다.

 

결론적 병합 과정 명령어 해석

# 현재 repo에 server라는 이름으로 해당 url 저장소의 git 정보 추가
> git remote add server ../Original-Server

# server에 해당하는 저장소 정보를 동기화 (아직 merge 없이 그저 추가)
> git fetch server

# 독립적인 프로젝트 간의 merge를 수행
> git merge --allow-unrelated-histories server/master

# remote 서버 제거
> git remote remove server

# 변경 사항 몯 반영
> git add .

# 커밋
> git commit -m "Merge server project into original-project"

# 푸시
> git push
profile
개발자로 일하는 김찬영입니다.

0개의 댓글