====== 개요 ====== ===== 파일의 상태 ===== git에서는 파일을 Modified, Staged, Commited 세 가지 상태로 관리한다. Modified * 수정만 하고 Stage나 커밋하지 않은 상태 Staged * 현재 수정한 파일을 곧 커밋할 것이라고 표시 Commited * 파일이 로컬에 안전하게 저장된 상태 {{ :005.jpg?500 |}} untracked 파일은 아에 git 파일로 등록되지 않은 것이고 tracked는 버전 관리를 위해 git에 추가된 파일이다. ====== 사용법 ====== ===== 저장소 만들기 ===== 새로운 프로젝트를 생성하기 위해 다음 작업을 수행 이미 존재하는 프로젝트의 최상위 디렉토리나 아니면 새로운 디렉토리를 생성하고 해당 디렉토리로 이동하여 다음 명령을 수행한다. $ git init {{ :001.jpg |}} ===== 변경 내용 확인 ===== 프로젝트 내에 변경된 파일이 있거나 상태가 변경된 파일이 있으면 표시해준다. $ git status {{ :002.jpg |}} ===== 파일 추가 ===== 버전관리 될 파일을 추가한다. 이미 버전 관리 되던 파일 중 변경된 파일을 staged 상태로 만드는 역할도 수행. $ git add test.c {{ :003.jpg |}} ===== 커밋 ===== 버전관리 저장소에 변경내용을 저장한다. $ git commit -m "test.c 소스 파일 생성" {{ :004.jpg |}} 삭제된 파일이 여러개 일 때 한번에 반영하는 방법 $ git add -u // -u 옵션은 update tracked files $ commit -m "Comment" $ git push ===== 리모트 저장소 ===== 기본적으로 git는 로컬 환경에서 동작하지만 협업을 위해 서버를 두고 그곳에 변경 내용을 업데이트하거나 다운로드하는 것이 가능하다. ===== remote 저장소 관련 명령어 ===== ^ git remote add [remote-name] [url] | remote 저장소를 등록 | ^ git remote rename [from] [to] | remote 이름을 변경 | ^ git remote rm [remote-name] | remote 저장소를 삭제 | ^ git fetch [remote-name] | 로컬에는 없고 리모트에는 있는 데이터를 모두 가져옴 | ^ git pull [remote-name] | pull은 fetch도 하고 자동으로 로컬과 머지를 수행 | ^ git push [remote-name] [branch-name] | 리모트 저장소에 push | $ git remote add origin http://treetale.iptime.org/git/warnus/testprj.git remote 서버가 여러 곳이 될 수 있기 때문에 remote-name을 붙여준다. 위 명령에서는 origin이라는 이름의 서버 URL은 http://treetale.iptime.org/git/warnus/testprj.git 이다. warnus@seedtale:~/git/testprj$ git remote add origin http://treetale.iptime.org/git/warnus/testprj.git warnus@seedtale:~/git/testprj$ git remote -v origin http://treetale.iptime.org/git/warnus/testprj.git (fetch) origin http://treetale.iptime.org/git/warnus/testprj.git (push) warnus@seedtale:~/git/testprj$ git push -u origin master Username for 'http://treetale.iptime.org': warnus Password for 'http://warnus@treetale.iptime.org': To http://treetale.iptime.org/git/warnus/testprj.git * [new branch] master -> master Branch master set up to track remote branch master from origin. warnus@seedtale:~/git/testprj$ git push --help push할 때에 origin master 라는 의미는 origin server(앞서 이름 붙였던 URL)의 master branch에 push를 할 거라는 의미이다. ===== Git log ===== lg1 = log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all lg = !"git lg1" ===== 태그 ===== 태그는 일반적으로 버전을 붙여 릴리즈 용도로 사용하기 위해 이름을 붙이는 것으로 v1.0과 같이 사용한다. ^ git tag | 태그 조회 | ^ git tag [tag-name] ([commit-ID]) | 태그 달기 | ^ git tag -a [tag-name] -m ["comment"] | 태그를 달고 설명을 붙인다. | ^ git show [tag-name] | 태그 정보 확인 | ^ git push origin v1.5 | remote 저장소에 태그를 push | ^ git push origin --tags | 여러 태그를 한 번에 push | ===== 기타 명령어 ===== ^ git rm [file-name] | 파일 삭제 | ^ git mv [file-from] [file-to] | 파일이름 변경 | ^ git commit --amend | 커밋 수정 | ^ git reset HEAD [file-name] | staged 상태(git add한 파일) 파일을 unstaged로 변경 | ^ git checkout [file-name] | 수정된 파일을 되돌림 | ^ git blame [file-name] | line by로 어떤 커밋에서 누가 수정했는지 확인 가능 | ===== git 설정 ===== ^ git config color.ui true | 콘솔에서 git output을 컬러로 출력 | ^ git config format.pretty oneline | log 확인 시 한줄로 표시 | ^ git config user.name "이름" | git 사용자 이름 설정 | ^ git config user.email (email address) | git 사용자 e-mail 설정 | ====== 한방에 테스트 해보는 예제 ====== $ mkdir newprj $ cd newprj $ git init // git 로컬 저장소 생성 $ touch file1, file2, file3 $ git status // 변경 이력 확인 # On branch master # # Initial commit # # Untracked files: # (use "git add ..." to include in what will be committed) # # file1 # file2 # file3 nothing added to commit but untracked files present (use "git add" to track) $ git add . $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: file1 # new file: file2 # new file: file3 # $ git commit -m "Added file1, file2, file3" $ git remote add origin http://treetale.iptime.org/git/warnus/newprj.git $ git push origin master $ touch file4 $ git add . $ git commit -m "Added file4" $ git push {{ :gitlab_003.jpg |}} $ git branch testdev $ git branch * master testdev $ git checkout testdev $ git branch master * testdev $ touch branchfile1 $ git add . $ git commit -m "Added branchfile1" $ git push origin testdev {{ :gitlab_004.jpg |}} $ git log $ git checkout master $ git log $ touch masterfile1 $ git add . $ git commit -m "Added masterfile1" $ git push {{ :gitlab_005.jpg |}} $ git merge master testdev $ git push {{ :gitlab_006.jpg |}} ====== Git Tips ====== ===== git 변경된 파일만 따로 뽑기 ===== $ git add -AN $ cp -pv --parents `git diff --name-only` DESTINATION-DIRECTORY ====== 참고 ====== * http://devxpert.egloos.com/viewer/1034155 * [[http://git-scm.com/book/ko/v1/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%99%80-Merge%EC%9D%98-%EA%B8%B0%EC%B4%88|Git 브랜치 - 브랜치와 Merge의 기초]] * [[http://www.slideshare.net/andabi/git-16126636?qid=63cb4ad4-89ef-430d-9ab5-58b3bb5a0cc4&v=default&b=&from_search=2|GIT:기본 개념과 사용법, 그리고 어플리케이션]] * http://stackoverflow.com/questions/1057564/pretty-git-branch-graphs * http://stackoverflow.com/questions/1783405/checkout-remote-git-branch * http://stackoverflow.com/questions/6658313/generate-a-git-patch-for-a-specific-commit * http://tuwlab.com/ece/22225 * Git 교육 사이트 - http://learngitbranching.js.org/