Link:http://emacs.kldp.net/wiki/doku.php?id=tool_chain:git


Git 란 무엇인가.

기존 버젼 관리 툴과는 대치 되는 형태의 파일 버젼 관리 툴입니다.

기존의 버젼 관리 툴은 중앙 집중 방식으로 자신만의 저장소가 없어서 작업 내용을 보관 보완(Update) 하려면 반드시 사내 서버에 접속을 하여야만 하여서 장기 출장, 노트북에서의 작업한 내용에 대해서 별 다른 버젼 부여가 불가능 하였습니다.

하지만 Git 같은 신개념의 툴이 나오므로서 자신의 하드에 저장소를 만들고 사내 혹은 프로젝트 전체의 저장소의 자신의 작업 내용을 추가/보완/수정 등이 너무나도 편리하게 수행이 가능하게 됩니다.

간단한 사용법

이글의 원문을 참고해서 제 멋대로 창작했습니다.

Git 프로젝트 설정하기.

기존 프로젝트를 가져와서 작업을 하고자 한다면 그 프로젝트를 복제(Clone)를 해보자.

$ git clone <url>

만약 당신이 아무것도 없이 초기 상태로 프로젝트를 진행하는것이라면 Git 로 프로젝틀 하나 만들어 보자.

$ cd project/$ git init          # 저장소(repository) 생성. $ git add .         # 특정 파일을 프로젝트에 추가. $ git commit        # 로컬 저장소에 자신의 작업 변경 내역을 전부 반영(Commit) [동시에 changlog 에 등록이 됨]$ git rm --cached <file>... #  complicated command to undo, in case you forgot .gitignore

Git은 저장소(Repository)의 루트(Root)에 위치한 .gitignore 라는 이름의 파일 안에 있는 쉘 패턴을 참고해서 무시(ignore) 해야 될 파일 패스 들을 무시 하고 있습니다.

브랜칭(Branching) 과 병합(merging)

$ git checkout -b linux-work        # 프로젝트 "linux-work" 라는 이름의 새로운 줄기(Branch)를 만듭니다. $ <make changes>$ git commit -a$ git checkout master               # 작업중인 줄기(Branch)의 뿌리(master)로 돌아갑니다.$ git merge linux-work              # 바뀌어진것들(change set)을 병합(merge) 합니다. (Git 버젼 1.5 이상)$ git pull . linux-work             # 바뀌어진것들(change set)을 병합(merge) 합니다. (Git 모든 버젼에서 가능)

저장소에 패치된 파일을 자신의 컴퓨터에 적용하기

$ git apply < ../p/foo.patch$ git commit -a

자신의 컴퓨터에 변경된 패치 사항을 원격 저장소에 집어 넣기 (Export)

$ <make changes>$ git commit -a -m "commit message"$ git format-patch HEAD^  # 001-commit-message.txt 파일을 생성.                           # 명령어중 헤드가 뜻하는 바는 			  # 모든 패치 작업이 HEAD 라는 이름으로 지정이 되어 있는 줄기의 시작점을 			  # 기준으로 삼아서 패치 작업이 수행되게 된다. 

네트워크 에서의 Git

# 1차 Git 저장소에서 복제(Clone) 시작.$ git clone git://git.kernel.org/pub/scm/git/git.git$ cd git
# SSH 프로토콜을 이용해서 원격 저장소(Repository)에 변경된 내용을 밀어(push) 넣기. $ git push user@example.com:my-repository.git/
# 원격 저장소의 변경된 내용을 현재 저장소로 가져오기. $ git fetch user@example.com:my-repository.git/ remote-branch:local-branch
# 원격 컴퓨터로부터 변화된 내용들을 병합하기 bar$ git pull git://foo/repo.git/ branch
# git 프로토콜을 통해서 저장소 제공하기. $ cd /my/repository/$ touch .git/git-daemon-export-ok$ git daemon  # 자 이제부터 git://너의.컴퓨터/내/저장소/.git 로부터 " 느긋하게 가져가라구. "
# Set up a bare (= without working directory) repository (e.g. on a webserver)$ mkdir my-repo.git$ cd my-repo.git$ git --bare init$ chmod a+x hooks/post-update # this is needed for HTTP transport                                      # you need to populate this repository via push

