이미지 확대/축소가 가능합니다.

닫기


예전과 지금의 개발 환경에서 가장 큰 차이점을 하나만 꼽으라고 하면, Git의 사용이라고 할 수 있다. 과거의 SVN 같은 도구에 비해, 코드 관리를 좀 더 확실하고 편하게 해 준다. 특히 대규모 개발에는 사실상 빼 놓을 수 없는 존재가 되었다. 이렇듯 Git은 참 좋은 도구지만 사실 치명적인 단점이 하나 있다. 처음 접하는 분에게는 사용법이 너무 어렵다는 점이다. 그런데 혼자 배우기에는 너무 어려워 도움이 될까 하는 마음에 도서를 구입하면 오히려 책은 너무 간단하여 실제 사용에 참고가 그다지 되지 않는다. 특히 업무 환경과는 너무 동떨어져 책으로는 가볍게 연습 한 번 정도만 가능한 것 같다. 이해하기 힘든 Git의 내부 원리를 설명하면서도 실제 상황에 맞게 Git의 기능을 사용하는 법을 알려주는 도서가 있으면 좋을 것 같은데, 어디 한 권 없을까?

이런 부분을 보완하여 실제 업무에 도움이 될 Git 도서를 만들었다. Git의 동작 원리를 챕터를 할애하여 자세히 설명하고, 파이썬으로 작성된 소스코드와 함께 기능을 배운다. 각 기능은 업무상에 벌어지는 일을 전제로 설명하고, 사용 중 충돌이 일어날 경우 해결 방법도 꼼꼼히 설명했다. 또한 이해를 돕기 위해 명령어를 사용할 때마다 현재 상황을 묘사하는 그림을 첨부하였다.

초반에는 실습 환경을 구축하고, 소스트리로 간단하게 Git을 체험한다. 그 뒤 Git의 개념을 확실히 잡도록 Git의 동작 원리에 관해 꼼꼼히 설명한다. 4장부터는 파이썬 프로그램을 개발하는 ‘개발자 A’의 개발 일지를 따라가며 그에 맞는 Git 명령어를 차근차근 익힌 뒤 Github와 관련된 기능으로 다른 개발자와 협업하는 방법을 배우고 발생하는 문제들을 해결한다. 마지막으로는 Git의 제일 중요한 기능인 브랜치를 생성, 병합, 재배치하는 등의 사용법과 구체적인 운영 전략을 소개한다.



1장 실습 환경 구축하기

1 Git / 소스트리 설치하기
1.1 Git for windows
1.2 소스트리
2 계산기 프로그램 개발 환경 구축하기
2.1 파이썬과 pip
2.2 PyQt5
2.3 VS Code
3 Github 가입하기
3.1 Github 계정 생성

2장 소스트리로 Git 체험하기

1 저장소 생성하기
1.1 원격저장소 생성하기
1.2 로컬저장소 생성하기
2 로컬저장소에서 이력 관리하기
2.1 파일 수정 내용 기록하기
2.2 새로운 파일 추가하고 기록하기
3 로컬저장소와 원격저장소의 내용 일치시키기
3.1 로컬저장소의 내용을 원격저장소로 업로드 : Push
3.2 원격저장소의 내용을 로컬저장소로 다운로드 : Pull
4 정리

3장 Git의 동작 개념

1. Git의 3가지 작업 영역
2. Git이 관리하는 3가지 파일 상태
3. 정리

4장 Git 기본 명령어

1 저장소 생성하기
1.1 빈 저장소 생성하기
1.2 사용자 정보 설정하기
1.3 정리
2 add와 commit : 개발 이력 기록하기
2.1 프로그램 작성하기
2.2 첫 번째 이력 저장하기
2.3 두 번째 이력 저장하기
2.4 세 번째 이력 저장하기
2.5 정리
3 status, log, 그리고 show : 저장소 상태와 커밋 내역 확인하기
3.1 git status
3.2 git log
3.3 git show
3.4 정리
4 diff : 파일의 수정 내용 비교하기
4.1 프로그램 수정하기
4.2 git diff로 파일의 수정된 내용 확인하기
4.3 git diff로 커밋 간의 내용 비교하기
4.4 정리
5 reset① : 스테이징 되돌리기
5.1 파일 추가하고 스테이징하기
5.2 git reset으로 파일 언스테이징하기
5.3 정리
6 amend : 최근에 작성한 커밋 수정하기
6.1 현재 상태 커밋하기
6.2 git commit -amend로 최근 커밋 수정하기
6.3 정리
7 checkout : 커밋 되돌리기
7.1 현재 저장소의 상태 확인하기
7.2 git checkout으로 커밋 되돌리기
7.3 최신 커밋으로 돌아가기
7.4 정리
8 reset② : 커밋 취소하기
8.1 현재 저장소의 상태 확인하기
8.2 git reset으로 커밋 취소하기
8.3 리셋으로 커밋이 삭제된 것일까?
8.4 --soft 옵션으로 git reset하기
8.5 정리
9 reflog : HEAD의 참조 이력 확인하기
9.1 git reflog로 참조 이력 확인하기
9.2 정리
10 HEAD와 master
10.1 브랜치
10.2 HEAD와 브랜치의 관계
10.3 checkout, reset 명령에 따른 HEAD의 이동
10.4 정리

