본문 바로가기

Git 도구-1 - 리비전 조회하기 리비전 조회하기 리비전 하나 가리키기 짧은 SHA-1 다음 명령은 모두 같은 명령이다. $ git show 1c002dd4b536e7479fe34593e72e6c6c1819e53b $ git show 1c002dd4b536e7479f $ git show 1c002d git log 명령어에 --abbrev-commit 옵션을 추가하면 기본 7자의 해시를 보여주고 중복되면 더 긴 해시값을 보여준다. $ git log --abbrev-commit --pretty=oneline ca82a6d changed the version number 085bb3b removed unnecessary test code a11bef0 first commit 보통은 8 ~ 10자 로도 충분하다. 리눅스 커널도 해시값 12자만 .. 더보기
분산 환경에서의 Git-5 - 프로젝트 운영하기 프로젝트 운영하기 프로젝트 운영은 크게 두 가지로 이루어진다. fotmat-patch 명령을 생성한 Patch를 이메일로 받아서 프로젝트에 Patch를 적용하는것 프로젝트의 다른 리모트 저장소로 부터 변경내용을 Merge하는 것 토픽 브랜치에서 일하기 임시로 토픽 브랜치에 통합해보고 나서 메인 브랜치에 통합 하는 것이 좋다. Patch를 적용할 때 이리저리 수정해볼 수 있다. 더 고민할 점이 있으면 Patch를 적용해 둔 채로 나중에 미룰 수도 있다. 프로젝트의 관리자라면 임시 통합할 토픽 브랜치의 이름을 잘 지어야 한다. 예를 들어 sc라는 사람이 작업한 Patchfkaus sc/ruby-client처럼 앞에 닉네임을 붙여서 브랜치를 만들 수 있다. $ git branch sc/ruby_client m.. 더보기
분산 환경에서의 Git-4 - 프로젝트에 기여하기 - 공개 팀 공개 소규모 팀 공개 팀을 운영 할 때에는 모든 개발자가 프로젝트 공유 저장소에 직접적으로 쓰기 권한을 가지지 않는다. 그래서 프로젝트 관리자는 몇가지 일을 더 해줘야 한다. Fork를 지원하는 Git호스팅에서 Fork를 통해 프로젝트에 기여하는 법을 예제를 통해 살펴본다. repo.or.cz나 Github 같은 Git 호스팅 사이트느 Fork 기능을 지원하며 프로젝트 관리자는 보통 Fork하는 것으로 프로젝트를 운영한다. 다른 방식으로 이메일과 Patch를 사용하는 방식도 있다. 우선 처음 할 일은 메인 저장소를 Clone 하는 것이다. 그러고 나서 토픽 브랜치를 만들고 일정 부분 기여한다. $ git clone $ cd project $ git checkout -b featureA ... work ... 더보기
분산 환경에서의 Git-2 - 프로젝트에 기여하기 - 비공개 소규모 팀 비공개 소규모 팀 보통 서브버젼 같은 중앙 집중형 버젼관리 시스템에서 사용하던 방식을 사용한다. 물론 Git이 가진 오프라인 커밋, 브랜치기능도 사용한다. 가장 큰 차이점은 서버가 아닌 클라이언트에서 Merge를 한다는 점이다. 두 개발자가 저장소를 공유하는 시나리오를 살펴보자. 개발자 John은 저장소를 Clone하고 파일을 수정 로컬에 커밋한다. $ git clone john@githost:simplegit.git $ cd simplegit/ $ vim lib/simplegit.rb $ git commit -am 'removed invalid default value' 개발자 Jessica도 저장소를 Clone하고 나서 파일을 하나 새로 추가하고 커밋한다. $ git clone jessica@gith.. 더보기
분산 환경에서의 Git-3 - 프로젝트에 기여하기 - 비공개 대규모 팀 비공개 대규모팀 이런 상황에는 보통 팀을 여러개로 나눈다. 그래서 각각의 작은 팀이 서로 어떻게 하나로 Merge하는지를 살펴본다. John과 Jessica는 한 팀이고 프로젝트에서 어떤 한 부분을 담당한다. 또한 Jessica와 Josie도 다른 부분을 담당하는 한 팀이다. 이런 상황이라면 회사는 Integration-Manager Workflow를 선택하는게 좋다. 작은 팀이 수행한 결과물은 Integration-Manager가 Merge하고 공유 저장소의 master 브랜치를 업데이트 한다. 팀마다 브랜치를 하나씩 만들고 Integration-Manager는 그 브랜치를 Pull해서 Merge한다. 두 팀에 모두 속한 Jessica의 작업 순서를 살펴보자. 우선 Jessica는 저장소를 Clone하.. 더보기
분산 환경에서의 Git-1 - 분산 환경에서의 Workflow 분산 환경에서의 Workflow 중앙집중식 Workflow 중앙 저장소는 딱 하나 있고 변경사항은 모두 이 중앙 저장소에 집중된다. 팀이 작거나 이미 중양 집중식 에 적응한 상황이라면 이 Workflow에 따라 Git을 도입하여 사용할 수 잇다. 중앙 저장소를 하나 만들고 개발자 모두에게 Push권한을 부여한다. 모두에게 Push 권한을 부여해도 Git은 한 개발자가 다른 개발자의 작업을 덮어 쓰도록 허용하지 않는다. 한 개발자가 Clocne 하고 나서 수정하는 사이에 이미 다른 개발자가 중앙 저장소에 무언가 Push했다면 이 개발자는 Push 할 수 없다. Git은 Fetch하고 Merge해야 서버로 Push할 수 있다고 알려준다. Integration-Manger Workflow Git을 사용하면 리.. 더보기
Git 브랜치-2 브랜치 관리 git branch : 아무런 옵션없이 실행시 브랜치의 목록을 보여준다. $ git branch iss53 * master testing -v 옵션 : 브랜치마다 마지막 커밋 메시지도 함께 보여준다. $ git branch -v iss53 93b412c fix javascript issue * master 7a98805 Merge branch 'iss53' testing 782fd34 add scott to the author list in the readmes --merged 옵션 : 현재 checkout 한 브랜치를 기준으로 이미 Merge 한 브랜치 목록 확인 * 기호가 붙어 있지 않은 브랜치는 git brandch -d 명령으로 삭제해도 되는 브랜치이다. $ git branch --m.. 더보기
Git 브랜치-1 브랜치란 무엇인가? 파일을 Stage하면 Git 저장소에 파일을 저장하고( Blob ) Staging Area에 해당 파일의 체크썸을 저장한다. $ git add README test.rb LICENSE $ git commit -m 'The initial commit of my project' git commit으로 커밋하면 먼저 루트 디렉터리와 각 하위 디렉터리의 트리 개체를 체크섬과 함께 저장소에 저장한다. 커밋 개체를 만들고 메타데이터와 루트 디렉터리 트리개체를 가리키는 포인터 정보를 커밋 개체에 넣어 저장한다. 그래서 필요하면 언제든지 스냅샷을 다시 만들 수 있다. 이 작업을 마치고 나면 Git 저장소에는 다섯개의 개체가 생긴다. 각 파일에 대한 Blob 3개 파일 디렉터리 구조가 들어있는 트리개.. 더보기