将git存储库克隆到subversion存储库的子目录中

时间:2012-05-20 13:01:11

标签: git git-svn

我有一个现有的SVN存储库,它有一个“公共”目录,包含不同项目共享的模块。 布局是这样的:

http://example.com/svn/trunk/common/module_1
http://example.com/svn/trunk/common/module_2
...
http://example.com/svn/trunk/common/module_X

由于各种原因,我正在使用git管理其他一些项目。 我需要在SVN和git项目中使用 module_X ,所以我打算使用git-svn。 但是,会出现以下问题:

user@host:/repos$ git svn clone http://example.com/svn/trunk/common/module_X destination

此命令将在 / repos / destination 中创建一个新的git存储库,并将 module_X 内容提取到其中。 我需要完成的是将 module_X 放入 / repos / destination / module_X ,而不是直接将其内容提取到 / repos / destination /

一开始似乎是一个选择是使用

user@host:/repos$ git svn clone =--ignore-paths='^((?!module_X).*)$' http://example.com/svn/trunk/common/ destination

将在 / repos / destination 中创建一个存储库,并在子目录 / repos / destination / module_X 中创建一个存储库。 但问题是我的SVN存储库有一个相当大的修订历史,整个公共/ 路径上的操作相当慢。

有谁知道如何做到这一点?

1 个答案:

答案 0 :(得分:0)

简短的回答:你不能,或者你不想要。 Git还没有被设计为托管多个项目,因此克隆了独立的子目录,一个git ==一个项目。即使你可以这样做(看看非常有见地的答案:How do I clone a subdirectory only of a Git repository?),你将失去保持更新的最新能力。

可能有一个黑客虽然你可以尝试,是告诉git-svn为你拥有的每个模块创建一个分支,这里有一个很好的例子:Cloning a Non-Standard Svn Repository with Git-Svn,应该是这样的:

% git svn clone https://svn.myrepos.com/myproject myproject --ignore-paths='^((?!common).*)$' --trunk=trunk/ --branches=trunk/common/* --prefix=svn/

(未测试的)