1

我有一个现有的 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 存储库有相当大的修订历史,并且对整个common/路径的操作相当慢。

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

4

1 回答 1

0

简短的回答:你不能,或者你不想要。Git 没有被设计为托管多个项目,因此克隆独立的子目录,一个 git == 一个项目。即使您可以做到(请查看非常有见地的答案:如何仅克隆 Git 存储库的子目录?),您将失去与更新保持同步的所有能力。

尽管您可以尝试一种技巧,但可能是告诉 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/

(未经测试)

于 2012-05-20T13:33:24.057 回答