我有一个现有的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存储库有一个相当大的修订历史,整个公共/ 路径上的操作相当慢。
有谁知道如何做到这一点?
答案 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/
(未测试的)