5장 Github와 함께 사용하기

1 원격저장소 생성과 연동
1.1 원격저장소 생성하기
1.2 원격저장소 등록하기
1.3 업스트림 설정하기
1.4 정리
2 push와 pull① : 저장소로 업로드, 저장소에서 다운로드하기
2.1 로컬저장소의 파일 수정하기
2.2 수정 내용 커밋하기
2.3 git push로 로컬저장소의 내용 업로드하기
2.4 원격저장소의 파일 수정하기
2.5 git pull로 원격저장소의 내용 가져오기
2.6 정리
3 tag : 부가 정보 추가하기
3.1 저장소 확인하기
3.2 Lightweight 태그 작성하기
3.3 Annotated 태그 작성하기
3.4 태그 확인하기
3.5 태그로 체크아웃하기
3.6 태그 삭제하기
3.7 원격저장소에 태그 푸시하기
3.8 정리
4 revert : 푸시한 커밋 되돌리기
4.1 로컬저장소의 파일 수정하기
4.2 수정한 내용 커밋, 푸시하기
4.3 git revert로 커밋 되돌리기
4.4 되돌린 내용을 푸시하기
4.5 정리

6장 Github로 협업하기

1 clone : 원격저장소 복제하기
1.1 기존 로컬저장소 이름 수정하기
1.2 git clone으로 원격저장소 내용 복제하기
1.3 calculator_B 저장소 사용자 설정하기
1.4 정리
2 push와 pull② : 협업 환경에서 작업 내용 업데이트하기
2.1 개발자 A : ui.py 수정, 커밋, 푸시하기
2.2 개발자 B : ctrl.py 수정, 커밋, 푸시하기
2.3 개발자 A : 원격저장소의 내용을 가져와서 병합하기
2.4 정리
3 충돌 해결하기
3.1 개발자 B : ui.py 수정, 커밋, 푸시하기
3.2 개발자 A : ui.py 수정, 커밋, 푸시하기
3.3 개발자 A : git pull 그리고 충돌 해결하기
3.4 개발자 B : git pull로 원격저장소의 내용 병합하기
3.5 정리
4 fetch와 merge
4.1 개발자 B : ctrl.py 수정, 커밋 푸시하기
4.2 개발자 A : git fetch로 원격저장소의 정보 가져오기
4.3 개발자 A : git merge로 원격저장소의 내용 병합하기
4.4 개발자 A : ctrl.py 파일의 sum 함수 수정 후 커밋, 푸시하기
4.5 개발자 B : 원격저장소의 내용 풀하기
4.6 정리
5 blame : 코드의 수정 내역 확인하기
5.1 git blame으로 소스 코드 수정 내역 확인하기
5.2 정리
6 stash : 작업 내용 임시 저장하기
6.1 개발자 A : ui.py 수정, 커밋, 푸시하기
6.2 개발자 B : ctrl.py 수정하기
6.3 개발자 B : git stash로 작업 내용 임시 저장하기
6.4 git stash 살펴보기
6.5 개발자 B : 원격저장소의 내용 가져와서 확인하기
6.6 개발자 B : 임시 저장한 내용 가져오기
6.7 개발자 B : 작업을 마무리하고 커밋, 푸시하기
6.8 개발자 B : 저장 내용 삭제하기
6.9 개발자 A : 원격저장소의 내용을 저장하기
6.10 정리

7장 브랜치

