Git 사용법
- 작성자
- 고친과정
2017년 6월 5일 : 처음씀
1.1. 개요
Git는 "분산형 버젼관리 시스템(DVCS: Distributed Version Control System)" 입니다.
Git 를 처음 접하지만 기존의 Subversion이나 CVS등의 사용에 익숙한 사용자라면 기존의 버젼관리 시스템하고 아예 비교하려고 하지 말고 새로운 방식이라고 받아들이고 학습하는게 좋습니다.
Git는 Client 가 변경시점의 마지막 Snapshot을 Checkout하는 형태가 아니고 그냥 저장소(Repository)를 전부 Client로 복제하여 서버에 문제가 생기는 경우도 큰 문제 없이 Client 중에서 아무거나 골라서 서버를 복원할 수 있는 매우 강력한 백업체계를 동시에 가지고 있습니다.
즉, 특정 서버에 집중된 형태의 저장소(Repository)를 가지고 있는 "중앙집중식 버젼관리 시스템(CVCS: Centralized Version Control System)"이 아닌 Client 마다 완전히 복제된 저장소(Repository)를 유지하는 특징이 있습니다.
Git 는 다음과 같은 목표하에 존속되는 버젼관리 시스템이라고 할 수 있습니다.
Git 를 처음 접하지만 기존의 Subversion이나 CVS등의 사용에 익숙한 사용자라면 기존의 버젼관리 시스템하고 아예 비교하려고 하지 말고 새로운 방식이라고 받아들이고 학습하는게 좋습니다.
Git는 Client 가 변경시점의 마지막 Snapshot을 Checkout하는 형태가 아니고 그냥 저장소(Repository)를 전부 Client로 복제하여 서버에 문제가 생기는 경우도 큰 문제 없이 Client 중에서 아무거나 골라서 서버를 복원할 수 있는 매우 강력한 백업체계를 동시에 가지고 있습니다.
즉, 특정 서버에 집중된 형태의 저장소(Repository)를 가지고 있는 "중앙집중식 버젼관리 시스템(CVCS: Centralized Version Control System)"이 아닌 Client 마다 완전히 복제된 저장소(Repository)를 유지하는 특징이 있습니다.
Git 는 다음과 같은 목표하에 존속되는 버젼관리 시스템이라고 할 수 있습니다.
- 빠른 속도 (각 저장소의 완전한 복제본이 각 Client에 존재하므로 거의 모든 명령이 Local 에서 다루어지는 특징)
- 단순한 구조
- 비-선형적인 개발을 도모 (수많은 Branch를 동시에 진행할 수 있도록)
- 완벽한 분산
- 큰 규모의 프로젝트에 용량이나 속도면에서 유용
이 문서는 Git의 기본적인 사항을 간단히 정리하는 정도이며 좀더 세부적인 사항은 "ProGit(번역본).pdf (4.41 MB)" 문서를 보실 것을 추천드립니다.
1.2. Git 의 초기설정
Git가 설치되면 가장먼저 사용환경에 필요한 설정값을 설정해주어야 합니다. 이 설정값은 "git config"라는 명령으로 설정할 수 있으며 다음과 같은 명령을 통해서 설정해주면 됩니다.
- 사용자 이름 설정
# git config --global user.name "<사용자 이름>"
- 사용자 E-Mail 설정
# git config --global user.email "<사용자 E-Mail 주소>"
- 편집기 설정 (vim 을 기본 편집기로 설정하는 예)
# git config --global core.editor vim
- diff 도구 설정 (vimdiff 를 diff 도구로 설정하는 예)
# git config --global merge.tool vimdiff
- git 에서 매번 로그인 계정 암호입력 하지 않도록 설정 (주의: 공유 PC 등에서는 사용하지 않는게 좋겠죠?)
# git config --global credential.helper "store"
1.3. 저장소(Repository) 만들기
1.3.1. 새로운 저장소 생성
특정 디렉토리를 만들거나 이미 생성된 프로젝트 디렉토리로 이동하여 다음과 같은 명령을 실행하면 Local 저장소가 구축됩니다.
# cd <프로젝트 디렉토리> # git init만약 프로젝트 디렉토리에 *.c 파일이 있다면 이 파일을 stage에 추가하고 commit 해야 합니다.
# git add *.c # git commit -m "initial new project commit"
1.3.2. 이미 만들어진 저장소로부터 복제된 저장소 생성
이미 만들어진 저장소로부터 복제된 저장소를 생성하려면 해당 원본 저장소의 접속주소를 알고 있어야 하며 해당 주소를 통하여 다음과 같은 명령으로 clone 을 수행합니다.
# git clone <원본 저장소 주소> [<저장하고자 하는 working directory 경로>]
1.4. 파일의 상태
[JPG image (43.62 KB)]
Git는 크게 파일을 Modified, Staged, Commited 3가지 상태로 관리합니다.
- Modified : 수정된 직후의 파일 상태 (단순 수정상태)
- Staged : 수정된 파일이 Commit 되기 직전의 상태 (수정후 관리상태)
- Commited : Staged 된 파일이 Commit 된 상태 (Local 저장소의 Database에 저장된 상태)
1.5. Subversion의 명령에 대한 Git대체명령 정리
- "svn info"
- "git remote show origin"
# git remote show origin * remote origin Fetch URL: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git Push URL: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git HEAD branch: master Remote branch: master tracked Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (up to date)
- "git remote -v"
# git remote -v origin https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git (fetch) origin https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git (push)
- "git rev-parse HEAD"
# git rev-parse HEAD b29794ec95c6856b316c2295904208bf11ffddd9
- "git show-ref"
git show-ref b29794ec95c6856b316c2295904208bf11ffddd9 refs/heads/master b29794ec95c6856b316c2295904208bf11ffddd9 refs/remotes/origin/HEAD b29794ec95c6856b316c2295904208bf11ffddd9 refs/remotes/origin/master 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11-tree ... 생략 ... c8e761132679d935b5d3edd06e48db2bd3eb918a refs/tags/v2.6.39-rc4 149b78658628901a6e578566a45f159d0b38ce2f refs/tags/v2.6.39-rc5 8630f22a089f0d777893ee6a53eb3e6acef06044 refs/tags/v2.6.39-rc6 ... 생략 ... b05b1307892247c76ad6dc3f59921736279a347b refs/tags/v4.9 27eb48d13e6981d9ada2c74f50a364a4414f73b9 refs/tags/v4.9-rc1 f068b3f31cc8acb6e37785d15170dd9e95c7d161 refs/tags/v4.9-rc2 44525af32f277001a751a51d59de12c5a733814f refs/tags/v4.9-rc3 f0b8a0182b2f3a7139d8d041e06bc11c1ba6e912 refs/tags/v4.9-rc4 9d4d32609e7bb04693ab7bf313cd5856b5298c1f refs/tags/v4.9-rc5 edc31677f4f97b582fbc53659337dddb210a22fa refs/tags/v4.9-rc6 512983f23bc1346e6dbaf0b899257332659d9f5d refs/tags/v4.9-rc7 a9b7e3f1eada90250a6b2ab2ef3e0a846cb16831 refs/tags/v4.9-rc8 ... 생략 ...
- "git remote show origin"
- "svn log"
- "git log"
# git log commit b29794ec95c6856b316c2295904208bf11ffddd9 Merge: e87f327 1d3028f Author: Linus Torvalds <torvalds@linux-foundation.org> Date: Tue Jun 6 14:30:17 2017 -0700 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net Pull networking fixes from David Miller: 1) Made TCP congestion control documentation match current reality, from Anmol Sarma. ... ... ...
- "git log"
- "svn diff"
- "git diff --cached"
# git diff --cached ...
- "git diff --cached"