Git
[형상관리] SVN vs GIT
봉주니
2021. 1. 28. 15:34
1. GIT과 SVN
1-1.SVN
- 소스코드의 효율적인 관리를 위한 형상 관리 도구
- 중앙 집중식 소스 관리 (개념적으로 사용하기 쉬움
- SVN은 보통 대부분의기능을 완성해놓고 소스를 중앙 저장소에 COMMIT한다
- 개발자가 자신만의 version history를 가질 수 없다. (local history를 사용하지만 일시적, 내가 몇일전 까지 했던 작업 내역을 확인 가능하지만 버전관리가 되지 않는다.)
- 프로젝트 소스는 SVN 서버의 Trunk라는 곳에 위치 -> 자신의 Local에 Trunk의 소스를 다운 받아(update) 수정 및 추가 후 다시 업로드(commit)하는 방식자신만의 소스를 다른 개발자들과 떨어져서 작업하려면 Branch(원 소스의 나뭇가지)를 만들어 작업 후 자기자신만 접근하여 개발하며 완성되면 Merge 기능을 사용하여 Trunk와 소스를 합치면 된다
- SVN최대 장점은 직관적이다. 하지만 두 사람이 하나의 파일을 동시에 수정하고 커밋하였을 때 충돌이 일어날 확률이 높아진다.
1-2.GIT
- -소스코드의 효율적인 관리를 위한 형상 관리 도구
- -매우 빠른 속도의 분산형 저장소. SVN보다 많은 기능을 지원하는 대신 익숙해지는데 더많은 시간이 필요함.
- -여러명이 동시에 작업하는 병렬 개발이 가능함
- -소스를 최신으로 유지하면서 개발자들이 원하는 때에 원하는 만큼 수정이 가능
git은 개발자가 자신만의 commit history를 가질 수 있고, 개발자와 서버의 저장소는 독립적으로 관리가 가능하다.
commit한 내용에 실수가 있더라고 바로 서버에 영향을 미치지 않는다.
모든 작업이 로컬에서 이루어지고 네트워크 사용은 원격 저장소로 저장할 때 한번이므로 개발시 처리속도가 빠르다.
원격저장소의 내용이 로컬 저장소에 저장되어 있으므로 중앙 저장소에 에러가 생기면 모든 작업이 마비되는 SVN과는 다르게 원격저장소에 에러가 생겨도 로컬에서 복구하기 용이하고, 히스토리 관리가 잘 제공되어 있어 히스토리 관리가 용이하다.
로컬pc에서 작업내용으로 Commit하여 로컬 저장소에서 반영후 -> 원격저장소에서 fetch로 로컬저장소로 마스터 파일을 받아온후 -> 충돌이 나지않게 merge를 이용하여 합친다음 -> 나의 로컬 저장소 내용을 Push 하여 원격 저장소에 올려 다른 사람들에게 나의 작업내용을 공유한다.
소스코드의 유연하게 관리가 가능하다.
2. Git의 Merge와 Rebase의 차이
Merge 장점
- 이해하기쉽다, 원래 브랜치의 컨텍스트를 유치한다. Fast-Forward Merge를 하지 않는다면 브랜치 별로 커밋을 분리해 유지한다. 이러한 기능은 브랜치에 유용하다.
- 원래 브랜치의 커밋들은 변경되지 않고 계속 유지되어 다른 개발자들의 작업과 공유되는 것에 대해 신경쓸 필요가없다.
Merge 단점
- 단순히 모든 사람들이 같은 브랜치에서 작업하기 때문에 merge해야할 때는 merge가 커밋 히스토리상으로 전혀 유용하지 않고 어지럽기만 하다.
Rebase 장점
- 단순한 히스토리
- 여러 개발자들이 같은 브랜치를 공유할 때 커밋을 합치는 가장 직관적이고 깔끔한 방법.
Rease 단점
- 충돌 상황에서 다소복잡. 커밋 순서대로 Rebase를 하는데, 각 커밋마다 충돌해소를 순서대로 해주어야 한다.
- 해당 커밋들을 다른 곳에 푸시한 적이 있다면 히스토리를 다시 쓰는것에 부작용이 발생한다.
- Git에서는 Push할 수 있으나 당신이 혼자 쓰는 리모트 브랜치 에서만 가능하다.
결론
1.여러 개발자들이 같은 브랜치를 공유 할 때는 Pull&Rebase가 히스토리를 깔끔하게 유지하는데 좋음.
2. 완료된 기능 브랜치를 다시 합칠 때는 Merge를 사용.
- Remote 와 Local 에 동시에 존재하는 브랜치를 Pull 할 때에는 Rebase 를 사용하도록 한다.
- 기능 브랜치에 대해서는 Merge 를 사용, Rebase 와 비슷한 동작을 하게되는 Fast-Forward Merge 를 사용하지 않는다.
- 기능 브랜치에 그 부모 브랜치의 내용을 합칠 때는 로컬 브랜치일 때만 Rebase 로 합침.
반응형