Git 에 대해서
git 는 형상관리중 하나로 흔히 알고 있고 svn 과 비슷하지만, svn 과 다른점이 있다.
지금 부터 svn 과 비교하여 설명해 보겠다.
svn 은
작업공간 ----저장소
git 는
작업공간 --스테이지영역--로컬저장소--원격저장소
svn 은 commit 하면 저장소에 소스를 저장하여 지원한다.
git 는 commit 하면 로컬저장소에 저장이된다. 원격 저장소라는 곳에 연결되어 소스를 공유한다.
commit 하기 전에 스테이지영역(인덱스) 추가해야 된다!
만약 빌드를 svn 에 로그인페이지, css 파일을 동시에 빌드했다고 가정할때
로그인페이지 빌드를 미루게되어 revert 해야되면 css파일까지 빌드전으로 복구해애되는 단점이 있다,
git 은 빌드해야되는 파일만 스테이지 영역에 추가하고( git add) 로컬저장소에 commit 하면 된다,
부분적으로 commit할 필요 없는 경우에는 git commit -a 으로 모두 동시에 커밋하면 된다.
commt 마치면 다른사람에게 소스공유 하면된다, 이땐 git push 명령어 사용한다.
내 작업을 올리는데 오류가 발생하여 다른 사람들이 작업한 내용을 먼저 받아야 할때는
git pull 명령어 사용한다, (원격저장소로부터 내려받기 fetch + 내려받은 데이터를 병합 merge)
branch!! 에 알아보자
svn 은 전체 디렉토리 구조를 내려받아야하고 직접 디렉토리를 이동해야된다. 병합도 위치와 리비전을 명시하고 다소 복잡하다.
git 은 전체 디렉토리로 내려받을 필요없고 브랜치전환시 작업파일들이 실시간으로 변경된다.
브랜치 만들기
git branch<name>
git checkout<name>
브랜치 지우기
git branch -d <name>
브랜치 병합
git checkout master
git merge branch
브랜치 목록
git branch
git branch --no-merged
git branch --merged (merge가 되었는지 안되었는를 구분)
rebase?
rebase 는 merge와 동일하게 하나의 브랜치를 다른 브랜치로 병합하는 기능이다.
단 rebase는 작업 히스토리를 다른 브랜치에 차례대로 적용시킨다.
svn 은 최종 작업을 merge 하는데
b1 b2 b3 b4
a o ---------------------------o
b o----------o-----------------o
rebase 는
b1 b2 b3 b4
a o ---------v--------v--------o
b o----------o--------v--------o
공동작업에서 깔끔한 히스토리를 계속 유지해주고 싶다면 rebase를 적극적으로 사용하는 것이 좋다.
그럼 svn 과 차이점은 ?
* 로컬저장소가 존재한다.
* 커밋 이전에 스페이지영역에 추가하는 과정이 있다.
* git 은 각각의 버전을 스냅샷으로 저장한다
git의 특징들!!
* 작업중 브랜치를 변경해야 하는데 커밋하기 애매할때, 간단히 저장해 둘 수 있음.
* 커밋을 순서를 변경하거나 커밋 메시지 심지어는 커밋한 파일도 변경할 수 있음
* 로그를 자기 입맛대로 포맷팅 할수 있음
* 이전 커밋에 추가 할수 있음