필요한 경우 git + svn (둘 다 원격)

3362 단어 gitnichesvn
당신은 지금 일하러 가면서 이 기사를 읽고 있을지도 모릅니다. 이 기사를 읽을 가치가 있습니까? 글쎄요, 여러분 대부분의 대답은 '아니오'입니다. 그러나 소스 코드를 svn에 저장해야 하는 상황(예: 일부 레거시 배포 프로세스로 인해)에 있지만 귀하와 귀하의 팀이 git 사용을 시작하고 풀 요청 및 코드 리뷰가 있다면 이 문서가 도움이 될 것입니다.

개요



목표는 일상적인 커밋에 git을 사용하고 배포 직전(또는 필요할 때) svn을 업데이트하는 것입니다. 인터넷에서 git과 svn을 나란히 실행하는 방법에 대한 많은 자습서를 찾았지만 로컬에서 git을 사용하고 여전히 원격 svn에 커밋하는 방법에 집중합니다. 즉, 팀과 함께 git을 사용할 수 없으며 이 경우 git은 개인 도우미일 뿐입니다. 그러나 원격 git 및 원격 svn을 갖고 동기화할 수 있기를 원합니다.

결국 우리는 2개의 워크플로우를 가지게 될 것입니다.

  • 기능 흐름 - 일상적인 프로그래밍을 위한 프로세스입니다. 버그를 수정하거나 새 기능을 개발하기 위해 마스터 브랜치에서 새 브랜치를 생성할 수 있으며 마지막에 변경 사항을 다시 마스터 브랜치에 병합할 수 있습니다. 이 작업 흐름은 svn과 분리될 수 있으므로 git에서만 수행됩니다.

  • 동기화 흐름 - 이 흐름은 git과 svn 간의 변경 사항을 동기화하기 위한 것입니다. 이 과정을 말로 표현하기는 쉽지만 실제로 작동시키기는 훨씬 더 어려웠습니다. 간단히 말해서 svn에서 모든 변경 사항을 가져오고 git master 브랜치에서 모든 변경 사항을 가져옵니다. 그것들을 함께 혼합하고 현재 소스 코드로 둘 다(git master 브랜치 및 svn) 업데이트합니다. 쉽죠?

  • 설정



    git 원격 저장소와 svn 원격 저장소가 실행 중이라고 가정합니다.

    git 저장소git clone https:\\www.yourgit.com\path\to.git를 복제하여 시작하겠습니다. 이제 .git/config 파일을 열고 다음 행을 추가하십시오.

    [svn-remote "svn"]
        url = https://www.yoursvn.com/url
        fetch = you_can_fetch_some_subdirectory_from_svn
    

    이것은 svn이라는 새로운 원격을 생성하고 git은 이것이 svn 원격이라는 것을 알게 될 것입니다. git-svn에 대한 전체 설명서를 찾을 수 있습니다. 그게 다야. 이제 모두 설정되었으므로 동기화 프로세스를 살펴보겠습니다.

    동기화



    귀하와 귀하의 팀원은 git 분기로 새로운 기능을 개발하고 버그를 수정합니다. 풀 요청을 생성하고 모든 변경 사항을 마스터 브랜치에 병합할 수 있습니다. 그러나 모든 git 변경 사항을 svn과 동기화할 때가 올 것입니다. 팀에서 한 사람이 이 작업을 수행할 수 있어야 합니다. 다음은 svn과 변경 사항을 동기화할 때 따르는 단계입니다.
  • svn 저장소에서 모든 변경 사항을 가져와 릴리스 브랜치로 이동합니다. bridge 분기를 사용하여 svn 변경 사항을 가져옵니다. Bridge 분기는 로컬이어야 하며 git remote에 푸시하지 마십시오.

  • checkout bridge
    git svn rebase
    git checkout -b release/<id>
    

  • 마스터에서 이 릴리스 분기로 모든 변경 사항을 병합합니다.

  • git merge master
    

    If you encounter a conflict while merging, that means somebody changed something in svn and also in git and git cannot solve the issue. Resolve conflicts the same way as you would in standard git merge conflict scenario and then run git add -A and git commit -m "merge master".


  • 릴리스 분기에 있는 모든 변경 사항을 커밋하여 svn을 업데이트합니다. 여기에는 git의 모든 변경 사항이 포함됩니다.

  • git svn dcommit
    

    Now is the right time to push release branch to git remote, but this step is optional git push origin release/<id>


  • 릴리스 분기의 모든 변경 사항을 병합하여 git master 분기를 업데이트합니다. 여기에는 svn의 모든 변경 사항이 포함됩니다.

  • git checkout master
    git merge release/<id>
    git push origin master
    



    보시다시피 이 일련의 단계는 누군가가 여전히 svn을 사용하고 svn 저장소에 변경 사항을 커밋하지만 일부 사람들은 git을 사용하는 특수한 경우도 해결할 수 있습니다. svn에서 모든 변경 사항을 가져와 릴리스 브랜치로 옮길 때 달성됩니다.

    좋은 웹페이지 즐겨찾기