[GIT] 간단 사용법(원격 저장소)
github를 사용한 원격디렉토리 활용법에 대한 학습내용 정리합니다.
git remote [-v] : 로컬디렉토리에 등록된 원격저장소 목록을 확인한다. -v 옵션은 url까지 명시된다.
git remote add [원격저장소 명] [url] : 원격 저장소를 등록한다. url은 github 주소를 입력한다.
ex) git remote add origin github.com/xxx/xxx
git remote rm [원격저장소 명] : working directory에 등록된 원격 저장소 제거
git push [-u] [원격저장소 명] [로컬저장소 브렌치명] : 내 Repository의 브렌치를 원격저장소에 반영한다.
ex) git push -u origin master : 현재 버전을 origin 원격저장소의 master 브렌치에 반영한다.(-u)는 origin/master를 default 저장소로 설정하는 옵션
git pull [origin master] : origin의 master 브렌치를 현재 브렌치에 반영한다.(충돌이 발생할 수 있다.)
pull도 하나의 버전이 생성되는 과정
git fetch [origin master] : 바로 반영하지 않고 FETCH_HEAD라는 보이지 않는 브렌치에 pull한다.
그 뒤에 FETCH_HEAD 브렌치로 checkout 하여 내용을 확인하고 merge를 통해 병합한다.
merge가 결국 fetch -> merge의 단계
git clone [url] : 원격 저장소의 내용을 현재 로컬 디렉토리에 복사한다. clone을 하면
해당 디렉토리는 git init 스크립트를 실행한 상태가 되고 remote add 하지 않아도
origin이란 이름으로 원격 저장소가 자동등록된다.
충돌 시 해결방법
병합할때에 로컬 저장소와 원격 저장소의 소스가 같은 위치에 수정이 있다면 충돌이 발생하는데
merge 스크립트 후 오류메시지 확인하여 해당 파일로 가면
소스가 수정된것을 확인할 수 있는데
<<<<<<<
로컬 저장소 소스
=======
github 소스
>>>>>>>
git이 충돌 부분을 표시고 우리는 해당 부분을 수정하여 add 하고 merge를 계속 진행하면 된다.
pull-request
나의 수정본을 pull 해달라는 요청을 보내는 행위
(나의 수정본을 당신의 원격 저장소에 반영해주세요!)
함께 작업해야 하는 원격 저장소를 나의 원격저장소에 fork하여(그대로 복사한다.)
작업할 branch를 새로 만들어 fork해온 버전을 clone한다.
이후 내가 작업해야 하는 부분을 작업하고 add > commit > push를 진행하고
fork 해온 원격저장소로 가보면
pull request를 클릭하여 comment를 작성하여 request를 보내면 해당 저장소의 관리자가 확인하여 처리한다.
rebase
git checkout -b [브렌치 명] : 브렌치 생성과 동시에 checkout 한다.
git rebase [rebase대상 브렌치명]
ex) git rebase master : master브렌치의 HEAD버전으로 rebase한다.
브렌치를 새로 만들어 작업하고 master브렌치에 반영하려는데 그 사이에 master브렌치에서 수정이 발생하여 새로운 버전이 생성되었다면?
병합하지 못하고 충돌이 발생할것이다. 그래서 브렌치의 시작점을 옮기는 작업이 rebase이다.
위에 사진으로 설명하면 test브렌치의 시작점이 88482d2 로 되어있는데 이걸 720e78a버전으로 시작점을 옮기는 것이다.
물론 이과정에서 충돌이 발생할 수 있고 충돌을 수정하는 작업이 필요하다.
그리고 버전이 여러버전이라면 해당 버전 마다 병합작업이 진행된다.
충돌이 발생했다면
git rebase --continue 스크립트로 충돌된 파일 목록을 확인할 수 있다. 병합 작업이 끝나면
git add 후
git rebase --continue 명령하면 rebase 끝 !