참고 - Pro Git
Git - Book
git-scm.com
버전 관리란?
- VCS (Version Control System) : 버전 관리 시스템
VCS를 사용하면
각 파일을 이전 상태로 되돌릴 수 있고,
프로젝트를 통째로 이전 상태로 되돌릴 수 있고,
시간에 따라 수정 내용을 비교해 볼 수 있고,
누가 문제를 일으켰는지 추적할 수 있고,
누가 언제 만들어낸 이슈 인지도 알 수 있다.
파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있다.
1. 로컬 버전 관리
2. 중앙 집중식 버전 관리 (CVCS)
파일을 관리하는 서버가 별도로 있고, 클라이언트가 중앙 서버에서 파일을 받아서 사용(Checkout) 한다.
- 장점
- 관리자는 누가 무엇을 할지 꼼꼼하게 관리할 수 있다.
- 모든 클라이언트의 로컬 데이터베이스를 관리하는 것보다 VCS 하나를 관리하기가 훨씬 쉽다.
- 단점
- 서버에 문제가 생기면 그동안 아무도 다른 사람과 협업할 수 없고, 다른 사람들이 하는 일을 백업할 방법도 없다.
- 중앙 데이터베이스가 있는 하드디스크에 문제가 생기면 프로젝트의 모든 히스토리를 잃는다.
3. 분산 버전 관리 시스템
DVCS에서의 클라이언트는 단순히 파일의 마지막 스냅샷을 checkout 하지 않는다.
그냥 저장소를 히스토리와 더불어 전부 복제한다.
서버에 문제가 생기면 이 복제물로 다시 작업을 시작할 수 있다.
클라이언트 중에서 아무거나 골라도 서버를 복원할 수 있다. Clone은 모든 데이터를 가진 진정한 백업이다.
Git 기초
Git 을 배우려면 Subversion 이나 Preforce 같은 다른 VCS를 사용하던 경험을 버려야한다. 사용자 인터페이스는 매우 비슷하지만, 정보를 취급하는 방식이 다르다. 이러한 차이점을 이해해야 한다.
Git 은 데이터를 스냅샷의 스트립처럼 취급한다.
커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다. 파일이 달라지지 않았으면 Git 은 성능을 위해서 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다.
Git 은 강력한 도구를 지원하는 작은 파일 시스템이다.
거의 모든 명령을 로컬에서 실행
프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 모든 명령이 순식간에 실행된다.
즉, 오프라인 상태거나 VPN에 연결하지 못해도 막힘 없이 일 할 수 있다.
Git 의 무결성
Git 은 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리한다. 실제로 Git은 파일을 이름으로 저장하지 않고 해당 파일의 해시로 저장한다.
Git 은 데이터를 추가할 뿐
Git 으로 무얼 하든 Git 데이터베이스에 데이터가 추가된다. 되돌리거나 삭제할 방법이 없다. 일단 스냅샷을 커밋하고 나면 데이터를 잃어버리기가 어렵다.
세 가지 상태
Git 은 파일을 다음 세 가지 상태로 관리한다.
- Committed : 데이터가 로컬 데이터베이스게 안전하게 저장됐다는 것을 의미한다.
- Modified : 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말한다.
- Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다.
Git 으로 하는 일은 기본적으로 아래와 같다.
- 워킹 트리에서 파일을 수정한다.
- Staging Area 에서 파일을 Stage 해서 커밋할 스냅샷을 만든다. 모든 파일을 추가할 수도 있고, 선택하여 추가할 수도 있다.
- Staging Area 에 있는 파일들을 커밋해서 Git 디렉토리에 영구적이 스냅샷으로 저장한다.
Git 디렉토리에 있는 파일들은 Committed 상태이다. 파일을 수정하고 Staging Area 에 추가했다면 Staged 이다. 그리고 Chechout 하고 나서 수정했지만, 아직 Staging Area 에 추가하지 않았으면 Modified 이다.
Git 최초 설정
'git config' 라는 도구로 설정 내용을 확인하고 변경할 수 있다. 각 설정은 역순으로 우선시 된다.
- /etc/gitconfig
- ~/.gitconfig, ~/.config/fig/config
- .git/config