주니봉
  • [형상관리] SVN vs GIT
    2021년 01월 28일 15시 34분 54초에 업로드 된 글입니다.
    작성자: 봉주니

    1. GIT과 SVN 

    1-1.SVN

    1. 소스코드의 효율적인 관리를 위한 형상 관리 도구
    2. 중앙 집중식 소스 관리 (개념적으로 사용하기 쉬움
    3. SVN은 보통 대부분의기능을 완성해놓고 소스를 중앙 저장소에 COMMIT한다
    4. 개발자가 자신만의 version history를 가질 수 없다. (local history를 사용하지만 일시적, 내가 몇일전 까지 했던 작업 내역을 확인 가능하지만 버전관리가 되지 않는다.)
    5. 프로젝트 소스는 SVN 서버의 Trunk라는 곳에 위치 -> 자신의 Local Trunk의 소스를 다운 받아(update) 수정 및 추가 후 다시 업로드(commit)하는 방식자신만의 소스를 다른 개발자들과 떨어져서 작업하려면 Branch(원 소스의 나뭇가지)를 만들어 작업 후 자기자신만 접근하여 개발하며 완성되면 Merge 기능을 사용하여 Trunk와 소스를 합치면 된다
    6.  SVN최대 장점은 직관적이다.  하지만 두 사람이 하나의 파일을 동시에 수정하고 커밋하였을 때 충돌이 일어날 확률이 높아진다.

    1-2.GIT

    1.    -소스코드의 효율적인 관리를 위한 형상 관리 도구
    2.    -매우 빠른 속도의 분산형 저장소. SVN보다 많은 기능을 지원하는 대신  익숙해지는데 더많은 시간이 필요함.
    3.    -여러명이 동시에 작업하는 병렬 개발이 가능함
    4.    -소스를 최신으로 유지하면서 개발자들이 원하는 때에 원하는 만큼 수정이 가능

    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 로 합침.

    출처 : shyvana.tistory.com/11

    반응형
    댓글