Extremely Agile/CVS2013.12.20 15:56

SVN을 사용하다 Git으로 넘어온 개발자건, 아니면 Git을 통해 소스 코드 버전 콘트롤 시스템을 처음 사용하게 된 사용자건 간에 Git을 처음 접하면 낯선 명령어와 (?) 원칙들 때문에 어려움을 겪습니다. 아마 Git을 맨 처음 접하면 가장 먼저 사용해보는 명령어는 다음과 같을 겁니다.


  • git init - 이 명령을 실행한 디렉터리를 Git 저장소로 만든다.
  • git clone /로컬/저장소/경로 - 로컬 저장소를 복제한다.
  • git clone 사용자명@호스트:/원격/저장소/경로 - 원격 저장소를 복제한다. 


이렇게 해서 복제한 (또는 생성한) 저장소는 대관절 어떻게 사용해야 하는 걸까요? git을 사용하는 방법은 너무나 다양하고 활용 범위도 너무나 넓습니다만, 초보자는 '일단' 다음의 원칙을 기억합시다. 최소한 이 절차만 알아도 팀의 일원으로써 '면피'는 할 수 있습니다. (응?) 


1. 소스 코드를 수정하고 싶다면 새로운 브랜치(branch)를 만든다.

2. 새로 만든 브랜치로 간다. (checkout) 

3. 새로운 브랜치에서 소스코드를 수정하고, add하고, commit한다. 

4. 원래 브랜치에 수정된 사항을 반영하고 싶으면, 일단 원래 브랜치로 돌아간다(checkout)

5. 그런 다음 수정이 끝난 브랜치를 병합한다(merge)

6. 원래 저장소에 반영한다. (push) (clone된 저장소의 경우만) 


이 과정을 그림으로 표현하자면 다음과 같습니다. 


http://rogerdudler.github.io/git-guide/index.ko.html


이 그림을 이해하기 위해서는 저장소를 복제하면 기본적으로 만들어지는 master 브랜치가 있다는 것. 그리고 거기에서 임의의 branch를 만들어 낼 수 있다는 것 등을 이해해야 합니다. ('새로 생성한' 저장소의 경우에는 파일을 추가하지 않으면 master 브랜치가 생기지 않으므로 주의해야 합니다. 그러니 README 파일이라도 추가한 다음에 commit해서 master 브랜치는 만들어 놓도록 합시다. Orz)


  • branch 생성: git branch <branch이름>  
  • 특정한 브랜치로 이동: git checkout <branch이름> 
  • git checkout -b <branch이름> 하면 위의 두 과정을 한 방에 수행할 수 있습니다. 
  • 새로운 브랜치에서 소스코드를 수정하는 것은 아무 편집기나 사용하셔서 하시면 되고.
  • 현재 브랜치 상태 확인: git status (변경된 파일이 있다면, 그 파일의 목록도 나타남)
  • 변경된 파일을 commit 대상에 포함시키는 명령: git add <파일경로> 
  • commit 수행 (로컬): git commit -m "<commit 로그 메시지>" 
  • 현재 브랜치에 특정 브랜치 병합: git merge <병합할 branch명> 입니다. 
  • 병합 결과를 원래 저장소로 밀어넣는 명령어는 git push origin <branch명> 입니다. 

자. 그러면 쌩초보의 git 사용 순서를 다시 한 번 정리해 봅시다. 

  • git clone <원격지 저장소명> 
  • git branch bjlee01
  • git checkout bjlee01
  • ... 소스 코드 수정 ....
  • git add modified.java
  • git commit -m "modified.java bug fix."
  • git checkout master
  • git merge bjlee01
  • git push origin master 
  • 끝. 


그러나 끝내기 전에 한 가지 원칙만 더 짚고 넘어갑시다. 기본적으로 각 branch는, 서로 다른 담당자가 있는 것 처럼 생각하세요. 그렇게 생각하면 '소스코드를 수정할 때 새로운 브랜치를 만들어야 하는 이유'가 비교적 분명해 집니다. 


그리고, 절대로 master 브랜치를 '직접' 수정하지 마세요. 인생이 고달파 집니다.
(그 이유는 다음에.) 



저작자 표시 비영리 변경 금지
신고
Posted by 이병준
TAG ,

소중한 의견, 감사합니다. ^^