#keywords git,vcs,cvs,source,diff,rcs,repository #title Git 사용법 [wiki:Home 대문] / [wiki:CategoryHowTo 활용] / [wiki:HowToGit Git 사용법] ---- == [wiki:HowToGit Git 사용법] == * 작성자 조재혁([mailto:minzkn@minzkn.com]) * 고친과정 2017년 6월 5일 : 처음씀 [[TableOfContents]] === 개요 === 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 는 다음과 같은 목표하에 존속되는 버젼관리 시스템이라고 할 수 있습니다. * 빠른 속도 (각 저장소의 완전한 복제본이 각 Client에 존재하므로 거의 모든 명령이 Local 에서 다루어지는 특징) * 단순한 구조 * 비-선형적인 개발을 도모 (수많은 Branch를 동시에 진행할 수 있도록) * 완벽한 분산 * 큰 규모의 프로젝트에 용량이나 속도면에서 유용 이 문서는 Git의 기본적인 사항을 간단히 정리하는 정도이며 좀더 세부적인 사항은 "[[attachment:ProGit(번역본).pdf]]" 문서를 보실 것을 추천드립니다. === Git 의 초기설정 === Git가 설치되면 가장먼저 사용환경에 필요한 설정값을 설정해주어야 합니다. 이 설정값은 "git config"라는 명령으로 설정할 수 있으며 다음과 같은 명령을 통해서 설정해주면 됩니다. 1. 사용자 이름 설정 {{{#!plain # git config --global user.name "<사용자 이름>" }}} 1. 사용자 E-Mail 설정 {{{#!plain # git config --global user.email "<사용자 E-Mail 주소>" }}} 1. 편집기 설정 (vim 을 기본 편집기로 설정하는 예) {{{#!plain # git config --global core.editor vim }}} 1. diff 도구 설정 (vimdiff 를 diff 도구로 설정하는 예) {{{#!plain # git config --global merge.tool vimdiff }}} 1. git 에서 매번 로그인 계정 암호입력 하지 않도록 설정 (주의: 공유 PC 등에서는 사용하지 않는게 좋겠죠?) {{{#!plain # git config --global credential.helper "store" }}} === 저장소(Repository) 만들기 === ==== 새로운 저장소 생성 ==== 특정 디렉토리를 만들거나 이미 생성된 프로젝트 디렉토리로 이동하여 다음과 같은 명령을 실행하면 Local 저장소가 구축됩니다. {{{#!plain # cd <프로젝트 디렉토리> # git init }}} 만약 프로젝트 디렉토리에 *.c 파일이 있다면 이 파일을 stage에 추가하고 commit 해야 합니다. {{{#!plain # git add *.c # git commit -m "initial new project commit" }}} ==== 이미 만들어진 저장소로부터 복제된 저장소 생성 ==== 이미 만들어진 저장소로부터 복제된 저장소를 생성하려면 해당 원본 저장소의 접속주소를 알고 있어야 하며 해당 주소를 통하여 다음과 같은 명령으로 clone 을 수행합니다. {{{#!plain # git clone <원본 저장소 주소> [<저장하고자 하는 working directory 경로>] }}} === 파일의 상태 === [[attachment:FileStatusLifeCycleByGit.jpg]] Git는 크게 파일을 Modified, Staged, Commited 3가지 상태로 관리합니다. 1. Modified : 수정된 직후의 파일 상태 (단순 수정상태) 1. Staged : 수정된 파일이 Commit 되기 직전의 상태 (수정후 관리상태) 1. Commited : Staged 된 파일이 Commit 된 상태 (Local 저장소의 Database에 저장된 상태) === Subversion의 명령에 대한 Git대체명령 정리 === * "svn info" * "git remote show origin" {{{#!plain # 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" {{{#!plain # 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" {{{#!plain # git rev-parse HEAD b29794ec95c6856b316c2295904208bf11ffddd9 }}} * "git show-ref" {{{#!plain 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 ... 생략 ... }}} * "svn log" * "git log" {{{#!plain # git log commit b29794ec95c6856b316c2295904208bf11ffddd9 Merge: e87f327 1d3028f Author: Linus Torvalds 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. ... ... ... }}} * "svn diff" * "git diff --cached" {{{#!plain # git diff --cached ... }}} === 참고자료 === * [^https://git-scm.com/doc git Documentation] * [^https://git-scm.com/book/ko/v2] * [[attachment:ProGit(번역본).pdf]] * [^https://www.kernel.org/pub/software/scm/git/docs/user-manual.html Git User Manual] * [^https://wiki.kldp.org/Translations/html/Git-User-Manual/ Git User Manual (번역본)] * [^https://git-scm.com/book/ko/v1/Git%EC%9C%BC%EB%A1%9C-%EC%9D%B4%EC%A0%84%ED%95%98%EA%B8%B0-Git%EA%B3%BC-Subversion Git으로 이전하기 - Git과 Subversion] * [^http://blog.deveo.com/list-of-equivalent-commands-in-git-mercurial-and-svn/ List of equivalent commands in Git, Mercurial, and Subversion]