프로 Git 2판: 개발자에게 꼭 필요한 책
근래 읽은 책 중 업무에 가장 도움이 될 만한 책. 그래서 많은 사람에게 추천하고 싶은 책. 개발자라면 다른 사람과 협업하는 개발자라면 꼭 읽어야 하는 책이라고 생각한다.
독서의 목적과 결과
버전 관리 시스템을 사용하지 않는 개발자가 있을까? 혹, 사용하지 않는 개발자가 있다면 꼭 도입하시길, .. 아무리 혼자 하는 개발이라도, 토이 프로젝트라도 버전 관리 시스템의 유무는 당신의 삶의 질을 결정할 수 있습니다.
각설하고, 현재 업무 그리고 나의 토이 프로젝트에도 사용하고 있는 Git. 이걸 내가 충분히 잘 사용하고 있을까? 기존에 subvision 같은 버전 관리 시스템에 익숙하여 Git을 잘못 사용하는 게 아닐까? 혹은 Git의 유용한 기능을 놓치고 바보 같은 방법으로 사용하고 있는 것이 아닐까 하는 걱정에 이 책을 집어 들었다.
결과는 대만족!
유용한 정보
책을 읽으며 Git을 사용하려면 분산 버전 관리 그리고 Git의 브랜치에 익숙해져야겠다고 생각했다. 그래가 보다 더 효율적으로 git을 통한 개발을 진행할 수 있을 것 같다.
분산 버전 관리 시스템
분산 버전 관리 시스템이기에 모든 작업이 일차적으로 내가 작업하는 컴퓨터에서 이루어진다. 코드 수정, commit, 브랜치 처리 등 모든 버전 관리 작업을 내 컴퓨터에서 처리할 수 있으며, remote 혹은 서버에 올릴 작업을 정제하여 올려주면 된다.
그동안 SVN 같은 다른 시스템에서의 경험 때문에 remote와 나의 작업 환경과 지속적인 동기화 처리에도 많은 공수가 들어갔었다. 몇 가지 연구 및 실험이 필요하긴 하지만, 분산 버전 관리 환경을 이해하면 코드 sync-up을 위해 투입하는 노력을 아낄 수 있을 것 같다.
브랜치
Git은 브랜치 Merge 시에 공통 조상과 대상, 그리고 현재 작업 브랜치 이렇게 3가지 소스를 3-way merge를 수행한다. 그래서 브랜치 merge가 다른 VCS에 비해 쉽고 간단하다고 한다. 그동안 다른 VCS를 사용하며 브랜치 merge 및 각종 코드 commit 시에 발생하는 에러로 고생한 경험이 있다. 그래서 주로 손 merge를 사용하여 작업 내용을 서버에 반영했다. git도 마찬가지였다.
일단 내 작업 방식 변화를 생각해 보려고 한다. 현재의 스케치는 작업 환경에서 나의 모든 작업은 브랜치를 생성하여 처리, 그리고 merge 하여 commit 하면 현재 소스 sync-up에 투입하는 노력을 아낄 수 있지 않을까 생각된다. 추가로 나의 작업 내용도 작업 환경에 히스토리로 남아 향후 참고할 수도 있을 것 같다.
추가로 remote git 관리 방법에 대한 정리가 필요하다. 현재는 master 기준으로 모든 팀원이 달리고 있는데, 해당 환경에서 배포와 버전 관리가 상당히 힘들다. 배포 내용을 브랜치 처리하고 해당 브랜치에 배포 버전의 패치 관리, 그리고 모든 수정 사항은 master에도 반영이 되어야 한다. 보더 더 효율적인 방안이 있을 텐데...??
브랜치 워크 플로
아래의 워크 플로는 모두 개발자의 local 환경에서 처리하는 사항이다.
Long-Running 브랜치
develop 브랜치에서 테스트 및 안정화를 마친 코드는 master 브랜치로 merge하여 관리하는 방법
- master: 배포 완료 혹은 배포 예정
- develop: 개발 진행 및 안정화
토픽 브랜치
주제별로 브랜치를 생성하여 작업 후 merge 후 삭제 처리.
유용한 명령 몇 개
책을 보며 몰랐지만, 사용하면 업무에 도움이 될 것 같은 명령 모아두기.
git branch
## 브랜치마다 마지막 커밋 메시지 함께 출력
git branch -v
## 이미 merge한 브랜치 목록 출력
git branch --merged
## 현재 checkout한 브랜치에 merge하지 않은 브랜치 출력
git branch --no-merged
git log
##-p는 각 커밋의 diff 결과 함께 출력
## -2는 최근 두 개의 결과만 출력
git log -p -2
## 각 커밋을 한 라인으로 출력
git log --pretty=oneline
## 브랜치와 머지 히스토리를 보여주는 아스키 그래프 출력
git log --pretty=format:"%h %s" --graph
Git Cheat Sheet
아래는 책 전반에 걸쳐 설명하는 Git 관련 사항을 한 장으로 요약한 Sheet이다. 업무 중간 간단히 참고하여 처리할 수 있다. 상세한 내용은 책을 살펴보면 확인 가능하다.