-
210421 - TILTIL/2021 2021. 4. 22. 01:48
Git
Git에 대해서 제대로(?) 공부하기로 했으니 git 공부를 시작했다.
Git의 사용목적
1.Version
- 버전 관리가 쉬워진다. 변화점을 한눈에 볼 수 있다.
- 여러 개의 파일을 관리할 수 있다.
- 쉽게 이전 작업으로 돌아갈 수 있다.
2. Backup
- 언제 나의 컴퓨터가 망가질지 모른다.
- Github에서 Remote repository를 생성한다. <-> Local repository와 반대되는 개념
- Push를 하면 remote rep에 저장이 된다.
- Pull 하면 Local으로 가져온다.
3. Collaboration
- 위의 push, pull을 하면 협업을 할 수 있게 된다.
- 만약 같은 것을 수정하면 어떻게 될까???
- 이때 git이 처리를 잘할 수 있도록 도와준다.
SourceTree 이용하여 git 사용하기로 하자.
- 나중에 CLI를 이용하여 git을 사용하는 것을 공부해보자.
- Git Staging
- working dir - 작업 중인 dir
- working copy - 작업 중인 file
- git dir - .git을 말한다,
- stagingArea, index, cache - 커밋 대기 상태
Reset과 Revert
- Reset commit
- 나중에 협업할 때 이미 올라간 버전은 reset하지 말자!
- 사용법은 내가 작업하고 working copy를 날릴 때 사용하자.
- commit이 원하는 시점으로 리셋된다.
- Hard로 하면 다 돌아간다. -mixed, soft는 안 날아간다네??
- Revert
- reverse commit = revert commit
- reverse처럼 작업한 것을 없애지만 무엇을 바꿨다가 다시 되돌렸는지 알 수 있다.
- 주의점은 여러 단계의 버전으로 revert 하고 싶다면 한 단계씩 넘어가야 한다. 한 번에 껑충 넘어가면 conflict 발생
- 과거 상태로 돌아가고 싶다면 더블클릭을 하면 된다
- 각 commit은 Id가 있다. (SHA-1)이라고 한다
- tag를 이용하면 더 쉽게 할 수 있다.
- 비교하고 싶을 때 open current version, open selected version을 하면 된다.
- Diff Tool
- 설정 - Diff에서 설정해줄 수 있다.
- 차이점을 비교해주는 외부 프로그램을 사용할 수 도 있다. ex) KDiff3
Backup
- 정보를 .git에 저장한다.
- git hosting - local repo를 remote repo에 업로드해주도록 도와주는 서비스 (아주 유명한 GitHub가 있다.)
- Local Repository - 작업하는 나의 저장소
- Remote Repository - 백업을 해 놓을 원격 저장소
- Local -> Push -> Remote
- Remote -> Clone -> Local2
- Local -> Push -> Remote
- Remote -> Pull -> Local
Local -> Remote 정보 전달 방식
- HTTP, SSH 전달 방법이 있다.
- HTTP는 보안이 살짝 부족하다. 하지만 사용이 쉽다.
- SSH는 보안이 좋다. 하지만 사용을 위해 지식이 필요
Remote -> Local 정보 전달 방식
Local Remote 연결 (backup)
repository -> Add Remote -> Http 주소 연결 후 이름은 기본적으로 origin으로 한다.
Push로 remote에 올리는데 여기서 track에 대한 이해는 brach를 공부하고 공부하도록 하자.
복원하기
- 일단 저장소의 주소를 가져오자.
- Clone으로 Remotr -> Local을 만들자.
- 복사한 주소를 입력하고 저장 위치를 선택하면 끝!
GitHub의 기능들
- Issues Tracker
- 공부를 해보자
Collaboration(협업)
head - 동그라미가 있는 부분 - 현재의 상태
checkout - head를 옮기는 행위
Branch
- 기본은 master branch
- 새로운 brach를 생성하자.
- 이름 옆에 동그라미는 현재 brach를 나타낸다.
- 보는 방법을 AllBraches로 해주자.
- brach를 옮기면 해당 work copy로 간다.
- delete하고 force delete하면 삭제된다.
Conflict
- 같은 파일에 서로 다른 부분을 수정하면 하나로 ‘알아서’ 합쳐준다.
- 근데 같은 파일에 서로 같은 부분을 수정하면??
- '알아서' 어떤 걸로 합쳐야 할지 몰라 Conflict가 발생한다.
- 직접 이 conflict를 해결해야 한다.
Merge
- Branch를 나눴던 것을 합치는 것
- base - 합치려고 하는 두 버전의 공통조상
- merge commit
- 다른 부분을 수정하면 손쉽게 merge가 가능하다.
- 같은 부분을 수정하면 conflict가 발생한다.
- <<<<< HEAD
- ========= - 구분자를 기준으로
- >>>>> opentutorials
- 위아래가 같은 부분을 수정했다. 나는 못 정하니까 네가 둘 중에 선택해줘
- using Mine. using Theirs를 사용하거나 직접 수정을 하고 Mark Resloved 하면 된다.
3 Way Merge
- 2개의 brach를 병합하면 2-way merge
- 3개를 병합하는데 base와 2개의 branch를 병합, 그리고 변화한 것들을 알아서 합쳐준다. 3-way
외부 도구를 사용하여 merge
- P4Merge라는 도구
- preference로 들어가서 diff와 merge를 p4merge로 바꿔준다.
- 들어가면 local base remote 이렇게 보이고 원하는 대로 바꾸고 저장하면 된다.
- 백업 파일이 추가되는데 지워도 된다.
공부할 것
- git workflow
- git flow - 모범사례를 살펴볼 수 있다. git flow라는 프로그램도 있다.
- Cherry pick
- 원하는 버전을 병합하는 방법
- rebase
- TimeLine을 깔끔하게 할 수 있다.
- base를 옮기는 거처럼 생각하면 된다.
Head, Branch, Commit 관계
- .git에 head파일이 있다. -> master branch를 기본적으로 가리킨다.
- master -> 버전을 가리킨다.
- 커밋하면 -> master가 다음 버전을 가리킨다.
- 한마디로 head -> master -> version의 흐름
- 여기서 새로운 branch를 생성하면 head -> master -> version 확인 그 version을 새 branch가 가리킨다.
- checkout을 하면 head -> brach -> version 으로 된다.
- checkout은 기본적으로 head를 바꾸는 거
- Head가 commit을 가리킬 수도 있는데 이를 detached라고 한다.
Checkout vs Reset
- Reset과 checkout의 차이는??
- Reset은 head를 바꾸는 게 아니라 branch를 바꾼다. 이전 버전을 가리키게 되면서 최근 버전은 사라져 버리게 된다.
728x90'TIL > 2021' 카테고리의 다른 글
210425 - TIL (0) 2021.04.26 210422 - TIL (0) 2021.04.23 210419 - TIL (0) 2021.04.20 210416 - TIL (0) 2021.04.16 3월 1주차 회고 (0) 2021.03.08