수정된 내역들을 다시 살펴보기

# 작업내역들을 시각적으로 살펴보기$ gitk       # 이 명령은 Tk 윈도우를 엽니다. 작업 수정본들의 내역들이 존재하는지를 보여주게 됩니다. 
# 수정 내역을 확인합니다. $ git log    # this pipes a log of the current branch into your PAGER$ git log -p # ditto, but append a patch after each commit message
# 정확히 명시된 내용으로 제출(Commit)된 내용들 살펴보기(inspect)$ git show HEAD    # 작업 제출 내역에 대한 정보를 보여주기,                           # 현재 작업하고 있는 줄기의 시작점을 기준 삼아서                           #  diffstat과 패치 내역을 보여주기.

수정본을 분석(refer) 합니다.

# 이름을 이용해서$ git log v1.0.0   # 1.0.0 이란 이름의 테그(Tag)를 보여줍니다. (show history leading up to tag "v1.0.0")$ git log master   # "master" 란 이름의 줄기의 작업 기록 내역을 보여줍니다. # 이름을 기준으로 이름과 관련된 사항들을 이용해서.$ git show master^   # master 의 마직막 수정본(revision) 줄기의 바로 윗 단계를 보여준다. (수정 요망.) -       	   	     # show parent to last revision of master$ git show master~2  # master의 뿌리 근본의 2단계 위의 줄기를 보여준다.       	   	     # show grand parent to tip of master$ git show master~3  # master의 뿌리 근본의 3단계 위의 줄기를 보여준다.       	   	     # show great grand parent to tip of master (you get the idea)# git의 describe 명령의 출려내용에 의해서. by output of "git describe"$ git show v1.4.4-g730996f  # you get this string by calling "git describe"# 해쉬에 의한 분류 ( 작업자에게는 보여지지 않는 않게 Git 에서 만들어지는 모든 오브젝트에는 해쉬라는 이름의 주민등록 번호를 부여하게 됩니다.)$ git show f665776185ad074b236c00751d666da7d1977dbe$ git show f665776   # 보기 드문 형태의 머릿 글자 7 자를 이용한 검색 결과를 보여주게 됩니다. # 수정본에 테그 붙이기$ git tag v1.0.0                      # 현재 작업중인 HEAD 줄기에 "v1.0.0" 이라는 이름의 테그를 달기. $ git tag interesting v1.4.4-g730996f # 줄기 이름 "interesting"에 "v1.4.4-g730996f" 란 이름이 테그를 달기. 

수정본이 수정된 내역을 비교 분석

<code # 두 수정본 줄기(Branch)에diff을 이용해서 다른점을 파악

$ git diff origin..master # pipes a diff into PAGER $ git diff origin..master > my.patch # pipes a diff into my.patch </code>

# 제출(Commit)이 되지 않았던 것들을 diffstat 을 사용해서 조회.$ git diff --stat HEAD 

내가 원하는 패치만 골라담기

Cherry picking patches

남형님의 GIT 한글 메뉴얼에서 일부 인용: SCM 용어에서 “체리피킹”이라는 말은 일련의 변경 사항 (일반적으로 커밋) 중에서 일부를 선택하여 별도의 코드 베이스 상에 새로운 일련의 변경 사항으로 기록한다는 것을 뜻한다. GIT에서 이것은 “git cherry-pick” 명령을 통해 수행하며 기존의 커밋에서 변경한 내용들 중 일부를 추출하여 현재 브랜치의 팁에 새로운 커밋으로 기록한다.

 $ git cherry-pick other-branch~3     # 다른 줄기의 4 번째 마지막으로 제출된 패치를 현재 작업하고 있는 줄기에 적용. 

외부 링크


Posted by 벅스바니
,