예전과 지금의 개발 환경에서 가장 큰 차이점을 하나만 꼽으라고 하면, Git의 사용이라고 할 수 있다. 과거의 SVN 같은 도구에 비해, 코드 관리를 좀 더 확실하고 편하게 해 준다. 특히 대규모 개발에는 사실상 빼 놓을 수 없는 존재가 되었다. 이렇듯 Git은 참 좋은 도구지만 사실 치명적인 단점이 하나 있다. 처음 접하는 분에게는 사용법이 너무 어렵다는 점이다. 그런데 혼자 배우기에는 너무 어려워 도움이 될까 하는 마음에 도서를 구입하면 오히려 책은 너무 간단하여 실제 사용에 참고가 그다지 되지 않는다. 특히 업무 환경과는 너무 동떨어져 책으로는 가볍게 연습 한 번 정도만 가능한 것 같다. 이해하기 힘든 Git의 내부 원리를 설명하면서도 실제 상황에 맞게 Git의 기능을 사용하는 법을 알려주는 도서가 있으면 좋을 것 같은데, 어디 한 권 없을까?
이런 부분을 보완하여 실제 업무에 도움이 될 Git 도서를 만들었다. Git의 동작 원리를 챕터를 할애하여 자세히 설명하고, 파이썬으로 작성된 소스코드와 함께 기능을 배운다. 각 기능은 업무상에 벌어지는 일을 전제로 설명하고, 사용 중 충돌이 일어날 경우 해결 방법도 꼼꼼히 설명했다. 또한 이해를 돕기 위해 명령어를 사용할 때마다 현재 상황을 묘사하는 그림을 첨부하였다.
초반에는 실습 환경을 구축하고, 소스트리로 간단하게 Git을 체험한다. 그 뒤 Git의 개념을 확실히 잡도록 Git의 동작 원리에 관해 꼼꼼히 설명한다. 4장부터는 파이썬 프로그램을 개발하는 ‘개발자 A’의 개발 일지를 따라가며 그에 맞는 Git 명령어를 차근차근 익힌 뒤 Github와 관련된 기능으로 다른 개발자와 협업하는 방법을 배우고 발생하는 문제들을 해결한다. 마지막으로는 Git의 제일 중요한 기능인 브랜치를 생성, 병합, 재배치하는 등의 사용법과 구체적인 운영 전략을 소개한다.
Contents
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
Author
유광명
한국과학기술원(KAIST) 전기 및 전자공학 석사(2008), 한국전력 데이터사이언스연구소 차장(2010~2020), 삼성전기 설비기술연구소 수석연구원(2021~2022)으로 활동했다. 카이스트 전기 및 전자공학과에서 석사학위를 마쳤다. 졸업 후 한국전력에서 데이터분석가로, 삼성전기 설비개발연구소에서 수석연구원으로 근무하였다. 실패보다 아무것도 시도하지 않은 것을 후회할까봐 두려워 뒤늦게 스타트업 시장에 뛰어들었다. 현재 라이프로그와 머신러닝을 접목한 헬스케어 서비스 개발 업무를 담당하고 있다.
한국과학기술원(KAIST) 전기 및 전자공학 석사(2008), 한국전력 데이터사이언스연구소 차장(2010~2020), 삼성전기 설비기술연구소 수석연구원(2021~2022)으로 활동했다. 카이스트 전기 및 전자공학과에서 석사학위를 마쳤다. 졸업 후 한국전력에서 데이터분석가로, 삼성전기 설비개발연구소에서 수석연구원으로 근무하였다. 실패보다 아무것도 시도하지 않은 것을 후회할까봐 두려워 뒤늦게 스타트업 시장에 뛰어들었다. 현재 라이프로그와 머신러닝을 접목한 헬스케어 서비스 개발 업무를 담당하고 있다.