포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.

안녕하세요?

 

현재 국내에 GIT에 대한 제대로 된 문서가 없기에,  GIT 사용자 가이드에 대하여 번역을 시작하게 되었습니다.

번역의 오류로 틀린 내용이 있을 수도 있으니, 오류 발견시 댓글을 남겨주시면 감사하겠습니다.

 

GIT 사용법 (ProGIT) - 2.3. 위탁 이력의 열람

 

원본 : ProGIT  Book(http://progit.org)

번역 : 김재훈(이솝 임베디드 포럼, http://www.aesop.or.kr)

 

2.3.1. 위탁 이력의 열람

 

여러분이 작업을 하면서 소스 코드를 GIT에 여러 번 위탁을 하는 작업을 반복하게 됩니다.

나중에 여러분 또는 다른 참여자가 기존의 저장소(Repository)를 클론하면, 과거에 어떤 작업을 수행했었는지 보고 싶을 경우가 있습니다. 이럴 경우를 위해 GIT는 "git log"라는 사용자 명령이 준비되어 있습니다.

 

여기서 기술하는 예를 위해 simplegit라는 이름을 가진 매우 간단한 프로젝트를 사용 합니다.

simplegit는 이 문서에서 GIT 프로젝트에 대한 설명용으로 앞으로 자주 사용 됩니다.

이 프로젝트는 다음과 같은 명령으로 취득할 수 있습니다.

 

git clone git://github.com/schacon/simplegit-progit.git


GIT를 취득한 후, git log 명령을 수행하면, 아래와 같은 결과를 얻을 수 있습니다.

 

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <[email protected]>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <[email protected]>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <[email protected]>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit


git log 명령에 어떤 명령 인자도 주지 않고 수행한다면, git log는 해당 저장소(Repository)에 대한 위탁 결과를 새로운 순서대로 표시해 줍니다. 즉, 가장 최근에 위탁 된 사항을 보여주는 것 입니다. 또한 이 명령을 수행하면, 각 위탁 결과에 대한 SHA-1 체크 섬, 저작자의 이름과 메일 주소, 위탁 일시, 위탁 메시지 등을 보여주게 됩니다.

 

git log 명령에는 다양한 옵션이 있으며, 이 옵션을 조합하여 여러분이 보고 싶은 것만 표시할 수도 있습니다.

여기에서는 git log 명령 사용 시 잘 이용되는 몇가지 옵션을 보여 드리고자 합니다.

 

git log 명령에서 가장 많이 사용하는 옵션 중 하나가 -p 명령 입니다.

이 명령은 각 위탁 사항에 대한 diff 결과를 표시 합니다. 또한 -2 옵션은 가장 최근게 수행한 2개의 위탁 결과만을 표시 합니다.

 

$ git log p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <[email protected]>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
 spec = Gem::Specification.new do |s|
-    s.version   =   "0.1.0"
+    s.version   =   "0.1.1"
     s.author    =   "Scott Chacon"

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <[email protected]>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
     end

 end
-
-if $0 == __FILE__
-  git = SimpleGit.new
-  puts git.show
-end
No newline at end of file

 

위의 예제와 같이 사용하면, GIT의 위탁 사항을 표시하는 것과 동시에, 각 위탁 엔트리 직후의 diff를 표시 합니다.

이것은 코드 리뷰 때에 사용하면 매우 편리 합니다. 또한 다른 프로젝트 참여자가 일련의 위탁 작업을 통해 어떤 것을 변경 했는지 대충 알아보는데에도 편리 합니다.

 

그리고, git log 명령을 통해 각 위탁에 관한 통계 정보를 보고 싶은 경우에는 --stat 옵션을 사용 합니다.

 

$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <[email protected]>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

 Rakefile |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <[email protected]>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

 lib/simplegit.rb |    5 -----
 1 files changed, 0 insertions(+), 5 deletions(-)

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <[email protected]>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

 README           |    6 ++++++
 Rakefile         |   23 +++++++++++++++++++++++
 lib/simplegit.rb |   25 +++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 0 deletions(-)

 

위의 결과와 같이 --stat 옵션은, 각 위탁 엔트리에 이어 변경된 파일 일람 및 변경된 파일의 수, 추가 및 삭제된 행수가 표시 됩니다. 또, 이런 사항에 대한 결과를 종합하여 맨 마지막에 출력 합니다.

 

또 하나의 편리한 옵션이 --pretty 입니다. 이 옵션은 git log를 기본 서식 이외에 다른 형식으로 출력할 수 있습니다. 그리고 이를 위해 미리 준비되어 있는 몇개의 옵션을 사용할 수 있습니다. 예를 들어, oneline 옵션은 각 위탁 사항을 하나의 행으로 표시 합니다. 이 옵션은 대량의 위탁 사항을 보는 경우에 편리 합니다.

이외에 short나 full 또는 fuller 과 같은 옵션이 존재 합니다. 이것은 git log의 표준 출력 형식과 동일하게 표시하지만, 출력 되는 로그의 양을 조정할 수 있습니다.

 

$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit


여기서 무엇보다 흥미로운 옵션은 format 옵션 입니다. 이것은 사용자가 임의로 독자적인 로그 출력 형식을 지정할 수 있습니다. 이것은 git log의 출력 결과를 스크립트나 다른 시스템에 파싱할 때 매우 편리하게 사용할 수 있습니다.

즉, 사용자가 임의로 출력 형식을 지정해 두면, 장래에 GIT를 업데이트 하거나 교체 하더라도 자동화 스크립트를 통하여 데이터를 이전하거나 내용물을 백업 할 수 있기 때문 입니다.

 

$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 11 months ago : changed the version number
085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code
a11bef0 - Scott Chacon, 11 months ago : first commit


다음은 format 옵션에서 자주 사용되는 인수를 정리한 것 입니다.

 

옵션 / 출력 내용
%H / 위탁의 해시
%h / 위탁의 해시 (단축판)
%T / 트리의 해시
%t / 트리의 해시 (단축판)
%P / 부모의 해시
%p / 부모의 해시 (단축판)
%an / Author 의 이름
%ae / Author 의 메일 주소
%ad / Author 의 일자 (date= 옵션에 따른 형식)
%ar / Author 의 상대 일자
%cn / Committer 의 이름
%ce / Committer 의 메일 주소
%cd / Committer 의 일자
%cr / Committer 의 상대 일자
%s  / 건명


위의 인수 목록에서, author와 committer는 무엇이 다른지 궁금한 분들도 있을 것 입니다.

author는 그 작업을 만든 사람, committer는 그 작업을 적용한 사람을 가르킵니다. 예를 들어 당신이 어떤 프로젝트에 패치를 보내 프로젝트 멤버 누군가가 프로젝트에 그 패치를 적용했다고 생각해 봅시다. 이 경우 양쪽 모두의 이름이 git에 남게 됩니다. (당신이 author, 프로젝트 멤버가 committer가 됩니다.)

 

이런 구별 방법에 대해서는 제 5장에서 좀 더 자세하게 설명할 예정 입니다.

 

oneline 옵션 및 format 옵션의 마지막에 --graph를 조합하면 좀 더 편리합니다. 이 옵션은 괜찮은 느낌의 아스키(ASCII) 그래프로 branch나 merge가 된 히스토리를 표시 합니다. 만약 이런 형식으로 Grit 프로젝트의 저장소(Repositor)의 변경 내역을 표시한다면 다음과 같습니다. (웹 페이지 상에서는 제대로 나오지 않을 수 있습니다.)

 

$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
*  5e3ee11 Merge branch 'master' of git://github.com/dustin/grit

| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/ 
* d6016bc require time for xmlschema
*  11d191e Merge branch 'defunkt' into local


지금 까지 설명했던 것들은 git log의 출력 형식 지정 방법의 아주 일부분 밖에 되지 않습니다.

아래에 지금까지 설명했던 옵션과 그 이외에 잘 사용되는 옵션, 그리고 각각의 로그의 출력을 어떻게 바꾸는 지를 기술 했습니다.

 

옵션 /설명
-p  / 각 위탁의 패치를 표시한다
--stat  / 각 위탁으로 변경된 파일의 통계 정보를 표시한다
--shortstat --stat / 커멘드 가운데, 변경/추가/삭제 의 행만을 표시한다
--name-only / 위탁 정보의 뒤로 변경된 파일의 일람을 표시한다
--name-status  / 변경된 파일과 추가/수정/삭제 정보를 표시한다
--abbrev-commit / SHA-1 체크 섬의 전체 (40문자) (은)는 아니게 최초의 수문자만을 표시한다
--relative-date / 완전한 일자 포맷이 아니고, 상대 포맷 (“2 weeks ago” 등) 그리고 일자를 표시한다
--graph / 브랜치나 머지의 역사를, 로그 출력과 함께 아스키 그래프로 표시한다
--pretty  /  위탁을 다른 포맷으로 표시한다.

                  옵션으로서 oneline, short, full, fuller 그리고 format (독자 포맷을 설정한다) (을)를 지정 가능

 

2.3.2. 로그 출력의 제한(필터링)

 

git log의 출력 형식에 대한 옵션 뿐만 아니라, git log에 나오는 출력 결과 값을 제한 하는 옵션도 있습니다.

즉, 위탁된 로그의 일부분의 내용만을 표시하는 옵션 입니다. 앞 장에서도 잠깐 사용되었지만, -2 옵션은 바로 앞에 위탁된 두 항목에 대해서만 표시 합니다. 이것은 -<n> 형식으로 사용하며, <n>의 위치에 최종 위탁 이전의 n 개의 위탁 내역만을 뽑아 출력할 수 있습니다. 하지만, git는 기본적으로 모든 출력을 페이지 단위로 하기 때문에 실제로 이 명령을 사용할 일은 별로 없을 것이라고 생각 합니다.

 

하지만, --since나 --until과 같은 시간 제한 옵션은 매우 유용 합니다. 예를 들어 다음 명령은 지난 두 주의 위탁 목록을 가져 옵니다.

 

$ git log --since=2.weeks  


이 명령은 다른 형식으로 특정 날짜("2010-02-02")도 넣을 수 있으며, 상대적 날짜("2 years 1 day 3 minutes ago")를 지정 할 수도 있습니다.

 

또한 위탁 목록에서 검색 조건에 맞는 것만을 추려낼 수도 있습니다. --author 옵션은 특정 author가 위탁한 이력만을 출력하고, --grep 옵션은 위탁 메시지에서 키워드만을 검색하여 출력 합니다. (만약 author와 grep를 모두 지정하려면 뒤에 --all-match 옵션을 추가해야 합니다. 추가하지 않는다면, author나 grep 둘 중 하나만 해당되어도 모두 출력하기 때문 입니다.)

 

마지막으로 소개하는 git log 필터링 옵션은 경로(PATH) 부분 입니다. 디렉터리나 파일의 이름을 지정하면 해당한 것에 대한 변경 및 위탁 이력만 표시 됩니다. 이 옵션은 항상 마지막에 지정하고 일반적으로 -- (더블 대쉬) 다음에 설정 합니다.

이 -- (더블 대쉬)는 다른 옵션과 달리 경로를 구분할 때 사용 합니다.

 

아래에는 이러한 옵션 및 기타 일반적인 옵션들의 목록을 정리 했습니다.

 

옵션 / 설명
- (n) / 가장 최근의 n 개의 커밋 만보기
- since - after / 지정된 날짜 이후 커밋로만 제한
- until - before / 지정된 날짜 이전 커밋로만 제한
- author author / 항목이 지정된 문자열에 일치하는 커밋 만보기
- committer committer / 항목이 지정된 문자열에 일치하는 커밋 만보기


예를 들어, git 소스 트리에서 테스트 파일의 위탁 이력 중 Junio Hamano 라는 사람이 위탁했으며, 2008년 10월에 수행된 내역을 알고 싶다면 다음과 같이 지정 합니다.

 

$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01"
   --before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attribute
acd3b9e - Enhance hold_lock_file_for_{update,append}()
f563754 - demonstrate breakage of detached checkout wi
d1a43f2 - reset --hard/read-tree --reset -u: remove un
51a94af - Fix "checkout --track -b newbranch" on detac
b0ad11e - pull: allow "git pull origin $something:$cur


위의 결과에서는 약 20,000 건에 달하는 GIT 위탁 이력에서 해당하는 6개의 결과가 표시 되었습니다.

 

2.3.3. GUI를 이용한 변경 이력의 열람

 

GUI 인터페이스를 이용하여 조금 더 멋있게, 위탁 이력을 보고 싶은 경우 사용하는 것이 Tcl/ Tk 프로그램 입니다. 우선 gitk 프로그램을 살펴보도록 합니다. 이것은 git에 기본적으로 포함 되어 있습니다. gitk는간단히 말해 시각적 git log 도구 입니다.

git log를 사용할 수 있는 각종 필터링 옵션은 거의 모두 지원 합니다.

 

명령행에서 gitk를 입력할 경우 아래와 같이 화면이 나타 납니다.

 

2_2.png

 

창의 상단에 위탁 이력의 역사와 함께 diff 뷰어도 같이 나오기 때문에, 위탁 이력을 클릭하면 동시에 변경 내용도 확인할 수 있습니다.

 

profile

인생은 연극이고 세상은 무대이다!

이솝 임베디드 포럼 운영 및 비즈니스와 관련된 것 이외에 E-Mail이나 메신저 및 휴대폰 등을 통한 개인적인 질문 및 답변은 받지 않습니다. 문의 사항은 이솝 임베디드 포럼 게시판을 이용해 주시면 감사하겠습니다.

첨부
엮인글 :
http://www.aesop.or.kr/index.php?mid=Board_Documents_Linux_Applications&document_srl=35595&act=trackback&key=d01

김정희

2010.02.03 05:09:52
*.137.74.80

진심으로 감사드립니다.....감사..감사..

List of Articles
번호 제목 글쓴이 날짜 조회 수

Yocto project 소개자료 [2]

Yocto zynq howto - 예전자료

apache-1.3.33 arm porting by tssuk [3]

i2c scan하는 코드입니다.

dropbear ssh daemon 포팅하기 [1]

ffmpeg을 이용한 camera 영상 저장 file [1]

Linux application에서의 clock과 system timer설정

ffmpeg x86 compile & cross compile howto file

oss를 이용한 read, write, read/write program file [2]

GIT 사용법 (ProGIT) - 2.6. 태그(TAGS) 붙이기 [2]

GIT 사용법 (ProGIT) - 2.5. 원격 저장소의 사용 방법 [2]

GIT 사용법 (ProGIT) - 2.4. 작업의 취소 [1]

GIT 사용법 (ProGIT) - 2.3. 위탁 이력의 열람 file [1]

GIT 사용법 (ProGIT) - 2.2. GIT 저장소(Repository)에 기록 file [2]

GIT 사용법 (ProGIT) - 2.1. GIT 저장소(Repository)의 취득

GIT 사용법 (ProGIT) - 1.5. 최초 GIT의 환경 설정 [3]

GIT 사용법 (ProGIT) - 1.4. GIT 설치

GIT 사용법 (ProGIT) - 1.2. GIT 개발 역사 / 1.3. GIT 기본 ... file [3]

GIT 사용법 (ProGIT) - 1.1. 버전 관리 시스템의 개념 file [6]

I.MX Multimedia and Applications Framework 기술자료 ... file [2]

사용자 로그인