https://git-scm.com/book/ko/v2
목차
1. 시작하기
1.1 버전 관리(시스템)란?
- 무엇 : 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템
- 왜
- 각 파일/프로젝트 이전 상태로 rollback
- 시점 별 수정 내용 비교(누가 문제를 일으켰는지, 누가 언제 만들어낸 이슈인지)
- 파일 손상, 분실 복구
- 로컬 버전 관리
- 디렉토리로 파일 복사 -> 간단한 데이터베이스로 파일 변경 정보 관리 = 로컬 VCS
- RCS(Revision Control System) : Patch Set(파일에서 변경되는 부분) 관리.
- 중앙집중식 버전 관리(C-VCS) : 중앙 서버 연동
- CVS, Subversion, Perforce
- 파일 관리 서버 별도. 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout)
- 치명적인 결점
- 중앙 서버 문제 : 서버 다운 -> 협업/백업 불가.
- 중앙 하드디스크 문제 : 모든 히스토리 분실
- 분산 버전 관리 시스템(DVCS)
- Git, Mecurial, Bazaar, Darcs
- Clone = 모든 데이터 백업
- 저장소 + 히스토리(마지막 스냅샷만 Checkout X, 복제물 백업 가능, 진정한 백업)
- 클라이언트로 서버 복원 가능
- 리모트 저장소 존재
- 다양한 그룹과 다양한 방법으로 협업(계층 모델...)
1.2 Git 역사 : Linux 커널
- 1991–2002 : Patch와 단순 압축 파일로 관리
- 2002 ~ 2005 : BitKeeper라고 불리는 상용 DVCS를 사용
- BitKeeper 유료화 -> Linux 개발 커뮤니티(특히 Linux 창시자 Linus Torvalds)가 자체 도구 개발
- 빠른 속도단순한 구조/비선형적인 개발(수천 개의 동시 다발적인 브랜치)/완벽한 분산/대형 프로젝트 핸들링(속도, 데이터 크기 면)
- 2005 ~ : git 탄생
1.3 Git 기초
- Subversion이나 Perforce 같은 다른 VCS를 사용하던 경험을 버려야 한다.
- 미묘하게 다름(정보를 취급하는 방식)
- 차이점을 이해하기 -> 쉬워짐
- diff X, Snapshot O(데이터를 다루는 방법)
- Subversion과 차이점 : 스냅샷 저장관리
- VCS 시스템 관리정보 = 파일목록
- CVS : 파일 변화를 시간순 관리 (= 델타 기반 버전관리 시스템)
- Git : 데이터 = 스냅샷의 스트림(연속, 매우작은 크기).
- Commit , 저장기준 : 파일의 존재 순간이 중요
- 파일이 바뀌지 않으면 새로 저장하지 않는다. 이전 상태의 대한 링크만 저장
- Subversion과 차이점 : 스냅샷 저장관리
- 거의 모든 명령을 로컬에서 실행
- 대부분 로컬 파일과 데이터만 사용(다른 컴퓨터는 불필요)
- 프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 -> 빠르다.
- CVCS : 네트워크의 속도에 영향
- 프로젝트의 히스토리 조회 : 서버 없이 조회
- ex) 한 달 전의 상태 : 로컬에서 찾는다. 리모트 서버에서 예전 버전을 가져올 필요가 없다.
- 오프라인 상태/VPN에 연결하지 못해도 가능
- 네트워크에 접속하고 있지 않아도 커밋(로컬 저장소)
- 대부분 로컬 파일과 데이터만 사용(다른 컴퓨터는 불필요)
- Git의 무결성
- Git은 데이터 저장 전 항상 checksum을 생성, 그 checksum으로 데이터 관리.
- Git = checksum 해석도구, 파일을 해당 파일의 해시로 저장(이름으로 저장 X)
- 체크섬
- Git의 (Atomic) 데이터 단위, 기본 철학이다.
- Git은 파일의 내용이나 디렉토리 구조를 이용 SHA-1 해시를 사용하여 체크섬 생성
- 체크섬은 40자 길이의 16진수 문자열이다.
- SHA-1 ex)24b9da6552252987aa493b52f8696cd6d3b00373
- git이 해석을 해줘야 commit등 작업이 된다.
- Git은 데이터 저장 전 항상 checksum을 생성, 그 checksum으로 데이터 관리.
- Git은 데이터를 추가할 뿐
- Git으로 무얼 하든 Git 데이터베이스에 데이터가 추가 된다. 되돌리거나 데이터를 삭제할 방법이 없다.
- Git도 커밋하지 않으면 변경사항을 잃어버릴 수 있다.
- Git을 사용하면 프로젝트가 심각하게 망가질 걱정 없이 매우 즐겁게 여러 가지 실험을 해 볼 수 있다.
- 되돌리기 : 을 보면 Git에서 데이터를 어떻게 저장하고 손실을 어떻게 복구하는지 알 수 있다.
- 세 가지 상태
- Git "파일 상태" 관리 : Committed, Modified, Staged
- Committed : 데이터가 로컬 데이터베이스에 안전하게 저장됐다
- Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것.
- Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태
- git 프로젝트 단계와 연계해서 이해
- Git "프로젝트 세 가지 단계"
- Git 디렉토리 : Git의 핵심
- 프로젝트의 "메타데이터, 객체 데이터베이스"를 저장하는 곳
- 다른 컴퓨터에 있는 저장소를 Clone 할 때 Git 디렉토리 생성
- 지금 작업하는 디스크에 존재
- 워킹 트리 : 프로젝트의 "특정 버전"을 Checkout 한 것
- Git 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 워킹 트리를 만든다.
- Staging Area : 단순한 파일이고 곧 커밋할 "파일에 대한 정보"를 저장한다.
- Git 디렉토리에 있다.
- Git에서는 기술용어로는 “Index” 라고 함
- Git 디렉토리 : Git의 핵심
- Git에서 하는 일
- 1. 워킹 트리에서 파일을 수정.
- 2. Staging Area에 파일을 Stage 해서 커밋할 스냅샷을 만든다. 모든 파일을 추가할 수도 있고 선택하여 추가할 수도 있다.
- 3. Staging Area에 있는 파일들을 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장한다.
- Git 디렉토리에 있는 파일들은 Committed 상태이다. 파일을 수정하고 Staging Area에 추가했다면 Staged이다. 그리고 Checkout 하고 나서 수정했지만, 아직 Staging Area에 추가하지 않았으면 Modified이다.
- Git "파일 상태" 관리 : Committed, Modified, Staged
1.4 CLI
- CLI/ GUI 모두 사용 가능 하지만, Git의 모든 기능을 지원하는 것은 CLI 뿐
- GUI 프로그램의 대부분은 Git 기능 중 일부만 구현
1.5 Git 설치 - Linux, Mac, Window or SourceCode -> Self Compile
1.6 Git 최초 설정 : Git의 사용 환경 설정. 한 컴퓨터에서 한 번만 하면 됨
- 설정한 내용은 Git을 업그레이드해도 유지
- 'git config’라는 도구 사용 : 설정 내용 확인/변경(git 동작 설정)
- 사용하는 설정 파일 세 가지
- /etc/gitconfig 파일
- 시스템의 모든 사용자와 모든 저장소에 적용
- . git config --system 옵션으로 이 파일을 읽고 쓸 수 있다. (수정하려면 관리자 권한 필요)
- ~/.gitconfig, ~/.config/git/config 파일
- 특정 사용자(즉 현재 사용자)에게만 적용되는 설정
- git config --global 옵션으로 이 파일을 읽고 쓸 수 있다.
- 특정 사용자의 모든 저장소 설정에 적용.
- .git/config
- 이 파일은 Git 디렉토리에 있고 특정 저장소(혹은 현재 작업 중인 프로젝트)에만 적용된다.
- --local 옵션을 사용하면 이 파일을 사용하도록 지정(default값)
- 이 옵션을 적용하려면 Git 저장소인 디렉토리로 이동 한 후 적용
- 설정 우선순위 .git/config > ~/.gitconfig, ~/.config/git/config > /etc/gitconfig
- /etc/gitconfig 파일
- 사용자 정보 : 사용자이름, 이메일 주소 설정
- Git 설치하고 나서 가장 먼저 해야 하는 것
- Git은 커밋할 때마다 이 정보를 사용
- 커밋 후 정보 변경 불가
- 편집기
- Git에서 사용할 텍스트 편집기를 고른다.
- default : 시스템의 기본 편집기
- Git은 같은 키를 여러 파일(/etc/gitconfig 와 ~/.gitconfig 같은)에서 읽기 때문에 같은 키가 여러 개 있을 수도 있다. 그러면 나중 값을 사용한다.
1.7 도움말 보기 : $ git help <verb> or $ man git-<verb>
========================================
8. Git 맞춤
- Git 설정
- Git Attributes
- Git Hooks
- 정책 구현하기
9. Git and other VCS
- Git: 범용 Client
- Git으로 옮기기
10. Git의 내부
- Plumbing 명령과 Porcelain 명령
- Git 개체
- Git Refs
- Packfile
- Refspec
- 데이터 전송 프로토콜
- 운영 및 데이터 복구
- 환경변수
'ToolChain > VCS - git,github' 카테고리의 다른 글
git - 2 Git의 기초(핵심) (0) | 2022.12.17 |
---|---|
Github 적응하기 (0) | 2022.11.27 |