- About Git 1/3 SERIES 1/3
- About Git Remote 2/3 ✓ SERIES 2/3
- Git Stash 3/3 SERIES 3/3
git 사이트에서 Pro Git book을 제공하고 있습니다.
About Git 1/2 글의 후속편입니다.
Git on the Server
Clone
로컬에 저장소를 생성하는 방법중에는
init
명령어로 로컬 저장소를 생성하고 원격 저장소를 설정하는 방법과
clone
으로 생성하는 방법이 있지요.
진행중인 오픈소스나 프로젝트 저장소를 clone 해서 로컬 저장소로 가져옵니다.
$ cd /myForest/myTree
$ git clone https://sample-project.sample.com/mytree.git
Remote repository
$ git remote -v # 원격 저장소 정보
$ git remote show # 로컬브랜치의 원격 저장소 명
$ git remote show origin # origin(원격 저장소) 정보 (브랜치별 정보 확인)
$ git remote add myfork (url) # 원격 저장소 fork
git fetch
git fetch [remote-name]이 명령은 로컬에는 없지만, 리모트 저장소에는 있는 데이터를 모두 가져온다.
그냥 쉽게 git pull 명령으로 리모트 저장소 브랜치에서 데이터를 가져올 뿐만 아니라 자동으로 로컬 브랜치와 Merge 시킬 수 있다.
리모트 서버로부터 저장소 정보를 동기화하려면 git fetch origin 명령을 사용한다. 명령을 실행하면 우선 “origin” 서버의 주소 정보(이 예에서는 git.ourcompany.com)를 찾아서, 현재 로컬의 저장소가 갖고 있지 않은 새로운 정보가 있으면 모두 내려받고, 받은 데이터를 로컬 저장소에 업데이트하고 나서, origin/master 포인터의 위치를 최신 커밋으로 이동시킨다.
git fetch 명령을 실행하면 서버에는 존재하지만, 로컬에는 아직 없는 데이터를 받아와서 저장한다.
이 때 워킹 디렉토리의 파일 내용은 변경되지 않고 그대로 남는다.
서버로부터 데이터를 가져와서 저장해두고 사용자가 Merge 하도록 준비만 해둔다.
$ git fetch origin
원격 master 브랜치를 fetch 합니다.
$ git fetch --all; git branch -vv
모든 브랜치를 fetch 한 후 브랜치 정보를 보여줍니다.
git full
트래킹 브랜치에서 git pull 명령을 내리면 리모트 저장소로부터 데이터를 내려받아 연결된 리모트 브랜치와 자동으로 Merge 한다.
git push
로컬에만 있는 브랜치인 경우 원격에 동일한 이름으로 생성하고 push 합니다.
기존에 존재하는 브랜인 경우 원격에 push 합니다.
git push `remote` `branch`
git push `remote` `locally-branch:remote-branch`
$ git push origin branch-test
=
$ git push origin branch-test:branch-test
$ git push -u origin featureB:featureBee
명령에서 사용한 -u 옵션은 –set-upstream 옵션의 짧은 표현인데 브랜치를 추적하도록 설정해서 이후 Push 나 Pull 할 때 좀 더 편하게 사용할 수 있다. p.131
branch delete
분기나 반기별로 오는 branch 정리하는 날이 되었습니다.
먼저 로컬 branch 를 정리하였습니다.
$ git branch -d feature/topic-1704
Issue 1
로컬 branch 를 정리하다 보면 개발하다가 병합하지 않은 경우가 있습니다. (다양한 상황으로 인해)
이런 branch 를 삭제하려고 하면 아래와 같이 경고하고, 삭제 실패합니다.
$ git branch -d feature/topic-3000
warning: not deleting branch 'feature/topic-3000' that is not yet merged to
'refs/remotes/origin/feature/topic-3000', even though it is merged to HEAD.
error: The branch 'feature/topic-3000' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature/topic-3000'.
친절하게 안내해준 명령 -D
으로 삭제합니다.
$ git branch -D feature/topic-3000
Deleted branch feature/topic-3000 (was b92fdc7cd).
원격 branch 를 삭제해야 하는 타이밍이 되었습니다.
$ git push origin -d feature/topic-1704
정리를 습관할 수록 일이 줄어들겠지요?! (허허~)
Issue 2
증상
$ git push origin -d feature/topic-1502
error: unable to delete 'feature/topic-1502': remote ref does not exist
error: failed to push some refs to 'https://x.willow.net/buse/project_was.git'
검토
서버에 해당 브랜치가 있는지 확인합니다. 있네요!
$ git branch -r | grep 1502
origin/feature/topic-1502
운영중인 git web 툴에서 브랜치를 확인합니다. 없네요!
조치
서버에 브랜치가 없어 로컬 캐시 문제라는걸 깨달았습니다.
$ git fetch --prune
From https://x.willow.net/buse/project_was
- [deleted] (none) -> origin/feature/topic-1500
- [deleted] (none) -> origin/feature/topic-1502
생략
해당 저장소는 이전에 저장소를 한번 이동했었던 이력이 있어서 쉽게 유추할 수 있었습니다.
해결완료~!