리누스 토발츠가 Linux 개발 중 파일의 버전관리 시스템을 위해 개발(범용적)
- 버전관리 ( 변경사항 관리)
- 백업
- 협업
Git 은 CLI로 기본 동작, GUI로도 동작 가능
.git ( repository )는 저장소
working directory는 USER가 파일을 작성하는 공간파일의 저장 공간 이동
ADD : workng directory -> stage area
COMMIT : workng directory -> stage areacommit ID : Repository에 저장되는 정보를 기반으로 ID가 생성됨
단, V1 V2등 분산 버전 관리 시스템이므로 버전마다 Commit id가 다름.
main에 적혀있는 이전 버전의 commit id를 보고
parent 에 저장 하고 이 정보를 합쳐 commit id 생성
저장소를 만들면 가장먼저 head생기고 main을 가리킨다.
이때, 새로운 버전을 만들면 commit id가 생성되는데 이를 main에 기록한다.
기존에 버전 a만 있다고 가정하자, 새로운 버전 b가 생성 되면 main은 새로운 버전 b 를
가리키고 b 는 이전 버전인 a 를 가리킨다. 버전끼리는 이전 버전을 가리키고
main은 마지막으로 생성된 버전 을 가리킨다.
head는 현재시간, main은 마지막 시간 이라고 하면
working directory의 시간을 마음대로 움직일수 있다.
head 를 이전버전으로 돌리면 이전의 working directory로 변환된다.
이때, check out(명령어)를 사용해 변환한다.
이와 반대되는, checkout branch(명령어)는 현재(가장 마지막)로 돌아오는 명령이다.
과거로 갈때는 checkout 현재로 돌아올때는 checkout branch
- 2-way merge : 제일 끝단의 2개만 비교 같으면 O 다르면 직접수정필요(병합멈춤,충돌)
- 3-way merge : 제일 끝단의 공통된 부모를 찾음 base(공통된 부모)와 양 끝단을 비교
서로 같으면 O 한쪽만 다르면 수정된 내용으로 작성 둘다 바뀌면 직접수정(병합 멈춤)
push(업로드): github.com 에서 새로운 Repository를 만들고 난 후,
Local에서 저장된 파일들과 버전을 연동된 Repository에 업로드하게 된다.
Pull(다운로드) : fetch + merge 의 기능으로 연동된 github.com의 Repository에 저장되어 있던 파일들과 버전을 Local로 끌어당겨오는 역할을 한다.
Fetch(다운로드) :원격 저장소의 최신 변경내용을 Local로 가져오는 명령어로, Local 브랜치를 업데이트하지 않고 원격 변경 내용을 확인할 수 있다.
Merge(병합) : 가져온 변경 내용을 현재 작업 중인 브랜치에 병합하는 명령어이다.
Clone(복제) 원격 저장소의 내용을 복제하여 로컬에 새로운 Git 프로젝트를 생성하는 명령어이다.
Git은 기본동작이 CLI로 동작하는것을 알고 있어서 사용하기 힘들겠다고 생각했는데, 분산버전관리시스템 에서 매력을 느꼈다.
프로젝트를 진행하다보면 ~최종.txt , ~진짜최종.txt로 길어지는데 이를 해결할 수 있을것 같다.
이번 Git 학습은 생활코딩(이고잉)님의 강의를 듣고 학습을 진행했는데 강의를 정리해두신 링크를 따로 주셔서 GUI에서 이해한 내용을 바탕으로 CLI 활용도 학습해보겠다.
링크 : https://seomal.com/map/1/27