git 다운로드
- 홈페이지에서 window버전으로 다운
- 모든 설정값 디폴트로 다운
github 가입
- github 홈페이지에서 회원가입하기
- user name은 포트폴리오나 이력서에 코드공유중에 자주 노출이 되기 떄문에 신중히 설정
github 설정
- git bush를 관리자권한으로 실행(마우스 오른쪽 클릭)
- global username & email

git 기본용어
Repository
- 소스코드가 저장되어 있는 여러개의 Branch가 모여있는 디스크상의 물리적 공간
- Local Repository 와 Remote Repository 로 구분
Checkout
- 특정 시점이나 Branch 의 소스코드로 이동하는 것을 의미
- Checkout 대상 - Branch, Commit, Tag
- Checkout 을 통해 과거 여러 시점의 코드로 이동이 가능
Stage
- 작업할 내용이 올라가는 임시저장영역
- 이 영역을 이용하여 작업한 내용중 commit에 반영할 파일만 선별하여 commit을 수행할 수 있음
Commit
- 작업할 내용을 Local Repository에 저장하는 과정
- 각각의 commit은 의미있는 변경단위이고, 변경에 대한 설명을 commit log 로 남김
- 권장 - commit을 아끼지 마세요. (게임의 save라고 생각)
- 참고 - commit 단위나 commit log format 을 정해놓은 회사나 팀도 있음
Tag
- 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
- Tag가 붙은 commit 은 commit id(version) 대신 tag name으로 쉽게 checkout가능
Push
- Local Repository 의 내용 중, Remote Repository 에 반영되지 않은 commit을 Remote Repository로 보내는 과정
- 권장 - Push하는 순간 다른 개발자들도 영향을 받음. 검증 죄지 않은 코드는 Push하지 않도록 한다.
Pull
- Remote Repository 에 있는 내용 중, Local Repository 에 반영되지 않은 내용을 가져와 Local Repository에 저장하는 과정
- 다른 팀원이 변경하고 Push한 내용을 Local Repository에 가져올 수 있음
- 참고 - Push 과정에서 Conflict(충돌) 이 일어나서 Push가 거절된 경우, Pull을 통해 Remote Repository의 변경 내용을 Local Repository에 반영하여 Conflict를 해결 한 뒤 다시 Push를 시도해야 함.
Branch
- 특정 시점(commit단위) 에서 분기하여 새로운 commit을 쌓을 수 있는 가지를 만드는 것
- 개발의 주축이 되는 branch를 master branch(혹은 main branch)라고 함
- 모든 branch는 최종적으로 다시 master branch에 merge(병합) 되는 형식으로 진행 됨
Mergr
- Branch의 반대개념으로 하나의 Branch를 다른 Branch와 합치는 과정
- Merge되는 두 Branch는 주종관계가 성립. 예=dev branch를 main branch 에merge
- Merge되는 과정에서 Conflit(충돌) 이 발생하는 경우 Diff 를 수정하여 Conflict를 해결한 뒤 Merge를 진행 할 수 있음
1. Local Repository, Remote Repository
1) 구성
- Git이 관리하는 3가지 단계로 구성되어 있다.
- Working Directory(작업공간) : 실제 PC에서 보는 소스파일들
- Index(Stage) : Staging area(준비영역)의 역할, git add한 파일들이 존재, git에서 관리하는 파일
- HEAD : 최종 확정본, git commit한 파일들 존재

2) 생성
2-1) Workspace 생성
- 강의 내용을 진행하기 위한 파일을 생성(접근하기 쉬운 경로)

2-2) Working Directory생성
Workspace로 이동한 뒤 Workig Directory생성
- master branch 생성 (가장 최초로 생성한 것이라서 master)

- Index(Stage)에 반영

- HEAD에 반영

2-3) Remote Repository 등록
- 등록 이전에 Github에서 Repository 생성을 해야 한다.
- token도 발행받아서 꼭 다른곳에 복사해 놓자, 자주 사용하지만 다시 확인 할 수 없기 때문
등록
2-4) Remote Repository에 변경내용 Push
- origin이라는 Remote Repository에 변경값 Push
- git push origin < branchname >(master or main)
2-5) Remote Repositort에서의 변경내용 Pull
- Pull하기 전 Remote에서 변경사항을 만들어야 하기 때문에 새로운 파일을 생성하고 나서 pull을 해야 한다.(Pull 실습을 하기 위해서 환경을 만드는 것 뿐)
- 변경이 되었다면
-origin이라는 Remote에서의 변경사항을 master로 pull
3. Remote Repository
3-1) Remote Repository 생성
3-2) Default Branch(master or main)
-
git 은 master이나 github에서는 몇년 전부터 main을 사용
-
헷갈리니까 이름을 수정해서 사용해도 되지만 이미 다른 팀원들이 main으로 사용했다면 중간에 이름을 바꾸는것이 더 혼동을 줄 수도 있다.
-
기본 default branch이름을 바꾸려면
프로필 클릭 -> setting -> repositoties 에서 main을 master로 변경
3-3) Remote Repository 복사하기
username과 token을 넣어주면 이후에 더이상 token을 입력하지 않아도 된다.

- 복사해올 workspace에서 명령어 입력을 해야 한다.
4. Branch
4-1) Branch 조회
git branch
git branch -r
git branch -a
4-2) Branch 생성
git branch branch01
4-3) Branch 이동
git checkout branch01
4-4) Branch 생성 + 이동
git checkout -b <branchname>
4-5) Remote Repository에 branch push
git push origin <branchname>
4-6) Branch 삭제
git branch -d <branchname>
- 로컬에서 만든 branch 삭제
- 삭제할 branch에 위치해 있으면 안된다.
- 삭제할 branch에 위치해 있다면 다른 branch로 이동하고 삭제
- branch 이동 : git checkout < branchname >

git push origin --delete <branchname>
- Remote의 branch 삭제

5. Log and Diff
- 실습 하기 전에 vscode에서 git graph를 다운 받아 놓자
5-1) 실습환경 만들기
- Remote Repository 생성
이름 : log_project
Add a README file 체크
git_ws% git clone http......username:token@.....git
5-2) Git Log
git log
- 실습
- main branch의 log


- 밑에서부터 시간순서이다.
- 실습2


5-3) Git Editor
- Git 설치할 때 Vim을 기본 Editor로 설정 했었다. 실습은 vscode로 하기 떄문에
기본 에디터를 vscode로 변경
Git Configuration 파일 열기
Git Diff 설정 추가
- Git Diff Tool을 vscode로 하겠다 라는 명령어

본격적으로 Git Diff사용
Git Diff - Local Branch 간 비교
Git Diff - Commit간 비교

- 실습1.
먼저, commit Hashcode를 알아야 한다. 보는 법은 git log

- 비교하고 싶은 두개의 commithashcode를 복사

Git Diff - 마지막 Commit 과 이전 Commit 비교
git diff HEAD HEAD^
- 실습1

Git Diff - 마지막 Commit 과 현재 수정사항 확인
git diff HEAD
- 실습. commit하지 않고 현재 hello.py 수정

Git Diff - Local and Remote 간 비교
git diff <branch> origin/<branch2>