2012년 3월 12일 월요일

simple git guide for svn user

git 을 사용한지 얼마되지 않았지만 svn 사용자 입장에서 느끼는 결정적인 차이들에 대해서 간단히 논해보고자 한다.


실무에서 중요한 것은

1 ) 남이 작업한 작업물을 원격저장소에서 받아오는 것 (svn checkout )
2 ) 내가 만든 작업물을 원격저장소에 저장하는 것 (svn commit )
3 ) 내가 작업을 하던중에 다른 사람이 작업한 최신버전을 업데이트하기 (svn update )

이 세가지다. 이 세가지에만 일단 집중을 해보자.

1 ) 원격저장소에서 받아오기 
 - 받아오는 것은 git clone 을 통해서 이루어진다. 사실 처음 체크아웃 받는것은 어렵지 않다. clone 명령어를 통해도 되고 git gui client 를 이용해도 된다.

2 ) 내가 만든 작업물을 원격저장소에 저장하기
 - 여기서부터 좀 특이한데 svn commit 은 git commit -a, git push 이 두가지에 매핑이된다. git 은 저장소가 로컬, 리모트에 각각 있기 때문에 그 부분을 유의하면 된다. 로컬 저장소에 무조건 커밋을 하고, 커밋되어 완결된 버전만이 원격저장소에 밀어넣을수(push) 있다. 이 부분은 사실 그리 어렵지 않다.
    + 재미있는 사실은 커밋한 이후에 조금이라도 더 수정하면, 원격저장소에 밀어넣을 수 없다.라는거다. 그럼 어떻게 해야하느냐? 더 수정된 사항을 커밋(git commit)하던가, 더 수정된 사항을 버려야(git reset) 한다.
    + git 은 완결된 상태( 현재 작업 내용이 로컬저장소에 모두 커밋된 상태  )만이 저장소(remote, local 저장소)로 들어갈 수 있다.

3 ) 내가 작업하던 중에 다른 사람이 만든 최신 작업물로 업데이트 하기 
 - 3에 내가 작업하던 중에 라는 단서를 붙인 이유는 내가 작업한게 전혀 없는 상황에서는 업데이트하는게 아주 쉬운데, 작업하는 것이 있는 상황 - 내 입장에서 git commit 할게 있는 상황 - 에서는 업데이트가 불가능하기 때문이다.
 - 개인적으로 이 부분이 가장 헷갈렸다. svn 에서는 내가 작업을 하던 중에도 svn update 를 통해서 남들이 작업한 버전을 바로 받아볼 수 있었기 때문이다.
 - git 에서 원격저장소로에 연결하고 싶다면 반드시 로컬의 상태가 완전해야한다는 것을 다시 기억하자. 결국 개발자 입장에선 현재 로컬에서 작업 하고 있는 작업을 마무리하여 커밋을 하던가, 현재 작업하는 것을 과감히 포기하고 버리면(git reset) 다른사람의 추가 작업분을 업데이트받을 수 있다.


git 의 특이점 한줄요약 - git 에서 원격저장소와 로컬저장소를 연결하는 행위(push / pull ) 을 할때는 모든 변경사항이 commit 이 완결된 상황이어야 한다.

-------------------------------------------------------------

PS 1 )
빠른 이해를 위해서 정말 간단히 설명했다. git 의 기능은 정말 막강해서 위에서 설명한 1,2,3의 프로세스 중에 더 다양한 옵션들이 존재( 예를 들어 3의 경우에서 과감히 포기하지 않고 잠깐 저장해둘 수도 있다. )하는데, 그런 심화과정은 독자 여러분들께 맡기겠다.

PS 2 )
뭐니뭐니해도 git 에 대한 설명은 ProGit 이 가장 좋은 것 같다.

댓글 없음:

댓글 쓰기