로컬 저장소 추가하기 = 이미 오프라인으로 생성해 둔 Local Repository를 Sourcetree에서도 볼 수 있도록 불러오는 것
새로 만들기... -> 로컬 저장소 추가하기 -> [iTshirt-cat] 폴더 열기
- GitHub Nickname, GitHub Repository Token 입력
- 생성 완료 -> 더블 클릭
- Side Bar의 히스토리를 선택하면 그림과 같이 Chap3.에서 만든 3개의 Commit 확인 가능
Visual Studio Code -> 열기... -> [iTshirt-cat] 폴더 열기
- 새 파일... -> 파일명 'tshirt-list.md'
- 다음과 같이 입력 후 저장
- 다음과 같이 새로운 파일 만들고 내용 입력 후 저장
상단의 '커밋' 클릭 -> 스테이지 뷰 나누기
- md 파일 왼쪽의 체크박스를 눌러서 Stage에 올리기 = git add feature-list.md
- 하단의 커밋 메시지 입력란에 내용 입력 후 커밋 = git commit -m "티셔츠, 기능 리스트 추가"
- 커밋에 성공하면 자동으로 히스토리 화면으로 이동
- 파일 상태 화면으로 이동하면 작업 공간에 더 이상 수정할 파일이 없기 때문에 그림과 같이 보인다.
- VSCode에서 파일을 수정하면 파일 상태 화면에 새로운 파일들이 보인다.
- 히스토리 화면에서 해당 커밋을 선택하면 하단에 파일 변경 사항 등 커밋의 상세 설명이 나온다.
Sourcetree Graph의 '변경2 추가' Commit에는 'origin/main' 꼬리표가 붙어있고, GitHub Repository라는 의미.
'설명 업데이트' Commit에는 'main' 꼬리표가 붙어있고, Local Repository라는 의미.
'origin/main'이 더 최신 Commit이니 GitHub Repository의 Commit이 한 단계 더 앞선다는 의미.
Commit 옆의 꼬리표는 Branch를 의미한다
- origin = GitHub Repository의 Nickname
git remote add origin https://github.com/ghkd1330/iTshirt.git
- 만약 git remote add myOrigin으로 입력했다면 GUI에서 myOrigin으로 보이는 것.
- origin branch는 Repository의 현재 Commit을 나타낸다.
- 따로 Branch를 생성하지 않으면 Git은 Master라는 기본 Branch에 Commit을 Push한다.
- Main Branch Checkout -> 푸시
-> Main 체크, 확인 = 현재 Branch인 Main의 모든 새로운 Commit을 GitHub Repository에 Push한다.(= git push origin main)
- Local Repository의 Main Branch와 GitHub Repository의 Origin/Main Branch가 모두 최신 Commit을 가리킨다.
Delta = 수정된 코드(차이점)만 저장하는 방식
Snapshot = 변경된 파일 전체를 저장하는 방식
SubVersion은 파일의 생성 기점으로부터 바뀐 점을 모두 반영하는 계산을 해야 되므로 오히려 더 느리다.
하지만 Snapshot을 저장하는 Git은 계산할 필요 없이 직전에 수정된 Commit과 비교하는 연산 한 번만 하면 된다.
또한 수정되지 않은 파일은 이전 파일의 Link만 저장하기 때문에 용량이 적고 계산이 필요 없다.
- Snapshot을 만드는 방식
1) 고양이1, 문어1 파일이 git init으로 Local Repostitory가 된다
2) 문어1 파일이 git add로 stage에 올라간다
3) Snapshot(git commit)으로 첫 번째 Commit으로 저장
4) 너구리1 파일 생성
5) 고양이1, 너구리1 파일이 git add로 stage에 올라간다
6) Snapshot(git commit)으로 두 번째 Commit으로 저장
7) 기존 파일을 수정하여 문어2, 너구리2 파일이 됨
8) 문어2, 너구리2 파일이 git add로 stage에 올라간다
9) Snapshot(git commit)으로 세 번째 Commit으로 저장- 핵심은 5)에서 고양이1, 너구리1 이렇게 두 파일만 git add했는데 문어1 파일도 같이 Snapshot(git commit)으로 하나의 Commit이 되었다는 것.
이번에는 Git이 파일을 어떻게 추적하고 Stage에 올리는 지 확인해보자.
- Project 폴더를 git init -> 'README.md', 'app.js' 파일 생성
- 두 파일 모두 한 번도 Commit하지 않았으니 (파일 상태)를 보면 추적 안됨(Untracked)이다.
- 두 파일 모두 Add하여 Stage에 올린다.
- 이때, (파일 상태)는 스테이지됨(Staged)
- Stage에 있는 파일 전체를 Commit하여 하나의 Snapshot으로 만들고 '프로젝트 초기화' Commit으로 저장.
- 이때, (파일 상태)는 수정 없음(Unmodified)
- Unmodified Status인 파일은 다시 다른 수정이 가능.
- '프로젝트 초기화' Commit을 Local Repository에서 GitHub Repository로 Push
- app.js 파일을 수정하여 (파일 상태)는 수정함(Modified)
- app.css 파일을 새로 생성하여 (파일 상태)는 추적 안됨(Untracked)
- 변경 사항이 없기 때문에 (파일 상태)가 Unmodified인 'README.md' 파일은 Add하여 Stage에 올릴 수 없다.
- 'app.js 수정본', 'app.css' 두 파일을 Add하여 Stage에 올린다, (파일 상태)는 Staged.
- 하지만 'README.md' 파일은 전에 Add를 해서 총 세 개의 파일이 Stage에 있다.
- Stage에 있는 파일 전체를 Commit하여 하나의 Snapshot으로 만들고 '스타일링' Commit으로 저장.
- '스타일링' Commit은 직전에 만든 '프로젝트 초기화' Commit에 연결되어 있다, 따라서 변경 사항이 뭔지 Git이 계산을 통해 알아낼 수 있다.
- 다시 모든 파일의 상태는 Unmodified
- '스타일링' Commit을 Local Repository에서 GitHub Repository로 Push
Git으로 관리하는 파일은 'Untracked / Unmodified, Modified, Staged'의 4가지 Status가 존재.