在SVN到Git迁移期间,将SVN远程分支和标记转换为本地Git分支/标记的正确方法是什么

Bra*_*ley 7 git git-svn

在推送到我的远程Git仓库并完全放弃SVN之前,将git-svn init/git-svn提取到本地Git分支/标记之后,使远程分支/标记存在的正确方法是什么?

我有:

  • git svn init
  • svn-remote "svn".git/config文件的部分更新为以下内容:

    url = file:///Users/Developers/git_transition/svn_repo
    fetch = cascade/trunk:refs/remotes/svn/trunk
    branches = cascade/branches/{5.0GA_CLEANUP,drag-n-drop-def-builder,help-text,hib-annotations,hibernate-annotations,image-editor,ldapconfig,liquibase,move-rename-prototype,progress-bar,progress-bar2,quartz-upgrade,recyclebin,rendering_metrics,shuttle_upgrade,spring3,web-services-no-nuller}:refs/remotes/svn/*
    branches = cascade/branches/{6.x,5.x,4.x,3.x,archive}/*:refs/remotes/svn/*
    tags = cascade/tags/{3.7.x,4.x,5.x,6.x,old-releases}/*:refs/remotes/svn/tags/*
    
    Run Code Online (Sandbox Code Playgroud)
  • git svn fetch

是否git-svn clone做一些超出的init /取,轮流这些分支/标签为当地的呢?

我尝试了关于Pro Git建议,但除了空的6.x,5.x,4.x,3.x,标签和存档目录之外,.git/refs/remotes/svn /目录中没有任何内容.我确实验证了远程分支在那里git branch -r.

有人建议我需要系统地检查所有远程分支机构作为本地分支机构:git checkout -b <local_branch_name> <svn_remote_branch_name>但我没有得到任何确定的答案.

已经能够使用该脚本来CONVER标签:

git for-each-ref --format="%(refname)" refs/remotes/svn/tags/6.x |
grep -v @ | while read tag; do GIT_COMMITTER_DATE="$(git log -1
--pretty=format:"%ad" "$tag")" GIT_COMMITTER_EMAIL="$(git log -1
--pretty=format:"%ce" "$tag")" GIT_COMMITTER_NAME="$(git log -1
--pretty=format:"%cn" "$tag")" git tag -m "$(git log -1
--pretty=format:"%s%n%b" "$tag")" ${tag#refs/remotes/svn/tags/6.x/}
"$tag"; done
Run Code Online (Sandbox Code Playgroud)

对于每个标签文件夹.

Von*_*onC 3

对于像这样的一次性操作,在留下 SVN 存储库之前,我喜欢使用 ruby​​ 脚本svn2git克隆它

=== 示例

假设我在 svn 中有这段代码:

  trunk
    ...
  branches
    1.x
    2.x
  tags
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0
Run Code Online (Sandbox Code Playgroud)

git-svn将遍历提交历史记录来构建新的 git 存储库。
它将把所有分支和标签导入为远程 svn 分支,而你真正想要的是 git-native 本地分支和 git tag 对象。
所以导入这个项目后我会得到:

  $ git branch
  * master
  $ git branch -a
  * master
    1.x
    2.x
    tags/1.0.0
    tags/1.0.1
    tags/1.0.2
    tags/1.1.0
    tags/2.0.0
    trunk
  $ git tag -l
  [ empty ]
Run Code Online (Sandbox Code Playgroud)

svn2git完成项目后,您将得到以下结果:

  $ git branch
  * master
    1.x
    2.x
  $ git tag -l
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0
Run Code Online (Sandbox Code Playgroud)