이전 작업으로 돌아가는 실행취소가 아니라,
commit을 했는데, 미처 추가하지 못한 작업이 있어서 나중에 추가를 하고 싶은 경우에 대해서 설명하고자 한다.


1. Ready


오늘 설명할 기능을 위해서 상황을 준비했다.
위 스크린샷을 보면 알겠지만, 파일 2개를 수정한 상황으로 준비했다.


2. commit


2개의 파일 중에서 1개만 staging해서 commit을 했다고 해보자.

그런데, 나머지 파일도 방금 진행한 commit에 집어넣고 싶다면 어떻게 해야할까!?


3. git commit --amend


대상 파일을 'add' 하고선 'git commit --amend' 명령어를 실행하면,
comment 입력 에디터 화면이 뜨고, 저장을 하고 종료하면 마무리 된다.


4. log


로그를 확인해보면, 2개의 commit이 아니라 기존 commit에 반영이 되어있다는 것을 확인할 수 있다.

그리고 commit 기록 시간이 중요한데,
처음에 commit 시간이 그대로 반영 되어있다. 변화하지 않는다!




사용자가 실수를 했을 경우에 이를 만회할 수 있는 명령어들 중 하나에 대해서 설명을 하였다.
이미 commit을 한 것을 수정할 수 있다는 것은 살짝 논란거리가 될 수도 있다.

하지만, 나중에 살펴볼 Remote Server와의 관계를 생각하면 별 문제가 아닐 수도 있다.

중요한 것은 우선 실수를 하지 않는 것이다.
하지만, 만약 commit 할 때에 실수를 했다면 'git commit --amend'를 기억하면 더 좋겠지...!? ^^
반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Git Server - Local  (0) 2012.02.22
Protocol - Git Server  (0) 2012.02.20
Log - gitk  (0) 2012.02.15
Log - git log  (2) 2012.02.14
Move file - git mv  (0) 2012.02.13

앞에서 'git log'를 통해서 로그를 확인했는데,
git 에서 로그를 보다 편하게 볼 수 있는 도구를 제공해준다.

바로 "gitk"


1. Error


$ gitk

'gitk'를 실행하면, 에러가 발생할 수도 있다.
'gitk'는 Tcl/Tk 기반의 프로그램인데, 'Tcl/Tk'가 설치되어있지 않아서 발생하는 에러이다.


$ sudo apt-get install tk

관련 패키지를 설치하면 위 에러는 해결이 된다.


2. gitk


$ gitk

'gitk'는 기본적인 비주얼 'git log' 도구이다.

앞에서 살펴본 커맨드 환경에서의 'git log'에서 했던 대부분의 것들을 GUI 환경에서 확인할 수 있다.


가볍게 여기까지~

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Protocol - Git Server  (0) 2012.02.20
Add last commit - git commit --amend  (0) 2012.02.16
Log - git log  (2) 2012.02.14
Move file - git mv  (0) 2012.02.13
Upgrade GIt (in Ubuntu)  (0) 2012.02.13

열심히 코멘트를 적어가며 commit을 했는데,
그렇게 열심히 기록한 것들을 보려면 어떻게 해야할까?


1. git log


$ git log

그냥 아무런 옵션 없이 'git log'를 하게 되면 지금까지의 기록들을 전부 보여준다.
화면 단위로 끊어서 계속 보도록 하여주는 것이다.


$ git log -2

전부가 아니라 최근 2개만 보고 싶다면 '-2'와 같이 옵션을 붙이면 된다.


2. git log -p


$ git log -p -2

단순히 기록을 보는 것이 아니라 무엇이 변경되었는지를 알고 싶다면 '-p' 옵션을 사용하면 된다.
물론 너무 많은 기록을 보는 것이 아니라 최근의 것을 보고 싶다면 '-2'와 같이 옵션을 붙이면 된다.


3. git log --stat


$ git log --stat -2

'diff' 내용이 너무 많아서 보기 너무 힘들다거나,
빨리 review를 하고 싶을 경우에 사용하면 좋은 옵션이 바로 '--stat'이다.

몇 개의 파일이 변경되었고, 몇 줄이 추가되었으며 몇 줄이 삭제되었는지 계산해서 보여준다.


4. git log --pretty


$ git log --pretty=format:"%h - %an, %ar : %s"

log 결과를 원하는대로 보고 싶을 때 사용하는 옵션이 바로 "--pretty" 이다.

이는 실제로는 로그를 파싱해서 다른 용도로 사용할 때 종종 사용한다.
즉, 파싱하기 좋은 모습으로 출력을 하도록 해서 이를 가지고 응용 프로그램에서 정규식 등을 적용하곤 한다.


5. git log --since


$ git log --pretty=format:"%h - %an, %ar : %s" --since=2.days

