본문 바로가기

전체 글

Git 도구-3 - Stashing Stashing Stash 명령을 사용하면 워킹 디렉터리에서 수정한 파일 만 저장한다. 다음 파일들을 보관한다. Modified 이면서 Tracked 상태인 파일 Staging Area에 있는 파일 아직 끝나지 않은 수정사항을 스택에 잠시 저장했다가 나중에 다시 적용할 수 있다. 하던 일을 Stash하기 파일 두 개 수정하고 그 중 하나는 Staging Area에 추가한다. $ git status Changes to be committed: (use "git reset HEAD ..." to unstage) modified: index.html Changes not staged for commit: (use "git add ..." to update what will be committed) (use ".. 더보기
Git 도구-2 - 대화형 명령어 대화형 명령어 git add 명령에 -i 나 --interactive 옵션을 주고 실행하면 대화형 모드로 들어간다. $ git add -i staged unstaged path 1: unchanged +0/-1 TODO 2: unchanged +1/-1 index.html 3: unchanged +5/-1 lib/simplegit.rb *** Commands *** 1: status 2: update 3: revert 4: add untracked 5: patch 6: diff 7: quit 8: help What now> Staging Area 파일 추가하고 추가 취소하기 위의 Commands 처럼 2, 나 u 입력하고 엔터 What now> 2 staged unstaged path 1: unchang.. 더보기
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을 사용하면 리.. 더보기