주니어 개발자의 대나무숲

git 사용법 본문

개발 공부

git 사용법

공대사람 2017. 1. 27. 16:16

git을 거의 처음 사용해봐서 그런지 사용법을 익히는 것이 쉽지가 않다.

프로젝트 진행에 방해가 되지 않도록 간단한 사용법을 익혀두는 것이 좋을 것 같다!


*리모트 저장소 : 인터넷이나 네트워크 어딘가에 있는 저장소로, 다른 사람과 git을 통해 협업한다는 것은 이 리모트 저장소를 관리(저장소 자체 추가, 삭제 및 브랜치 관리, 추적)하고, 리모트 저장소에 데이터를 추가 및 삭제하는 것을 의미합니다.


*브랜치 : '작업 공간'이라고 생각할 수 있습니다. 예를 들어, 프로그램에 기능 A를 추가하고 싶은 상황이라고 합시다. 그런데, 이 기능 A가 현재까지 개발한 프로그램의 다른 기능들과 어떤 dependency를 가지고 있을지 모르는 상황이기 때문에 바로 프로그램에 기능을 추가하는 것은 위험할 수도 있습니다. 따라서, 원래 코드는 그대로 두고 기능 A를 추가한 코드를 테스트해본 후 프로그램에 기능을 추가하는 것이 바람직할 것입니다. 이 때, 기능 A추가를 위한 '작업 공간' 즉 브랜치를 새로 만들어 작업을 한 후 테스트를 거쳐, 원래의 프로그램(주로, master 브랜치)에 합쳐주는 일련의 과정을 통해 위의 작업을 진행할 수 있습니다.


팀원들과 협업하기 위해 git을 사용하는 것이므로, 해당 repo[각주:1]를 clone해와서 로컬에서 작업한 후, 리모트 저장소(앞에 말한 해당 repository)에 push하는 일련의 과정을 정리해보도록 하겠습니다.



1. $git clone [repository web URL]


로컬로 가져와서 작업하고자 하는 해당 repository의 URL을 이용해 로컬로 clone 해옵니다. master 브랜치 뿐만 아니라 모든 브랜치를 가져오기 때문에, 로컬에서 원하는 브랜치로 이동 또한 가능합니다.


* $git clone을 하면 해당 repo를 origin이라는 이름의 리모트 저장소로 자동 추가해줍니다. 따라서, 후에 repo의 URL 대신 origin이라는 이름을 통해 push를 할 수 있습니다.



2. $git checkout -b [새로 생성할 브랜치의 이름] or $git checkout [이동할 브랜치의 이름]


새로운 브랜치에서 작업을 하고 싶은 경우에 $git checkout -b 를 통해 새로운 브랜치를 생성할 수 있습니다. 좀 더 엄밀히 말하자면, $git checkout -b는 (새로운 브랜치 생성 + 해당 브랜치로 이동)이 합쳐져 있는 명령어입니다. 


즉, 

$git branch new_branch        //new_branch라는 새로운 브랜치 생성

$git checkout new_branch     //new_branch로 이동


와 같다고 할 수 있습니다.  



3. $git add [add할 파일(들)]


commit할 파일들을 추가하는 단계입니다. $git add . 을 하면 모든 파일을 추가할 수 있습니다. 


* $git add -p

git add . 을 이용하면 원치 않는 파일이 추가될 수도 있고, commit할 파일 내에서도 commit을 하길 원치 않는 변경사항도 add될 수 있기 때문에 git add -p를 통해 hunk 단위(변경사항의 하나의 단위)로 add해주는 것이 좋습니다. 

$git add -p 를 하면 추적 중인 파일의 modified된 부분마다 add를 통해 staging할 지 안 할지를 결정할 수 있습니다. ( y, n 등을 입력해 선택하는 방식)



4. $git commit


staging된 파일들을 commit하는 단계입니다. $git commit을 하면 vim이 뜨게 되고(어떤 editor를 사용할 것인지는 직접 설정 가능) editor상에서 commit 메세지를 입력할 수 있습니다.


* $git commit -v

$git commit -v를 하면, vim 상에서 commit 메세지를 입력하는 부분 아래에 변경 사항(diff)를 보여주기 때문에, 의도하지 않은 commit을 하는 실수를 막아줄 수 있습니다.



5. $git push [리모트 저장소 이름] [push할 브랜치 이름]


마지막으로 리모트 저장소에 push 해주는 단계입니다. 처음에 $git clone을 했다면 리모트 저장소가 origin으로 돼있기 때문에, $git push origin [브랜치 이름]해주면 됩니다.



6. 갱신과 병합


파일을 commit 하기 전에 내가 로컬에서 작업한 수정사항들이 다른 사람의 수정사항과 겹치진(충돌) 않는지 확인해볼 필요가 있습니다.

$git pull 을 이용해 원격 저장소의 변경 내용(내가 clone해 온 이후에 다른 누군가가 수정을 했을 수도 있으므로)을 로컬로 가져오고(fetch), 리모트 저장소의 파일과 내가 수정한 파일을 병합(merge)해줍니다. 간단히 말하자면, $git pull은 fetch와 merge를 합친 동작이라고 할 수 있습니다.


즉,    

$git fetch fetch_branch        //리모트 저장소의 fetch_branch를 로컬로 가져옴

$git merge fetch_branch      //fetch_branch를 현재 작업중인 브랜치와 병합


와 같다고 할 수 있습니다. 이 때,  fetch해 온 파일과 내가 수정한 파일 간 충돌이 발생할 수 있습니다. 이 때, git이 알려주는 충돌 부분을 직접 수정해야 성공적으로 병합할 수 있게 됩니다.



참고 자료

1. git - 간편 안내서 (https://rogerdudler.github.io/git-guide/index.ko.html)

2. git reference (https://git-scm.com/doc)

3. 버전관리를 들어본적 없는 사람들을 위한 DVCS -Git (http://www.slideshare.net/ibare/dvcs-git)

4. 협업을 위한 git (http://blog.appkr.kr/learn-n-think/comparing-workflows/)

  1. github의 프로젝트 내에 있는 저장소(말 그대로 폴더, 파일을 저장해놓는 곳)의 준말. repository [본문으로]

'개발 공부' 카테고리의 다른 글

tmux 사용법  (1) 2019.08.28
Comments