Git 사용법 정리

Git-logo.svg

SVN은 간편하고 개념이 상당히 쉬웠는데..
git로 오니.. 복잡시럽다.. 이런 복잡스러움을 거북이git가 해소해줄줄 알았는데..
차라리 콘솔 모드로 하는게 더 자연스럽고.. 파워풀하다..

git를 사용하기위한 방법을 조금씩.. 실제 테스트 해보면서 정리해본다..

git 클라이언트
msysgit: http://msysgit.github.io/
git-windows-mintty: https://github.com/rpavlik/git-windows-mintty

SSH key 등록
Git Bash를 실행후에.. 아래를 실행해서 키를 생성.

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/ihmin/.ssh/id_rsa):

이제 /c/Users/ihmin/.ssh 폴더에 id_rsa, id_rsa.pub 파일이 생성됨.
생성된 id_rsa.pub 파일을 편집기로 열어서 문자열을 전체 복사한후..
github나 gitlab에 등록하면 끝.

addsshkey

프로젝트 clone

$ git clone git://xxx.git
$ ls
xxx

Git 설정

# New 라인 문자 그대로 유지
$ git config core.autocrlf false 
# 컬러 표시
$ git config color.ui true
# Writing objects: 100% 이후 hang 되는 문제 수정
$ git config sendpack.sideband false
# 이름 설정
git config user.name "Rupert Monkey"
# 이메일 설정
git config user.email rupert@example.com

Ignore 파일 지정하기

$ cat .gitignore
*.[oa]
*~

.gitignore Example

# a comment - 이 줄은 무시한다.
# 확장자가 .a인 파일 무시
*.a
# 윗 줄에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않는다.
!lib.a
# 루트 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않는다.
/TODO
# build/ 디렉토리에 있는 모든 파일은 무시한다.
build/
# doc/notes.txt 같은 파일은 무시하고 doc/server/arch.txt같은 파일은 무시하지 않는다.
doc/*.txt
# doc 디렉토리 아래의 모든 .txt 파일을 무시한다.
doc/**/*.txt

Index에 파일 추가하기

# 파일 하나 추가하기
$ git add test.txt

# 전체 파일 및 하위 폴더들 추가하기
$ git add .

# 특정 파일 추가 취소
$ git reset test.txt

# 전체 파일 추가 취소
$ git reset

HEAD에 수정된 코드 반영하기

# commit 하기
$ git commit -am "some bug fix."
[master 9f0132f] ddddddddddd
 1 file changed, 9 insertions(+)

HEAD 상태로 되돌리기 ??

# test.txt를 HEAD(이전 commit) 상태로 되돌리기
$ git checkout -- test.txt

저장소로 반영하기

# push 하기
$ git push origin master
# 아래와 같이 push 하면 다음부터는 git push 만으로 original master에 push해줌.
$ git push -u origin master
# 진행 상태 표시
$ git push --progress origin master

저장소로부터 최신 코드로 업데이트

$ git pull origin master

특정 폴더만 checkout 받기

$ mkdir xxx
$ cd xxx
$ git init
$ git remote add -f origin http://git.xxx.git
$ git config core.sparsecheckout true
$ echo processwizard/release/ >> .git/info/sparse-checkout
$ git pull origin master

태그(Tag)

# tag 붙이기
$ git tag -a v2.0-rev1 -m "Ver 2.0 Rev.1"

# tag 목록
$ git tag
v2.0-rev1

# 마지막 tag 이름 보기
$ git describe --tags
v2.0-rev2

# 특정 tag 가리키는 commit id 보기
$ git rev-parse v2.0-rev1 
51b366c13f565453c9462bea86490d6770347430

# tag push
$ git push --tags

# tag 지우기
$ git tag -d v2.0-rev1

# 원격지 tag 지우기
$ git push origin :tags/v2.0-rev1

# 특정 tag checkout
$ git clone --branch v2.0-rev1 http://git.xxx.git

삭제된 파일 복구

# 테스트로 파일 삭제함..
$ rm -f processwizard/build.bat
$ rm -f processwizard/clean.bat

# 삭제된 파일 목록 확인
$ git ls-files -d
processwizard/build.bat
processwizard/clean.bat

# 삭제된 파일중 하나만 복구
$ git checkout processwizard/build.bat

# 삭제된 파일 전체 복구
$ git ls-files -d | xargs git checkout --