1 git branch와 checkout : 브랜치 생성과 전환
1.1 git branch로 브랜치 생성, 삭제하기
1.2 git checkout으로 브랜치 전환하기
1.3 새 브랜치에서 작업하기
1.4 정리
2 merge : 브랜치 병합하기
2.1 작업 브랜치를 master로 전환하기
2.2 master 브랜치에 dev1 브랜치의 작업 내용 병합하기
2.3 정리
3 merge의 두 종류 : fast-forward와 3-way merge
3.1 fast-forward merge
3.2 3-way merge
3.3 정리
4 merge 옵션 : --ff, --no-ff, --squash
4.1 fast-forward merge
4.2 non fast-forward merge
4.3 squash merge
4.4 브랜치 정리하기
4.5 정리
5 rebase : 브랜치 재배치하기
5.1 issue1 브랜치 작업하기
5.2 issue2 브랜치 작업하기
5.3 git rebase로 브랜치 재배치하기
5.4 master 브랜치에서 병합하기
5.5 정리
6 cherry-pick : 다른 브랜치의 커밋 적용하기
6.1 dev1 브랜치 작업하기
6.2 dev2 브랜치 작업하기
6.3 dev2 브랜치 작업 : git cherry-pick으로 특정 커밋의 내용 가져오기
6.4 master 브랜치에서 dev2의 내용 병합하기
6.5 사용하지 않는 브랜치 삭제하기
6.6 정리
7 신규 브랜치 푸시하기
7.1 master 브랜치의 내용 푸시하기
7.2 light 브랜치 작업하기
7.3 light 브랜치의 작업 내용 푸시하기
7.4 정리
8장 브랜치 운영 전략
1 pull request
1.1 관리자용 원격저장소 생성하기
1.2 개발자 A : PC에 원격저장소의 내용 복제하기
1.3 개발자 A : feat1 브랜치에서 ui.py 수정, 커밋, 푸시하기
1.4 개발자 A : Github에서 풀 리퀘스트 생성하기
1.5 관리자 : Github에서 풀 리퀘스트 승인하기
1.6 개발자 A : 원격저장소에 병합된 내용 가져오기
2 Gitflow
2.1 Gitflow의 브랜치들
2.2 git-flow cheatsheet
2.3 정리

appendix
1 Git cheatsheet
2 커밋 메시지 컨벤션
3 gitignore



상세 이미지 1



* 주요 내용

1장 실습 환경 구축하기

Git을 배우기 전에 필요한 프로그램을 설치하여 환경울 구축하는 장입니다. Git for Windows, 소스트리와 같은 Git 프로그램을 설치하고 Github 계정을 만듭니다. 파이썬 프로그램에 필요한 환경도 함께 준비합니다.

2장 소스트리로 Git 체험하기
대표적인 GUI 프로그램인 소스트리(Source tree)를 이용하여 Git의 기본적인 기능을배워봅니다. 저장소 생성, 간단한 커밋, 저장소 간 내용 동기화 등 맨 처음 알아두면 좋을 기본적인 내용을 실었습니다.

3장 Git의 동작 원리
Git 저장소의 구성과 동작 개념을 설명합니다. Git은 분산 처리 구조로 만들어져 유연하면서도 성능이 우수한 형상 관리 프로그램이지만, 기존 중앙 집중식 형상 관리 도구에 비해 직관적이지 못하여 처음 배우는 사람들이 동작 원리를 이해하는 데 어려움을 겪곤 합니다. 3장에서 Git의 독특한 작업 영역과 파일 및 이력 관리 방식을 확실하게 이해할 수 있도록 동작 원리를 꼼꼼히 설명하였습니다..

4장 Git 기본 명령어
소규모의 프로젝트를 준비하듯 로컬 PC에 Git 저장소를 생성해서 Git 명령어 중에서도 자주 사용되고 필수적으로 알아야 하는 명령어들을 배우는 장입니다. 4장부터는 CLI 환경에서 명령어를 사용하는 방법도 소개합니다.

5장 Github와 함께 사용하기
로컬저장소와 Github를 연계하여 사용하는 방법을 소개합니다. Github 계정으로 원격저장소를 생성하고 지금까지 로컬 PC에서 작업했던 저장소와 연계한 뒤 작업 내용을 Github에 업로드하는 방법, 원격저장소의 내용을 로컬저장소로 다운로드하는 방법을 실습합니다. 이 과정에서 유용하게 사용할 수 있는 Git 명령어도 함께 소개합니다.

6장 Github로 협업하기
실무를 할 때와 비슷한 환경을 만들어 다수의 개발자가 원격저장소를 중심으로 협업하는 방법을 배웁니다. 그리고 협업하면서 발생하는 상황에서 요긴하게 사용될 수 있는 명령어와 팁들을 소개합니다.

