我想抛弃SVN for Git.我现在的SVN仓库设置有下躯干(项目/trunk/projecta
,/trunk/projectb
等有标签,并在树枝/tags/projecta-1.0
等).我想通过使用git-svn将它们从SVN中拉出来为每个项目创建不同的Git存储库.
我已成功将整个SVN仓库撤回到本地Git仓库,但现在所有项目都存在于同一个Git仓库中.此时是否有可能将它们分开?
Mar*_*tos 18
这很棘手.为了获得例如项目的标签,其所有标签必须位于公共目录下,但是您的结构具有共享单个标签目录的所有项目.
也许您可以将/tags/projecta-1.0移动到/tags/projecta/1.0等等,然后一次将项目导入git:
git-svn init --trunk=trunk/projecta --tags=tags/projecta ...
Run Code Online (Sandbox Code Playgroud)
我不知道这是否会按预期工作,所以请在您的存储库副本上执行此操作,而不是原始副本!
我最近不得不用一个相当复杂的案例来解决这个问题(从 BRL-CAD 的整体历史中提取 utahrle 文件以创建一个单独的 GIT 项目),并最终使用带有规则文件的 svn2git。这些是我的步骤 - 不确定这是否是“正确”的方式,但它似乎在我的案例中取得了成功:
确保安装了 svn2git,以及 subversion 和 git(如果尚未存在,则启用 git subversion 支持。)请注意,似乎有多个程序使用项目名称 svn2git - 我使用的就是这个:
http://www.gitorious.org/svn2git
KDE 的这篇文章让我开始:
获取 svn 存储库的本地副本。请注意,这不是存储库的检出,而是整个 SVN 存储库数据集的完整副本。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 ..
Run Code Online (Sandbox Code Playgroud)在 svn 提交者和 git 提交者之间创建身份映射
文件:帐户地图
svnname1 Jane Coder <coder@foo.org>
svnname2 Joe Techwriter <writer@foo.org>
Run Code Online (Sandbox Code Playgroud)创建 svn2git 过滤规则来捕获 utahrle 历史记录。我将在这里发布完整的 utahrle 示例,该示例展示了如何跟踪不同目录之间的历史记录,但我希望大多数情况不会那么糟糕:
文件:规则
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
Run Code Online (Sandbox Code Playgroud)运行 svn-all-fast-export 生成存档(svn_repo 是保存 subversion 文件完整副本的目录):
svn-all-fast-export --identity-map 帐户映射 --rules 规则 svn_repo
使用上述规则文件,utahrle 保存生成的 git 存储库。使用 gitk 检查我们期望看到的历史记录是否确实存在,然后(如果您使用此存储库作为在线源存档)使用标准 sourceforge 程序上传现有的 git 存储库。