최근 2일간의 기록만 보고 싶다면!?
"--since" 옵션을 사용하면 된다!



6. git help log

이 외에도 엄청나게 많은 옵션과 그 사용법이 있다.

$ git help log

사용하다가 잘 모르겠거나, 아니면 제대로 사용하고 싶다면 위의 명령어 처럼 help를 외치면 된다!

너무 많은 옵션과 너무 많은 그 응용으로 인해서 여기에서 소개하는 것은 한계가 있기에.... ^^

(실은 나도 잘 모른다는... ㅋㅋㅋ)

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Add last commit - git commit --amend  (0) 2012.02.16
Log - gitk  (0) 2012.02.15
Move file - git mv  (0) 2012.02.13
Upgrade GIt (in Ubuntu)  (0) 2012.02.13
Remove file - git rm  (0) 2012.02.12

앞에서 'rm'에 대해서 알아보았고, 이번에는 'mv'에 대해서 알아보도록 하겠다.
'mv'와 'rm'이 비슷하게 사용될 것 같지만, 좀 다르다!


1. mv


$ mv ./mv_test.txt ./mv_test_action.txt
$ git status

Git으로 관리를 하고 있는 파일의 이름을 바꿨을 뿐인데, 'git status'를 하면 뭔가 많이 바뀌어 있다.

   - 기존 파일은 삭제가 되고,
   - 변경한 파일 이름으로 새로운 파일이 등록


2. git mv


$ git mv ./mv_test.txt ./mv_test_action.txt
$ git status

'git mv'를 통해서 파일명을 변경하게 되면,
위 스크린샷에서 확인할 수 있는 것처럼 'renamed'로 인지하게 된다.



하지만, 'git mv'를 하게 되어도 그 과정은 결국 3단계로 수행이 된다.
   - [ mv A파일 B파일 ]
   - [ git rm A파일 ]
   - [ git add B파일 ]

이렇게 3단계로 처리를 하는 것도 나쁘지는 않지만,
그냥 한 번에 'git mv'로 처리하는 것을 추천한다!



Git 은 위와 같이 파일명을 변경하여도 rename에 대한 metadata로 저장되지는 않지만,
위와 같이 처리가 될 경우 이를 rename이라고 알아챈다.

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Log - gitk  (0) 2012.02.15
Log - git log  (2) 2012.02.14
Upgrade GIt (in Ubuntu)  (0) 2012.02.13
Remove file - git rm  (0) 2012.02.12
Git Remote Repository (git init --bare)  (0) 2012.02.11

Git 도 비교적 버전업이 자주 되는 편이다.
업그레이드를 할 필요성이 종종 있는데, 그 과정은 그냥 설치과정과 같다.

여기에서는 소스로 설치하는 과정에 대해서만 살펴보겠다.


1. 최신 버전 확인

http://www.git-scm.com/

사이트에 들어가서 최신 릴리즈 버전이 얼마인지 확인한다.

2. 소스 다운로드

 

$ git --version
$ wget http://git-core.googlecode.com/files/git-1.7.9.tar.gz

3. Install

$ tar zxvf git-1.7.9.tar.gz
$ cd ./git-1.7.9
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install

사실은 그냥 최신 버전이 있는 것 확인해서 다시 그대로 설치하면 된다 ^^

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Log - git log  (2) 2012.02.14
Move file - git mv  (0) 2012.02.13
Remove file - git rm  (0) 2012.02.12
Git Remote Repository (git init --bare)  (0) 2012.02.11
Undo - Unmodify (변경 취소 - git checkout --)  (0) 2012.02.08

파일을 삭제하는 경우에 대해서 알아보자.


파일을 삭제하는 경우를 테스트 해보기 위해서 미리 삭제용 파일 3개를 넣어놓았다. ^^


1. rm


$ rm rm_test.txt
$ git add rm_test.txt
$ git commit -m "rm rm_test.txt"

git 으로 관리를 하던 파일을 그냥 삭제를 하게 되면 git 은 어떻게 받아들일까?
위 스크린샷을 보면 알겠지만, 그냥 알아서 변화된 사항을 잘 받아들인다.
그러므로, 그냥 'git add' 후 'git commit'을 해주면 된다.

위에서는 'add + commit = commit -a" 으로 처리를 했다 ^^


2. git rm


$ git rm rm_test2.txt
$ git commit -m "rm rm_test2.txt"

git 에서는 삭제를 위한 옵션을 제공을 해준다.
이를 이용하면 삭제와 staging을 한 번에 처리를 할 수가 있다.
이를 상태 그래프로 보면 아래와 같다.


즉, [ rm + add = git rm ] 이다.


3. git rm --cached


$ git rm --cached rm_test3.txt
$ git commit -m "rm --cached rm_test3.txt"

