在推送到我的远程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)
对于每个标签文件夹.
对于像这样的一次性操作,在留下 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)