GIT과 SVN의 차이점
SVN은 중앙집중관리방식이고 GIT은 분산관리방식을 사용한다.
SVN 은 내 로컬PC 에서 Commit을 하면 바로 중앙저장소에 반영이 되는 반면
GIT 은 내 로컬PC에서 Commit을 하면 로컬 저장소에 반영이 되고 로컬저장소에서 Push를 하면
원격저장소에 반영이 된다.
SVN의 장점
SVN은 GIT보다 직관적이다.
모든 사람이 중앙서버에 있는 같은 자료를 받아오고
내가 Commit을 하는 순간 모든 사람에게 공유가 된다.
이러한 방식의 단점으로, 만약 두 사람이 하나의 파일을 동시에 수정하고 커밋하였을 때
충돌이 일어날 확률이 높다.
반면 GIT은 직관적이지 못하고 적응하는데에 시간이 필요하다.
내가 한 작업물을 원격저장소에 올리려면
우선 로컬PC 에서 작업내용을 Commit 하여 로컬 저장소에 반영한 후,
원격저장소에서 fetch로 로컬저장소로 마스터 파일을 받아와서
충돌이 나지 않게 merge를 이용하여 합친 다음,
로컬 저장소의 내용을 Push 하여 원격저장소에 올려야만 다른 사람들에게 나의 작업 내용이 공유가 된다.
GIT의 가장 큰 장점
원격저장소의 내용이 모든 협업자들의 각 로컬 저장소에 저장이 되어 있으므로
중앙저장소에 에러가 생기면 모든 작업이 마비되는 SVN 과 다르게
원격저장소에 에러가 생겨도 로컬에서 복구하기 용이하고,
히스토리 관리가 잘 제공되어 있어 히스토리 관리가 용이하다.
Git이 주는 다른 유용한점들
모든 작업이 로컬에서 이루어지고 네트워크 사용은 원격 저장소로 저장할 때 한 번 이루어진다.
웹 상에 저장소를 둘 수 있기 때문에 언제 어디서나 협업을 할 수 있다.
여러 사람이 가지가 뻗어나가듯 자신의 작업을 하기 때문에 이를 브랜치 라고 하는데,
브랜치와 머지의 상호작용을 잘 할 수 있도록 편의성을 잘 제공해주기 때문에 협업이 더욱더 용이해진다.
참조: https://dzzienki.tistory.com/46
GIT의 rebase가 merge와 다른점
rebase도 merge처럼 병합해주는 방법인데,
결과에 차이점이 존재한다.
브랜치를 자주 사용하면 커밋 히스토리가 복잡해진다.
merge의 경우 그 병렬적으로 구성된 히스토리를 그대로 둔채로 병합이 이루어 지는데 반해서,
rebase는 병합을 하되, 히스토리를 단순하게 한줄로 정리 정돈해 주면서 병합해준다.
커밋 히스토리가 두개로 나뉘어 져 있는 것보다 한줄로 되어있을 경우에
보는 이가 한눈에 파악하기 쉬우므로 깔끔한 장점이 있다.
참고로,
Rebase기능을 이해하기 위해서는 base라는 용어를 알면 이해가 쉽다.
feature라는 브랜치가 있다고 가정하자.
feature가 master에서 파생한 곳이 바로 feature입장에서의 base이다.
이제 감이 올 것이다!
rebase라는 용어는 base를 바꾼다라는 의미를 가지고 있다.
그렇다면 feature의 base를 무엇으로 바꾼다는 말일까?
->master의 가장 최신 커밋으로 바꾼다.
rebase명령시 내부적인 처리는 어떻게 되나?
브랜치의 최초 커밋 시점부터 브랜치의 마지막 커밋까지, 임시기억 공간에 브랜치의 각 커밋과 base간의 차이점만 다룬 patch라는 정보들을 저장한다.
그런 후 master의 최신 커밋으로 체크아웃을 한다.
그리고 이 master의 최신 커밋 지점에서 임시기억 공간에 저장했던 patch정보를 순서대로 병합해 나간다.
상황구성
notepad f1.txt
git add f1.txt
git commit -m 1
git checkout -b rb
git log --decorate --all --oneline --graph
notepad re.txt
git commit -m 'R1'
notepad re.txt
git commit -am 'R2'
git checkout master
notepad master.txt
git add master.txt
git commit -m M1
git log --decorate --all --oneline --graph
notepad master.txt
git add master.txt
git commit -m M2
git log --decorate --all --oneline --graph
위의 코드를 따라 commit을 하면 위와 같은 브랜치 형태를 가지게 된다.
rebase사용해 보기
이제 여기서 R2의 base를 1에서 master의 최신 커밋인 M2로 rebase시켜보자.
rebase할때는 R2로 체크아웃부터 하고 진행해야한다.
git checkout rb
git rebase master
rebase사용후에는 마스터가 rb에 히스토리 아래에 위치되는 형태를 볼 수 있다.
git checkout master
Rebase 사용시 주의사항
rebase에서 충돌이 발생하는 상황에 대해서 공부해보자.
다른 사람과 공유하고 있지 않는 것에 대해서만(온라인 저장소에 올리지 않은 것) rebase해야한다.
'Junior 사내스터디' 카테고리의 다른 글
카프카에러와 git config --global core.autocrlf false (0) | 2019.11.14 |
---|---|
자바 기본형과 참조형의 차이와 list, set, map자료구조에 대해 (0) | 2019.11.13 |
스프링부트에서 JdbcTemplate를 직접 사용하여 RestAPI구현하기 (0) | 2019.11.13 |
DBMS에서 데이버베이스란 용어와 스키마라는 용어 (0) | 2019.11.08 |
간략히 REST API는 무엇인가요(어떤 메소드가 있나요)? (0) | 2019.11.08 |
댓글