Git 저장소를 만들고 Working Directory, Staging Area, Git Directory를 오가는 명령을 알아보자.
> Git 저장소 만들기
- 프로젝트 디렉토리를 만든다
- 프로젝트 디렉토리로 이동한다
- git init 명령을 수행하면 .git 디렉토리가 생긴다 (git 뼈대)
- 버전관리를 시작할려면 git add -> git commit 을 하여 파일을 저장소에 추가해야 시작된다.
$ mkdir pro_git
$ cd pro_git
$ git init
Initialized empty Git repository in d:/git-repositories/pro_git/.git/
$ ls -alrt
total 4
drwxr-xr-x 13 yuwonsys Administ 4096 Dec 24 11:01 ..
drwxr-xr-x 9 yuwonsys Administ 4096 Dec 24 11:01 .git
drwxr-xr-x 3 yuwonsys Administ 0 Dec 24 11:01 .
$ touch README.md
$ git add README.md
$ git commit -a -m "add readme.md file"
[master (root-commit) 3b7d2a8] add readme.md file
0 files changed
create mode 100644 README.md
> Git 복제
- git clone <url>
> 파일 수정하고 저장소에 저장하기
- Tracked(관리대상)와 Untracked(비관리대상) 으로 나뉜다. 즉 한번이라도 commit 되면 관리대상이 된다.
- Tracked는 Unmodified(수정하지 않음)와 Modified(수정함) 그리고 Staged(커밋전) 상태 중 하나이다.
- Clone을 하게 되면 모든 파일은 Tracked이면서 Unmodified 상태이다. 또한 자동으로 자동 Checkout도 한다.
untracked <-> unmodified <-> modified <-> staged <-> commited
- git status : 파일 상태의 확인 tracked와 modified 상태파일이 없거나, Untracked 파일이 있는지 보여준다
- git add <파일명 또는 디렉토리경로명> : Tracked 상태로 만들면서 Staged 상태가 된다
- Modified 상태의 파일을 Stage 하기
// 수정하여서 Changes not staged for commit: 으로 표현된 README.md파일을 Staged 상태로 변경하기
$ git add README.md
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.md
# new file: aa.txt
#
- Stage 된 파일을 다시 Modified 하였을 경우
// 이미 Staged 상태인것을 다시 수정한다
$ vi README.md
// 상태를 확인해 보면 README.md 파일이 Staged 에도 존재하고 modified 상태에도 존재한다.
// 만일 commit을 하게 되면 Staged 상태의 READM.md파일이 커밋된다.
// 다시 git add README.md를 해준다
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.md
# new file: aa.txt
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README.md
#
// modified 상태의 파일을 staged 상태로 변경한다
$ git add README.md
// 다시 상태 확인
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.md
# new file: aa.txt
#
- .gitignore : Untracked 파일을 git 목록에서 제거하기 (로그파일, 빌드환경파일, 프로젝트파일등 무시하고자 하는 것을 명시한다)
- 아무것도 없는 줄이나 # 시작하는 줄 무시
- 표준 Glob 패턴 사용 (Glob패턴은 정규표현식을 단순하게 만든 것으로 보통 쉘에서 사용)
- * : 문자가 하나도 없거나 하나 이상을 의미
- [abc] : 중괄호 안에 있는 문자중 하나를 의미
- ? : 문자 하나를 의미
- [0-9] : 하이픈을 사용하면 그 캐릭터 사이의 문자 하나를 의미
- 디렉토리는 슬래쉬(/)를 끝에 사용
- 느낌표(!)로 시작하는 패턴은 해당 패턴의 파일 무시
# comment
*.a # 확장자 .a 인 파일 무시
!lib.a # lib.a 파일은 무시하지 않음
/TODO # 루트 디렉토리에 있는 TODO 파일 무시
build/ # build/ 디렉토리 모든 파일 무시
doc/*.txt # doc/*.txt는 무시 그러나 doc/another/*.txt 파일은 무시하지 않음
- git diff : Staged와 Unstaged 상태의 변경 내용을 보기 (git status 는 단순 상태 정보만을 보여주지만 git diff는 변경 내용을 볼 수 있다)
- git commit <fileName option> -m <message> : Staging Area 파일을 정일한다. 즉, Staged 파일만 해당 된다. git add 하지 않은 파일은 Modified 상태로 남음.
// master 브랜치에 커밋했고, 체크섬은 9160d86 이라는 의미
$ git commit aa.txt -m "add test file"
[master 9160d86] add test file
1 file changed, 1 insertion(+)
create mode 100644 aa.txt
- git commit -a -m <메세지> : Staging Area 생략하고 commit 하기.
// 내용 수정
$ vi README.md
// 현재 상태 : modified 상태가 있지만 Staging Area를 거치지 앟고 바로 Git Direcotry (로컬 저장소)로 보내고 싶을 경우
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.md
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README.md
#
// -a 옵션 사용 단, 파일은 최소 1회 이상 commit 이 된 것이어야 한다
// master 브랜치에 6efd594 체크섬으로 commit 되었음
$ git commit -a -m "modified README.md"
[master 6efd594] modified README.md
1 file changed, 2 insertions(+)
// commit 이 되었음
$ git status
# On branch master
nothing to commit, working directory clean
- git rm <파일> : 삭제된 파일은 Staging 상태가 된다. 다시 commit을 하면 삭제가 된다. (삭제확인을 위한 장치). 만일 Staging Area에서 포함되지 않게 제거하는 것은 git rm --cached를 사용한다.
- git mv <from파일> <to파일> : 파일 이름 변경하기를 하면 Staging Area에 Renamed 상태로 된다.
- git log : 커밋 히스토리 보기. 가장 최근 커밋이 가장 먼저 나온다. -p 옵션은 커밋의 diff 결과를 보여준다. -2 는 두개의 결과만 보여준다. -p 옵션은 diff이기 때문에 동료의 변경 내용을 빠르게 확인 할 수 있다. --stat 각 커밋의 통계 정보를 보여줌. --pretty는 사용자 정의가능 (oneline, short, full, fuller, format 옵션 예, --pretty=oneline). --graph는 브랜치 그래프를 보여줌
Option Description of Output
%H Commit hash
%h Abbreviated commit hash
%T Tree hash
%t Abbreviated tree hash
%P Parent hashes
%p Abbreviated parent hashes
%an Author name
%ae Author e-mail
%ad Author date (format respects the –date= option)
%ar Author date, relative
%cn Committer name
%ce Committer email
%cd Committer date
%cr Committer date, relative
$s Subject
* git log 옵션들
--since --after : 명시한 날짜 이후의 커밋만 검색. 예)git log --since=2.weeks : 2주 동안 만들어진 커심들만 조회
--until, --before : 명시한 날짜 이전의 커밋만 검색
--author : 저자를 지정할 수 있다.
--committer : 입력한 커밋터의 커밋만 조회
--grep : 커밋 메세지에서 키워드를 검색
-- <path1> <path2> : 해당 경로 밑의 커밋 히스토리를 조회
// commit hash와 subject만을 보여주고 저작자 Yun DoWon 이라는 사람의 23이전 커밋 내역 검색
$ git log --pretty="%h - %s" --author="Yun DoWon" --since="2012-12-23"
b5da470 - delete aa.txt
6efd594 - modified README.md
9160d86 - add test file
3b7d2a8 - add readme.md file
'Git, GitHub > Git Lec02' 카테고리의 다른 글
[Pro Git] Git Alias 사용하기 (0) | 2013.01.08 |
---|---|
[Pro Git] Tag 사용하기 (0) | 2013.01.08 |
[Pro Git] 리모트 저장소 관리하기 (0) | 2012.12.27 |
[Pro Git] Git 설치와 최초 설정하기 (0) | 2012.12.24 |
[Pro Git] DVCS역사 (0) | 2012.12.24 |