我想抛弃SVN for Git。我当前的SVN存储库设置包含在主干(/trunk/projecta
,/trunk/projectb
等下的项目,其中包含/tags/projecta-1.0
处的标记和分支等。我想使用git-svn将它们从SVN中拉出来,为每个项目创建不同的Git存储库。
我已成功将整个SVN仓库撤回到本地Git仓库,但现在所有项目都存在于同一个Git仓库中。此时是否有可能将它们拆开?
答案 0 :(得分:18)
这很棘手。为了得到例如项目的标签,它的所有标签都必须在一个公共目录下,但是你的结构让所有项目都共享一个标签目录。
也许您可以将/tags/projecta-1.0移动到/tags/projecta/1.0等等,然后一次将项目导入到git中:
git-svn init --trunk=trunk/projecta --tags=tags/projecta ...
我不知道这是否会按预期工作,所以 请在您的存储库副本上执行此操作,而不是原始文件!
答案 1 :(得分:4)
我最近不得不用一个相当复杂的案例解决这个问题(从BRL-CAD的整体历史中提取utahrle文件来制作一个单独的GIT项目)并最终使用带有规则文件的svn2git。这些是我的步骤 - 不确定它是否是“正确的”方式,但它似乎在我的案例中取得了成功:
确保安装了svn2git,以及subversion和git (如果尚未存在,则启用git subversion支持。)注意 似乎有多个程序使用项目名称 svn2git - 我用过的就是这个:
http://www.gitorious.org/svn2git
KDE的这篇文章让我开始:
获取svn存储库的本地副本。请注意这一点 不是存储库的签出,而是完整副本 整个SVN repo数据集。 Sourceforge使这成为可能 使用rsync选项 - 有关详细信息,请参阅其文档:http://sourceforge.net/p/forge/documentation/rsync%20Backups/。我不是 确定其他网站。
mkdir svn_repo
cd svn_repo
rsync -av svn.code.sf.net::p/PROJECTNAME/MOUNTPOINT .
cd ..
在svn提交者和git提交者之间创建身份映射
file:account-map
svnname1 Jane Coder <coder@foo.org>
svnname2 Joe Techwriter <writer@foo.org>
创建svn2git过滤规则以捕获utahrle历史记录。 我将在这里发布完整的utahrle示例,说明如何 按照不同目录之间的历史记录,但是 我希望大多数情况都不会那么糟糕:
file:rules
create repository utahrle
end repository
match /brlcad/trunk/libutahrle/
min revision 1
max revision 22796
repository utahrle
branch master
end match
match /brlcad/trunk/tools/
min revision 1
max revision 22814
repository utahrle
branch master
end match
match /brlcad/trunk/src/other/libutahrle/
min revision 22797
repository utahrle
branch master
end match
match /brlcad/trunk/src/other/URToolkit/
min revision 22815
repository utahrle
branch master
end match
match /
end match
运行svn-all-fast-export生成存档(svn_repo是保存目录 您的subversion文件的完整副本):
svn-all-fast-export --identity-map account-map --rules rules svn_repo
使用上面的规则文件,utahrle保存了生成的git 库。使用gitk检查我们希望看到的历史记录 实际存在,然后(如果你使用这个回购作为在线 源档案)使用标准的sourceforge程序 用于上传现有的git存储库。
答案 2 :(得分:1)
当存储库布局非常复杂时,有一个名为svn2git
的工具可以使用规则集转换复杂的存储库。
您可以在此处下载:http://gitorious.org/svn2git/ 该程序需要编译,需要Qt,Apache和SVN头文件。
答案 3 :(得分:1)
Subversion存储库的一次性转换的另一个程序是Svn2Git(与vdboor的答案不同),它依赖性较少,并且对我的存储库做得很好。