Git
분산 버전 관리 시스템
클라이언트는 단순히 파일의 마지막 스냅샷을 Checkout 하는 것이 아닌 저장소를 전부 복제한다. 서버에 문제가 생겨도 복제물로 작업을 하면 된다.
Git 기초
- 스냅샷
보통 파일에 대한 변화를 저장한다고 생각하지만 git은 전혀 그렇지 않다. 데이터를 저장하지도 취급하지도 않는다. 대신 git은 데이터를 파일 시스템 스냅샷으로 취급하기때문에 크기가 아주 작다. git은 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 생각한다. 파일이 달라지지 않았으면 새로 저장하지 않고 이전 상태의 파일에 대한 링크만 저장한다.
- 세 가지 상태
Working directory, Staging Area, Repository
Git 설정
Git 설치 후 사용자 이름과 이메일 주소 설정해야함. 프로젝트마다 다르게 설정하고 싶으면 --global
을 빼고 입력하면 됨
$ git config --global user.name "Julian Park"
$ git config --global user.email JPark@example.com
Git 저장소 만들기
$ mkdir repository
$ cd repository
$ git init
git init은 .git 이라는 하위 디렉토리를 만들고 그 안에 git뼈대 파일을 만든다.
기존 저장소 Clone하기
$ git clone http://github.com/chrisaor/git-practice mylocalrepo
내 컴퓨터 mylocalrepo 폴더에 http://github.com/chrisaor
에 있는 git-practice
원격 저장소를 clone해온다.
수정하고 저장소에 저장하기
- untracked : 아직 관리대상이 아니며 새롭게 local폴더에 추가된 파일
- modified : 관리 대상에 있는 파일 중 수정된 파일
- staged : add를 하여 커밋 준비상태
Staged와 Unstaged 상태의 변경 내용 확인
어떤 내용이 변경됐는지 살펴보려면 git diff
를 사용한다.
$ git diff // unstaged 상태 변경부분 확인
$ git diff --staged //staged 상태 변경부분 확인
파일 삭제하기
$ git rm //unstaged상태의 파일 삭제
$ git rm -f //staged상태의 파일 강제삭제
$ git rm --cached //파일은 그대로 두고 Git만 추적하지 않게 함
삭제한 파일은 staged상태가 되고 여기서 커밋을 하면 git은 더이상 이 파일을 추적하지 않는다.
커밋 히스토리 조회
$ git log
커밋 히스토리를 시간순으로 체크섬, 이름, 이메일, 커밋날짜, 커밋메세지를 보여줌
$ git log -p
각 커밋의 diff결과를 보여줌
$ git log --oneline HEAD --all --graph
커밋된 모든 브랜치와 머지 히스토리를 oneline(한줄 옵션)으로 보여주는 아스키 그래프를 출력한다.
커밋 되돌리기
$ git commit --amend
완료한 커밋 수정하기. 어떤 파일을 빼먹거나 너무 일찍 커밋을 했을 때 다시 커밋할 수 있다.
$ git reset HEAD
파일 상태를 unstage로 변경하기
리모트 저장소
리모트 저장소는 다른 사람과 함께 공유할 수 있는 인터넷에 있는 저장소를 말한다.
$ git remote -v
리모트 저장소를 전부 보여줌
$ git remote add [이름] [url]
새 리모트 저장소 추가하기
$ git fetch [리모트 저장소 이름]/[브랜치]
리모트 저장소의 데이터를 모두 로컬로 가져옴
$ git push origin master
master 브랜치를 origin서버에 push하기
$ remote show [리모트 저장소 이름]
리모트 저장소의 구체적인 정보 확인
$ git remote rename [이전 이름] [새로운 이름]
리모트 저장소 이름 바꾸기
$ git remote remove [리모트 저장소 이름]
리모트 저장소 삭제
태그
$ git tag
태그 조회하기
$ git tag -a v1.4 "1.4 version released"
Annotated(주석이 달린) 태그 달기
$ git tage v1.4
옵션 없이 lightweight 태그 달기
Comments