이번에는 조금 특수한 경우이다.

Git 에서는 지우고 싶은데, 지금 작업할 때에는 남겨두고 싶은 경우이다.
즉, 지금 당장 파일은 지우기 싫은데, git 에서는 삭제를 해놓고 싶은 경우에 이렇게 하면 된다.

위 스크린샷을 보면, git rm을 했음에도 실제 파일은 삭제가 되지 않았고,
그러다 보니 git 에서는 untracked 파일이 존재하고 있다고 인지하고 있게 된다.


4. Pattern

쉘 상에서 rm을 사용할 때와 마찬가지로 'git rm'에서도 glob 패턴 등을 그대로 사용할 수 있다.
다만, "*"를 사용할 때에 조금 조심해야 한다.

$ git rm \*~
$ git rm ./out/\*.o

위와 같이 "*" 앞에는 백슬레쉬를 붙여주어야 한다.
이는 백슬레쉬 없이 그냥 "*"를 사용할 경우 Git이 다른 식으로 인식을 하기에 조금 주의를 해야한다.


반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Move file - git mv  (0) 2012.02.13
Upgrade GIt (in Ubuntu)  (0) 2012.02.13
Git Remote Repository (git init --bare)  (0) 2012.02.11
Undo - Unmodify (변경 취소 - git checkout --)  (0) 2012.02.08
Undo - Unstaging (등록 취소 - git reset HEAD)  (0) 2012.02.07

Git 에 대해서 알아보게 되면 가장 많이 듣게 되는 말이 "분산 개발"이라는 것이다.
이를 가능하게 하는 것이 바로, 서버와 클라이언트가 똑같은 데이터를 갖게 해주는 방법이다.


그런데, Git 에서 생성할 수 있는 repository는 앞에서 잠깐 설명한바와 같이 두 가지가 있다.

   - bare repository
   - work(non-bare) repository

두 가지 모두 같은 데이터를 갖고 있지만, 둘은 분명 다른 목적을 가지고 있다.



bare repository

서버의 역할을 위해서 만들어지는 repository이다.
repository를 bare로 만들게 되면 그 안에서는 수정 작업 등을 할 수 없다.


work (non-bare) repository

수정 등의 실제 업무를 위해서 만들어지는 repository이다.



work(non-bare) repository 생성하는 것은 앞에서 살펴보았고,
여기에서는 bare repository를 생성하는 것을 살펴보도록 하겠다.


$ cd /srv/repository
$ mkdir ./BareRepo.git
$ cd ./BareRepo.git
$ git init --bare


일단, 이렇게 bare repository를 생성은 했는데,
이것을 어떻게 활용하여야 하는지에 대해서는 보다 더 많은 것을 알아보아야 한다.


즉, bare repository는 서버로 사용하겠다는 것인데,
그러기 위해서는 다음에 대한 것들을 더 알아보아야 한다.

   - 프로토콜
   - 계정 관리 (권한)


다음에 bare repository를 이용해서 작업을 하는 것에 대해서 알아보도록 하겠다.

반응형

소스 수정을 했는데 그냥 다시 원위치를 시키고 싶을 경우 어떻게 해야할까?

즉, 저장소에서 가져와서 소스를 막 손을 댔는데,
처음 가져온 상태로 되돌리고 싶을 경우를 말하는 것이다.


 $ git checkout -- ./aviParser.py

위 스크린샷을 보고 설명을 해보겠다.

   - "readme.txt" 파일은 수정 후 commit을 하기 위해서 add를 해놓은 staged 상태이다.
   - "aviParser.py" 파일은 내용을 수정만 해놓은 상태이다.
   - 이 때, "aviParser.py" 파일의 수정한 내용을 취소하고 싶을 경우,
   - [git checkout -- ./aviParser.py]라고 하면, 원위치가 된다.


그런데, 스크린샷을 잘 살펴보면 알 수 있겠지만,
git은 친절하게도 우리가 원하는 것을 다 알려주고 있다.

안내 멘트만 잘 확인하면 별도로 매뉴얼이 필요 없을 정도이다.


다만, 이러한 것들을 위해서는 Git 버전이 1.6.1 이상이어야 한다.
오래된 버전을 사용하고 있다면, 당장 업그레이드를 추천한다!!!



앞에서 살펴본 것과 같이 Undo 기능에 대한 cycle 그래프를 그려보면 아래와 같을 것 같다.


반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Remove file - git rm  (0) 2012.02.12
Git Remote Repository (git init --bare)  (0) 2012.02.11
Undo - Unstaging (등록 취소 - git reset HEAD)  (0) 2012.02.07
Git 도우미 - TortoiseGit (in Windows)  (0) 2012.02.05
One Shot - commit  (2) 2012.01.22

+ Recent posts