7장 브랜치
브랜치의 생성, 관리, 조작 방법을 배워 소스코드 관리 능력을 한 단계 끌어올릴 수 있도록 구성한 장입니다. 브랜치의 특성을 이용하여 한 저장소 안에서 각각 브랜치를 만들어 동시에 서로 다른 작업을 하고, 두 브랜치의 내용을 병합하여 정리하는 방법을 배웁니다.

8장 브랜치 운영 전략
불완전한 코드의 병합을 방지하여 브랜치 품질을 유지하기 위한 풀 리퀘스트(pull request), 그리고 한 저장소안에서 다양한 용도의 브랜치를 효과적으로 운영할 수 있는 방법인 깃 플로우(gitflow) 등의 실무에서 자주 사용되는 브랜치 운영전략을 알아보는 장입니다.

* 작가의 말

소프트웨어 기술은 비약적인 발전을 거듭하고 있고, 우리 생활과 밀접하게 연관되어 있습니다. 구직 시장에서도 전공자, 비전공자를 가릴 것 없이 소프트웨어 스킬의 중요성이 커지고 있는 것 같습니다. 소프트웨어가 우리에게 다양하고 고도화된 서비스를 제공하기 시작하면서 규모가 커지고 복잡해지고 있습니다. 그만큼 체계적인 유지보수와 협업 기반 개발 프로세스의 중요성이 강조되고 있습니다.

Git은 소스 코드와 같은 파일들의 이력 관리를 돕는 버전 관리 시스템입니다. 속도가 빠르고 분산형 구조를 채택하여 대형 프로젝트에도 적합합니다. 그리고 여러 사람이 협업하고 공유할 수 있는 환경으로 확장이 쉬워 많은 사용자층을 보유하고 있습니다. 하지만 다른 버전 관리 도구에 비해 직관성이 떨어집니다. 입문자나 비전공자, 그리고 기존 중앙 집중형 관리 도구에 익숙한 분들이 개념을 이해하기 어려울 수 있습니다.

이 책은 위와 같은 어려움을 겪는 분들을 대상으로 만들어진 책입니다. Git의 동작 개념과 다양한 명령어를 한 번에 숙지하는 것은 여간 힘들고 지루한 일이 아닙니다. 저는 어떤 방법을 사용하면 입문자들이 Git의 동작 원리와 명령어들을 쉽게 익힐 수 있을지 고민해 왔습니다. 제가 고안한 방법은 작은 프로젝트를 진행해 가며, 그 과정 속에서 명령어를 실습하는 방식입니다. 실무 중에 발생할 수 있는 이슈를 예로 들고, 그 해결책으로 명령어를 제안하여 자연스럽게 익힐 수 있도록 구성했습니다. 이 책에서 여러분은 간단한 계산기 프로그램 개발 프로젝트를 진행합니다. 이 과정을 통해 개발 이력을 저장하는 방법, 원격 저장소와 연동하는 방법, 동료와 협업하는 방법, 그리고 브랜치를 운영하는 방법을 익히게 될 것입니다. Git을 처음 접한다면 환경 구축부터 실습까지 따라하며 진행하는 것을 추천드립니다.

이 책의 1, 2장에서는 실습 환경을 구축하고, GUI 기반 프로그램으로 Git 명령어를 가볍게 체험합니다. 3장에서는 Git의 작업 영역과 파일 이력 관리 개념에 대해서 설명합니다. 이후 챕터부터는 계산기 프로그램 개발 프로젝트를 진행해 가며 Git 사용법을 익히는 부분입니다. 4장은 로컬 저장소 환경에서 사용되는 명령어들을 소개합니다. 나아가 5, 6장에서는 로컬 저장소와 원격 저장소를 연동하고, 협업을 진행하는 방법을 설명합니다. 마지막으로 7, 8장은 브랜치의 개념을 소개하고 운영하는 방법을 실습합니다. 하나의 개발 프로젝트를 진행하면서 명령어 사용법을 시기적절하게 소개하여 개념을 쉽게 숙지할 수 있도록 구성했습니다.

이 책의 실습 코드는 챕터별로 구분하여 Github 저장소에 업로드 해두었습니다.
https://github.com/sguys99/practice-git-materials

마지막으로 원고 작성에 도움을 주신 한전 전력연구원 / 데이터사이언스 연구소, 삼성전기 설비개발연구소 동료들에게 감사드리며, 이 책을 선택한 여러분에게 감사의 마음을 전합니다.