디지털 양피지/Git2012. 10. 21. 13:52

1. 저장소 생성하기


Git에서 작업트리를 관리하는 파일은 해당 폴더에 .git 폴더에 위치하게 된다.


 prompt> git init 


git init 명령을 사용하면 해당 폴더에 .git 디렉토리를 생성하고 저장소의 메타데이타를 이곳에 보관한다. 

.git 폴더를 열어보면 다음과 같이 작업트리를 추적하기위한 메타 파일들이 생성되어 있다.



2. 파일 추가하기


저장소에 파일을 추가하기 위해서는 add 명령을 사용한다.


 prompt> git add file.name 


파일을 추가한 후 "git status" 명령으로 현재 파일의 상태를 확인할 수 있다. 

(git 의 text 색상을 변경할 수 있는데 기본적으로 false로 되어 있다. auto 로 설정하면 그림과 같이 git에서 제공하는 색상을 볼 수 있다.  >git config --global color.ui "auto" 로 설정한다.)


commit 을 사용하여 저장소에 저장 이력을 저장한다.


  prompt> git commit -m "This is a comment"



Git는 추가한 파일을 추적하기 시작한다. 파일을 변경하고 status를 확인해보면 수정된 파일이 있다는 것을 알려준다.
기본적으로 Git로 생성하면 master branch를 생성한다. 수정된 파일을 다시 commit 상태로 만들기 위해서는 우선 add를 통하여 staging 상태로 만들어야 한다.


3. Git의 파일 저장 방식


Git는 사용자의 코드를 3곳에 저장한다. (물리적인 파일은 하나로 보이지만 Git는 모든 수정사항을 기록하고 있다.)

첫번째 위치는 파일을 편집할때 직접 이용하는 "작업트리"이다.

두번째 위치는 인덱스로 staging area 라 부르고 이는 작업트리와 저장소(repository)와의 버퍼 역활을 한다.

마지막 위치는 저장소이다. 


작업트리에서 수정된 파일들은 1.갱신 전(Changes not staged for commit) 즉, staged 되지 않은 상태로 표시된다. 

수정을 완료한 파일들은 commit 하기 전 add 명령을 통하여 2. staging area에 추가한다. (staging area에는 commit할 대상만을 올려 놓도록 한다.)  



staging area에 있는 파일은 추적하기 쉽도록 주석(comment)를 달아 3. 저장소에 commit 한다.

저장소에 저장된 주석을 통하여 파일 이력을 쉽게 추적할 수 있다. 커밋명은 커밋을 추적할 수 있도록 Git 이 생성한 SHA-1 해시를 이용한다.



4. 차이점 살펴보기


 > git diff


매개변수 없이 git diff 를 실행하면 아직 스테이징 되지 않고 커밋되지도 않은 작업트리 변경 사항을 보여준다. +로 표시된 부부이 추가된 부분이다. 삭제 되는 부분은 - 가 표시된다. 이 상태에서 add 명령을 사용하여 스테이징 상태로 만들어 보자.



스테이징 영역에서 커밋 예정인 변경사항을 보기 위해서는 --cached 매개변수를 추가해준다. 삭제된 내용은 빨간색으로 추가된 부분은 초록색으로 표시된다.


  > git diff --cached



이제 다시 gitTest.html 파일을 수정해서 작업트리 영역에서 파일을 변경해 보자. 이 상태에서 작업트리, 스테이징, 저장소의 모든 차이점을 보고 싶다면 HEAD 매개변수를 추가하면 된다. HEAD는 현재 작업중인 브렌치에서 가장 최신의 커밋을 나타내는 키워드 이다.


  > git diff HEAD



5. 파일 무시하기


Git는 .git 폴더내의 모든 파일을 추적하기 때문에 필요없는 파일은 추적하지 않도록 하는 것이 좋다. Git를 사용하는 모든 저장소에서 해당 파일을 추적하고 싶지 않으면 ~/.gitignore_global 파일에 추가한다. ~/.gitconfig 를 보면 [core] 부분에 excludesfile을 통하여 .gitignore_global의 위치를 알 수 있다. 



*.swp 파일의 경우 편집기 등에 의해서 자동으로 만들어 질 수 있다. git status를 통해 확인해 보면 파일을 추적하고 있음을 알 수 있다. (ignoretest.swp는 test를 위하여 추가한 파일이다.)



.gitignore_global파일에 *.swp를 추가하고 git status를 해보면 더이상 igmoretest.swp 파일을 추적하지 않음을 할 수 있다.



gitignore_global은 모든 저장소의 파일을 무시한다. 만일 자신의 저장소에만 무시하고 싶다면 .git/info/exclude 파일에 추가하면 된다.


6. 브렌치 (Branch)

브렌치는 분기를 만들어 파일을 관리한는 방식이다. Git는 기본적으로 master 브렌치를 만들고 진행한다. 


7. 브렌치 이름 바꾸기

master 브렌치도 하나의 브렌치이게 때문에 이름을 바꿀수도 있다.


 > git branch -m master mymyster

 > git branch 


-m 매개 변수는 이동을 의미한다. 즉, master 브렌치 이름을 mymster로 바꾼다는 명령이다. git branch는 브렌치 명을 모두 보여 준다. 아래 예제에서는 master 브렌치를 mybranch 브렌치롤 바꾼 상태를 보여준다. 초록색으로 표시된 mymaster 브렌치가 현재 checkout 된 브렌치를 나타낸다. checkout 된 브렌치는 *로 표시되어 진다.



git에서 브렌치 비용은 크지 않다. 다른 시스템과 달리 모든 파일을 복사하는 방식이 아니라 적용된 시점 부터의 커밋만을 추적한다.


3. 새로운 브렌치 생성하기


git branch 명령을 사용하여 새로운 브렌치를 만들 수 있다. 생성된 브렌치를 사용하려면 해당 브렌치를 checkout 해야 한다. 


  > git branch new 

  > git checkout new


-b 매개 변수를 사용하면 브렌치의 생성과 체크아웃을 한 번에 할 수 있다. 마지막 변수는 해당 브렌치에서 새로운 브렌치를 생성하도록 한다. 즉, 브렌체에 브렌치를 만들 수도 있다.


  > git branch -b new master 







Posted by 빨간 양말