-
Notifications
You must be signed in to change notification settings - Fork 1
git
버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템이다.
- local VCS
- centralized VCS
- distributed VCS
Subversion과 Subversion 비슷한 놈들과 Git의 가장 큰 차이점은 데이터를 다루는 방법에 있다. 큰 틀에서 봤을 때 VCS 시스템 대부분은 관리하는 정보가 파일들의 목록이다. CVS, Subversion, Perforce, Bazaar 등의 시스템은 각 파일의 변화를 시간순으로 관리하면서 파일들의 집합을 관리한다.
Git은 이런 식으로 데이터를 저장하지도 취급하지도 않는다. 대신 Git은 데이터를 파일 시스템 스냅샷으로 취급하고 크기가 아주 작다. Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다. 파일이 달라지지 않았으면 Git은 성능을 위해서 파일을 새로 저장하지 않는다. 단지 이전 상태의 파일에 대한 링크만 저장한다. Git은 데이터를 스냅샷의 스트림처럼 취급한다.
-
Git directory git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳. 다른 컴퓨터에 있는 저장소를 Clone할때 git 디렉토리가 생성된다.
-
Working directory 프로젝트의 특정 버전을 Checkout한 것이다. Git 디렉토리는 지금 작업하는 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와서 워킹 디렉토리르 만든다.
-
Staging Area Git directory 에 있다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다.
- 워킹 디렉토리에서 파일을 수정한다.
- Staging Area에 파일을 Stage 해서 커밋할 스냅샷을 만든다.
- Staging Area에 있는 파일을 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장한다.
- untracked
- tracked
- Committed 데이터가 로컬 디비에 안전하게 저장됨
- Modified 수정한 파일이 로컬 디비에 커밋하지 않음
- Staged 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태
- linux
- fedora
$ yum install git-core
- ubuntu
$ apt-get install git
- MAC
$ sudo port install git-core +svn +doc +bash_completion +gitweb
- config
$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com $ git config --list
- git init : .git 레파지토리 생성
$ git init
- clone : 레파지토리를 복제한다. .git 레파지토리가 생성된다.
$ git clone 'url'
- status : 파일 상태를 보여준다.
$ git status (-s)
- add : untrack 파일을 staging 영역에 올리거나, track 파일이자 modified 된 파일을 staging 영역에 올려 commit 이 가능한 상태로 변경한다.
$ git add 'filename' or . (모든파일)
-
.gitignore 파일 .gitignore는 git 이 관리 하지 않아도되는 파일들을 적어둔다. 보통 로그 파일이나, 빌드툴이 자동으로 생성하는 파일들 ex) classes 디렉토리..
-
diff : 변경한것 차이점 보기
$ git diff
- commit :나의 로컬 레파지토리에 저장한다.
$ git commit -m "comment"
- git add 하지 않고 바로 commit. tracked 한 파일을 모두 staging 영역에 넣고 커밋한다.
$git commit -a -m 'added new benchmarks'
- push
$ git push [저장소이름] [브랜치이름] $ git push origin master
- fetch :로컬에 없고 원격에 있는 내용을 로컬로 가져온다. 자동 merge는 안된다.
$ git fetch [remote-name]
- pull:로컬에 없고 원격에 있는 내용을 로컬로 가져온다. 자동으로 merge도 된다.
$ git pull



