나는 Git 매뉴얼, FAQ, Git-SVN 크래시 코스 등을 읽었으며 모두 이것과 그에 대해 설명하지만 어디에도 다음과 같은 간단한 지시 사항을 찾을 수 없습니다.
SVN 저장소 : svn://myserver/path/to/svn/repos
Git 저장소 : git://myserver/path/to/git/repos
git-do-the-magic-svn-import-with-history \
svn://myserver/path/to/svn/repos \
git://myserver/path/to/git/repos
나는 그것이 그렇게 단순하다고 기대하지 않으며, 그것이 단일 명령이라고 기대하지 않습니다. 그러나 나는 아무것도 설명하지 않으려 고 기대합니다.이 예를 들어 어떤 단계를 취해야하는지 말하십시오.
답변
마법:
$ git svn clone http://svn/repo/here/trunk
Git과 SVN은 매우 다르게 작동합니다. Git을 배우고 SVN 업스트림의 변경 사항을 추적하려면을 배워야 git-svn
합니다. git-svn
메인 페이지는 좋은 예 섹션이 있습니다 :
$ git svn --help
답변
users.txt
SVN 사용자를 Git에 맵핑하기위한 사용자 파일 (예 :)을 작성하십시오.
user1 = First Last Name <email@address.com>
user2 = First Last Name <email@address.com>
...
이 단일 라이너를 사용하여 기존 SVN 저장소에서 템플릿을 작성할 수 있습니다.
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt
파일에없는 SVN 사용자가 없으면 SVN이 중지됩니다. 그러나 그 후에는 파일을 업데이트하고 중단 한 부분을 선택할 수 있습니다.
이제 저장소에서 SVN 데이터를 가져옵니다.
git svn clone --stdlayout --no-metadata --authors-file=users.txt svn://hostname/path dest_dir-tmp
이 명령은 새로운 Git 저장소를 생성 dest_dir-tmp
하고 SVN 저장소를 가져 오기 시작합니다. “–stdlayout”플래그는 일반적인 “trunk /, branches /, tags /”SVN 레이아웃을 의미합니다. 레이아웃 다릅니다은, 익숙해 경우 --tags
, --branches
, --trunk
옵션 (일반적으로 git svn help
).
모든 공통 프로토콜이 허용됩니다 svn://
, http://
, https://
. URL은 http://svn.mycompany.com/myrepo/repository 와 같은 기본 저장소를 대상으로해야합니다 . URL 문자열은 있어야 하지 포함 /trunk
, /tag
또는 /branches
.
이 명령을 실행 한 후에는 작업이 “중단 / 정지”된 것처럼 보이는 경우가 많으며 새 리포지토리를 초기화 한 후 오랜 시간 동안 중단 될 수 있습니다. 결과적으로 마이그레이션 중임을 나타내는 로그 메시지가 표시됩니다.
또한이 생략하면 참고 --no-metadata
플래그를 커밋 메시지에, 힘내 해당 SVN 개정에 대한 정보를 추가합니다 (예 git-svn-id: svn://svn.mycompany.com/myrepo/<branchname/trunk>@<RevisionNumber> <Repository UUID>
)
사용자 이름을 찾을 수 없으면 users.txt
파일을 업데이트 한 후 다음을 수행하십시오.
cd dest_dir-tmp
git svn fetch
대규모 프로젝트가있는 경우 모든 Subversion 커밋을 가져올 때까지 마지막 명령을 여러 번 반복해야 할 수도 있습니다.
git svn fetch
완료되면 Git은 SVN trunk
을 새로운 지점으로 체크 아웃합니다 . 다른 지점은 리모컨으로 설정됩니다. 다음을 사용하여 다른 SVN 분기를 볼 수 있습니다.
git branch -r
저장소에 다른 원격 브랜치를 유지하려면 각 원격 브랜치를 수동으로 작성하려고합니다. (건너 뛰기 트렁크 / 마스터)이 작업을 수행하지 않으면 마지막 단계에서 분기가 복제되지 않습니다.
git checkout -b local_branch remote_branch
# It's OK if local_branch and remote_branch are the same name
태그는 분기로 가져옵니다. 로컬 브랜치를 생성하고, 태그를 만들고, 브랜치를 삭제하여 Git에서 태그로 사용하십시오. “v1″태그로이를 수행하려면 :
git checkout -b tag_v1 remotes/tags/v1
git checkout master
git tag v1 tag_v1
git branch -D tag_v1
GIT-SVN 저장소를 깨끗한 Git 저장소로 복제하십시오.
git clone dest_dir-tmp dest_dir
rm -rf dest_dir-tmp
cd dest_dir
원격 브랜치에서 이전에 생성 한 로컬 브랜치는 원격 브랜치로만 새로운 복제 된 리포지토리에 복사됩니다. (건너 뛰기 트렁크 / 마스터) 유지하려는 각 지점에 대해 다음을 수행하십시오.
git checkout -b local_branch origin/remote_branch
마지막으로, 삭제 된 임시 저장소를 가리키는 클린 Git 저장소에서 원격을 제거하십시오.
git remote rm origin
답변
Subversion 리포지토리를 Git 리포지토리로 마이그레이션하십시오 . 먼저 Subversion 커밋 작성자 이름을 Git 커미터에 매핑하는 파일을 만들어야합니다 ~/authors.txt
.
jmaddox = Jon Maddox <jon@gmail.com>
bigpappa = Brian Biggs <bigpappa@gmail.com>
그런 다음 Subversion 데이터를 Git 저장소로 다운로드 할 수 있습니다.
mkdir repo && cd repo
git svn init http://subversion/repo --no-metadata
git config svn.authorsfile ~/authors.txt
git svn fetch
Mac을 사용하는 git-svn
경우을 설치하여 MacPorts에서 얻을 수 있습니다 git-core +svn
.
서브 버전 리포지토리가 원하는 git 리포지토리와 동일한 시스템에있는 경우 초기화 단계에이 구문을 사용할 수 있습니다. 그렇지 않으면 모두 동일합니다.
git svn init file:///home/user/repoName --no-metadata
답변
나는 svn2git 스크립트를 사용했고 매력처럼 작동합니다.
답변
git-svn을 지속적으로 사용하기 전에 Git에 익숙해지는 것이 좋습니다. 즉 SVN을 중앙 집중식 저장소로 유지하고 Git을 로컬로 사용하는 것이 좋습니다.
그러나 모든 기록이 포함 된 간단한 마이그레이션의 경우 몇 가지 간단한 단계는 다음과 같습니다.
로컬 저장소를 초기화하십시오.
mkdir project
cd project
git svn init http://svn.url
수정본 가져 오기를 시작하려는 시점을 표시하십시오.
git svn fetch -r42
(또는 모든 rev에 대해 “git svn fetch”)
그 이후로 실제로 모든 것을 가져옵니다.
git svn rebase
Gitk로 가져 오기 결과를 확인할 수 있습니다. 이것이 Windows에서 작동하는지 확실하지 않으며 OSX 및 Linux에서 작동합니다.
gitk
SVN 리포지토리를 로컬로 복제 한 경우보다 쉬운 협업을 위해 중앙 집중식 Git 리포지토리로 푸시 할 수 있습니다.
먼저 빈 원격 저장소를 만드십시오 ( GitHub ?)
git remote add origin git@github.com:user/project-name.git
그런 다음 선택적으로 메인 브랜치를 동기화하여 풀 작업에 원격 마스터가 로컬 마스터와 자동으로 병합됩니다.
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
그 후, 당신은 내 자신을 시도하는 데 관심이있을 수 있습니다 git_remote_branch
원격 지점을 다루는 데 도움이되는 도구 .
첫 번째 설명 게시물 : ” 깃 원격 지점 “
최신 버전에 대한 후속 조치 : ” git_remote_branch와 공동 작업하는 시간 “
답변
Subversion에서 Git으로의 원활한 마이그레이션 (또는 두 가지를 동시에 사용)을위한 새로운 솔루션이 있습니다 : SubGit .
이 프로젝트를 직접 진행하고 있습니다. 우리는 리포지토리에서 SubGit을 사용합니다. 일부 팀원은 Git과 Subversion을 사용하며 지금까지는 매우 잘 작동합니다.
SubGit을 사용하여 Subversion에서 Git으로 마이그레이션하려면 다음을 실행해야합니다.
$ subgit install svn_repos
...
TRANSLATION SUCCESSFUL
그런 다음 svn_repos / .git에 Git 저장소를 가져 와서 복제하거나 계속해서 Subversion과이 새로운 Git 저장소를 함께 사용할 수 있습니다. SubGit은 항상 동기화 상태를 유지합니다.
Subversion 저장소에 여러 프로젝트가 포함 된 경우 svn_repos / git 디렉토리에 여러 Git 저장소가 작성됩니다. 번역을 실행하기 전에 사용자 정의하려면 다음을 수행하십시오.
$ subgit configure svn_repos
$ edit svn_repos/conf/subgit.conf (change mapping, add authors mapping, etc)
$ subgit install svn_repos
와 SubGit 을 git-svn이 아닌 순수 Git으로 마이그레이션하여 Subversion을 필요한 한 계속 유지하면서 사용을 시작할 수 있습니다 (예 : 이미 구성된 빌드 도구).
도움이 되었기를 바랍니다!
답변
공식 git-svn 맨 페이지를 참조하십시오 . 특히 “기본 예”를보십시오.
전체 Subversion 관리 프로젝트 추적 및 기여 (트렁크, 태그 및 브랜치로 완료) :
# Clone a repo (like git clone):
git svn clone http://svn.foo.org/project -T trunk -b branches -t tags