JGit 설치

이클립스 업데이트 사이트: http://www.jgit.org/update-site
위 업데이트 사이트를 이용해서 설치하면 됩니다.

그런 다음 Git로 버전 관리할 프로젝트에서 Team -> Share Project -> Git를 선택합니다. 그럼 이제 Team 메뉴에서 Git 명령어 몇 개를 사용할 수 있습니다.

사용자 삽입 이미지사용자 삽입 이미지
아직은… 툴 지원이 Subversion에 비해 미약한 듯 합니다. 특히 Git에서 자주 사용할 것 같은 명령어인 Add, Commit, Pull, Push에 대한 단축키가 지정되어 있지 않다는 것이 좀 걸립니다. 물론 수동으로 단축키를 등록하고 사용하는 방법도 있지만… 조금 귀찮죠.

새로 추가한 파일은 관리 대상이 아니라는 표시가 나오고 관리 중인 코드를 변경하고 아직 commit 하지 않았을 경우 not updated라고 표시해줍니다. 이 상태에서 commit을 하면 not updated인 코드만 commit하고 새로 추가한 파일은 commit하지 않습니다.

오른쪽 조그만 빨간색은 JUnit Max인데 저장하는 순간 바로 테스트를 하고 그 결과를 알려주기 때문에 굉장히 유용한 툴인것 같습니다. 손수 테스트를 돌리지 않아도 되기 때문에 코딩 흐름을 빠르게 이어 나갈 수 있습니다.

Git – 분산 버전 관리 시스템(Distributed VCS)

참조
http://www.infoq.com/articles/dvcs-guide
http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/
http://bazaar-vcs.org/Workflows
http://github.com/

먼저, 분산 이라는 표현이 좀 애매해서 이해하는데 어려울 수 있는데, “독립적인” 또는 “peer-to-peer”라는 표현이 더 좋겠다는 생각에 동의합니다.(두번째 링크 참조)

사용자 삽입 이미지첫번째 링크에서 퍼온 그림.

위 그림을 보고 대충 짐작을 할 수 있습니다. 기존의 방식은 왼쪽처럼 한 곳에 중앙 리파를 두고 거기에 소스코드를 커밋or체크아웃/업데이트 하는 방식이었데, 분산 VCS에서는 각자가 자신만의 리파를 두고 그곳에 코드를 변경합니다. 외부로 접속하지 않으니깐 빠르겠죠. 그리고 서로 각자가 변경한 코드들을 상대방에서 push 해서 상대반 저장소의 코드를 업데이트 하거나, pull 해서 끌어올 수 있습니다. 마치 각자가 브랜치를 가지고 작업하는 것과 동일합니다. 그러다가 서로 충돌나는 부분이 있으면 merge를 하면 되는데, CVS나 SVN에서의 merge랑은 차원이 다르게 간편하고 유용하다고 합니다.

리누즈 토발즈는 SVN을 뭘하는 건지 모르겠는 프로젝트(pointless project)라고 비아냥 거렸고, CVS를 좋아하는 사람들은 정신병원에 가야한다는 농담을 했습니다.(두번째 링크에 리누즈 토발즈의 동영상 중에 직접 언급을 하며, 첫 번째 링크에는 아래처럼 요약해 두었습니다.)

Linus Torvald: “Subversion has been the most pointless project ever started”. “If you like using CVS, you should be in some kind of mental institution or somewhere else”.

Git 같은 분산 VCS를 사용해서도, 중앙 리파를 쓰는 CVS나 SVN을 쓰듯이 워크 플로우를 잡을 수 있습니다. 하지만, CVS나 SVN으로는 구성할 수 없는 워크 플로우를 Git를 사용해서는 구성할 수 있습니다. 예를 들어, 세번째 링크에 있는 Decentralized with human gatekeeper 모델은.. 아래와 같습니다.
사용자 삽입 이미지주 코드에 변경을 가하기 전에 누군가 코드를 검사한 다음 그 걸 반영하는 워크 플로웁니다. 개발자가 많고 각각의 실력 편차가 심한 상황에서 코드 품질을 관리하려면, 선임 개발자 몇명을 두고, 저런 워크 플로우로 개발하는 것이 좋겠죠. 그러나 SVN으로.. 저런 걸 어떻게 할까요? SVN에는 저런 워크 플로우를 지원하기 위한 어떤 것도 없습니다. Git같은 분산 VCM으로는 가능합니다. 하는 방법도 위에 써져있죠. ㅋ

pull/push/update/merge에 대한 용어 설명은 두 번째 링크에 있습니다.

재밌는 툴인거 같습니다. 저장소를 설치하기 귀찮다면 100메가까지 무료로 제공해주는 웹 리파를 사용할 수 있겠습니다. 네 번째 링크에 있습니다.

위와 같은 신기한 툴을 알려주신 사부님께 땡큐입니다. SVN으로 평생 commit/update만 하면서 살뻔했는데, 이젠 branch나 merge같이 좀 더 SCM 스러운 툴을 써볼 수 있게 됐네요.