Synchronize Git repositories
Git 리포지토리를 원본 SVN 리포지토리의 새 커밋과 동기화하기는 쉽습니다. 따라서 마이그레이션 과정에서 원활한 전환 기간을 마련하여 이 기간에 기존 SVN 작업 흐름을 계속 사용하면서 Git를 사용한 시험을 시작할 수 있습니다.
양방향 동기화는 가능합니다. 그러나 SVN에서 Git로 일방향 동기화를 권장합니다. 전환 기간에는 SVN 리포지토리로만 커밋할 수 있고 Git 리포지토리로는 커밋할 수 없습니다. 팀이 전환할 준비가 됐다는 확신이 들면 마이그레이션 프로세스를 완료하고 변경사항을 SVN이 아닌 Git으로 커밋을 시작할 수 있습니다.
그 동안 SVN 리포지토리로 계속해서 커밋하고 필요할 때마다 Git 리포지토리를 동기화해야 합니다. 이 프로세스는 변환 단계와 비슷하지만 증가하는 변경사항만 처리하므로 훨씬 더 효율이 높아야 합니다.
작성자 파일 업데이트
SVN 사용자 이름을 전체 이름 및 이메일 주소로 매핑할 때
사용한 authors.txt는 동기화 과정에 반드시 필요합니다. 지금까지 사용했던 ~/GitMigration/authors.txt 위치에서 이 파일을 옮겼다면
이 파일의 위치를 다음 주소로 업데이트해야 합니다.
git config svn.authorsfile
새 개발자가 마지막 동기화(또는 첫 복제) 이후 SVN 리포지토리로 커밋했다면 작성자 파일도 이에 따라 업데이트해야 합니다. 새 사용자를 authors.txt에 수동으로 추가하여 업데이트하거나 다음 섹션에서 설명하는 것처럼
--authors-prog 옵션을 사용할
수도 있습니다.
1회성 동기화라면 일반적으로 작성자 파일을 직접 편집하는 것이 더 쉬울 수도 있습니다. 그러나 자동 동기화 즉, 예약된 동기화 작업을 수행하는 중인 경우에는
--authors-prog 옵션을 사용하는 것이 더 좋습니다.
관련 자료
전체 Git 리포지토리를 이동하는 방법
솔루션 보기
Bitbucket Cloud에서 Git에 대해 알아보기
Git 작성자 자동 생성
작성자 파일을 업데이트할 필요가 없다면 다음 섹션으로 건너 뛰어도 됩니다.
git svn 명령에는 --authors-prog라는
옵션이 있습니다. 이 옵션은 SVN 사용자 이름을 Git 작성자로 자동
변형하는 스크립트를 가리킵니다. SVN 사용자 이름을 유일한 인수로 허용하여 기존 작성자 파일의 오른쪽과 같이 Name 형태의 단일 행으로 반환하도록 이 스크립트를 구성할 필요가
있습니다. 이 옵션은 새 개발자를 프로젝트에 주기적으로 추가할 필요가 있을 때 매우 유용할 수 있습니다.
--authors-prog 옵션을
사용하려면 ~/GitMigration 내에
authors.sh라는 파일을 만들어야 합니다
. 다음 행을 authors.sh에 추가하여
authors.txt에 없는 작성자의 더미 Git 이름과 이메일을
반환합니다.
echo "$1 <$1@example.com>"
다시 한 번 강조하지만, 이렇게 하면 SVN 사용자 이름만을 기준으로 더미 이름과 이메일이 생성되므로 더 의미 있는 매핑을 제공할 수 있는 경우에는 SVN 사용자 이름을 자유롭게 변경할 수 있습니다.
새 SVN 커밋 가져오기
SVN과 달리 Git은 업스트림 커밋을 다운로드하는 것과 프로젝트에 통합하는 것을 구분합니다. 이러한 다운로드 작업을 "가져오기(fetching)"라고 하며 통합 작업은 병합(merging)이나 다시 배치(rebasing)를 통해 가능합니다. ~/GitMigration 디렉토리에서 다음 명령을 실행하면
원본 SVN 리포지토리에서 새 커밋을 가져옵니다.
git svn fetch
Git 리포지토리의 원격 브랜치만을
업데이트하기 때문에 이는 이전 단계의 git svn 복제 명령과 유사합니다. 로컬 브랜치에는 아직 어떠한 업데이트 내용도 반영되지 않습니다. 반대로 원격 브랜치는 SVN 리포지토리의 이력과 정확하게 일치해야 합니다.
--authors-prog 옵션을 사용하는 경우
다음과 같이 위 명령에 이 옵션을 포함해야 합니다.
git svn fetch --authors-prog=authors.sh
가져온 커밋과 동기화
다운로드한 커밋을 리포지토리에 적용하려면 다음 명령어를 실행합니다.
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar sync-rebase
그러면 가져온 커밋이 원격 커밋과 일치하도록 이러한 커밋을 로컬 브랜치로 다시 배치합니다. 이제 git 로그 출력에서 새 커밋을 볼 수 있어야
합니다.
Git 리포지토리 정리(반복)
Git-clean 스크립트를 다시 실행하여
마지막 동기화 이후 원본 SVN 리포지토리에서 삭제되어 더 이상 사용할 수 없게 된 태그나 브랜치를 제거하는 것이 좋습니다.
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force
이제는 로컬 Git 리포지토리도 SVN 리포지토리와 동기화되어야 합니다.
요약
이러한 전환 기간에 개발자는 원보노 SVN 리포지토리로만 커밋해야 합니다. Git 지포지토리는 앞서 설명한 동기화 과정을 통해서만 업데이트해야 합니다. 이는 양방향 동기화 작업 흐름을 관리하는 것보다 훨씬 더 쉽지만 Git을 빌드 과정에 통합할 수도 있습니다.
이 문서 공유
다음 토픽
여러분께 도움을 드릴 자료를 추천합니다.
이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.