将SVN子目录转换为Git
我想放弃SVN换Git。我当前的SVN存储库设置在trunk下有项目(将SVN子目录转换为Git,svn,git,git-svn,Svn,Git,Git Svn,我想放弃SVN换Git。我当前的SVN存储库设置在trunk下有项目(/trunk/projecta,/trunk/projectb,等等,标记和分支位于/tags/projecta-1.0,等等)。我想通过使用Git SVN将这些项目从SVN中取出,为每个项目创建不同的Git回购协议 我已经成功地将整个SVN回购协议拉到本地Git回购协议中,但所有项目现在都存在于同一Git回购协议中。在这一点上可以把它们分开吗?这很棘手。例如,要获取项目的标记,其所有标记必须位于一个公共目录下,但您的结构中的
/trunk/projecta
,/trunk/projectb
,等等,标记和分支位于/tags/projecta-1.0
,等等)。我想通过使用Git SVN将这些项目从SVN中取出,为每个项目创建不同的Git回购协议
我已经成功地将整个SVN回购协议拉到本地Git回购协议中,但所有项目现在都存在于同一Git回购协议中。在这一点上可以把它们分开吗?这很棘手。例如,要获取项目的标记,其所有标记必须位于一个公共目录下,但您的结构中的所有项目共享一个标记目录 也许您可以将/tags/projecta-1.0移动到/tags/projecta/1.0等等,然后将项目一次导入一个git:
git-svn init --trunk=trunk/projecta --tags=tags/projecta ...
我不知道这是否会像预期的那样起作用,因此请在存储库的副本上执行此操作,而不是原始版本当存储库布局非常复杂时,有一个名为
svn2git
的工具,可以使用规则集转换复杂的存储库
你可以在这里下载:
该程序需要编译,它需要Qt、Apache和SVN头文件。另一个用于一次性转换Subversion存储库的程序是(与vdboor的答案不同),它具有较少的依赖性,并且为我的存储库做了大量工作。我最近不得不用一个相当复杂的案例来解决这个问题(从BRL-CAD的总体历史中提取utahrle文件以创建一个单独的GIT项目)并最终使用svn2git和一个规则文件。这些是我的步骤-不确定这是否是“正确”的方法,但在我的案例中似乎已经成功:
mkdir svn_repo
cd svn_repo
rsync -av svn.code.sf.net::p/PROJECTNAME/MOUNTPOINT .
cd ..
svnname1 Jane Coder <coder@foo.org>
svnname2 Joe Techwriter <writer@foo.org>
我不太关心标记/分支,所以这非常有效。我在我的Ubuntu Lynx盒上执行了这一操作:“git svn克隆--无元数据--trunk=trunk/projecta projecta”“”这是一个相当巧妙的方法,最简单的方法是创建两个新的git项目,并相应地将projecta和ProjectB复制到git repo,但这将丢失所有历史记录:(我听说从长远来看,将Subversion转换为Git比Git svn更好(因为Git svn专门用于提交回),但我没有提到hand。
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