SVN仓库中单个目录的git svn克隆

42

我正在尝试使用git svn将SVN仓库中的单个目录克隆到Git仓库中。

如果我使用git svn clone svn+ssh://path/to/repo/trunk/directory,我将得到一个Git仓库,但该仓库没有源SVN仓库中包含的分支。

如果我使用git svn --stdlayout svn+ssh://path/to/repo/trunk/directory,我将得到一个空的Git仓库。以下是命令的输出:

Initialized empty Git repository in /directory/.git/
Using higher level of URL: svn+ssh://path/to/repo/trunk/directory => svn+ssh://path/to/repo
W: Ignoring error from SVN, path probably does not exist: (160013): Filesystem has no item: File not found: revision 100, path '/trunk/directory'
W: Do not be alarmed at the above message git-svn is just searching aggressively for old history.
This may take a while on large repositories

我曾经阅读到解决上述问题的方法是添加一个修订版本范围,例如-r 1000:HEAD,但这仍然会产生一个空的库。输出为:

svn: E160013: '/path/to/repo' not found
Initialized empty Git repository in /directory/.git/
Using higher level of URL: svn+ssh://path/to/repo/trunk/directory => svn+ssh://path/to/repo

有什么方法可以使用git-svn克隆SVN存储库的子目录,同时仍然获取源SVN存储库中的所有分支和标签吗?

2个回答

69
你不希望使用标准布局,你希望像这样:
git svn clone svn+ssh://path/to/repo/ --trunk=trunk/directory --branches=branches/*/directory --tags=tags/*/directory

9
这里的重点是你可以在 --branches 参数中使用通配符。很好。 - Stephen Harrison
5
请注意,如果您没有特定目录的分支或标签,则可以安全地省略 --branches--tags 参数。只需要使用 --trunk=... 而不是 --stdlayout 就可以正常工作。 - Nux
4
我能否将单个“directory”值替换为多个值,最好是指定一个目录名列表。背景:将单个 SVN 仓库按子目录拆分为多个 Git 仓库(只迁移这些子目录的历史记录而非整个 SVN 仓库)。 - Patrick Bergner

35

2
请注意,这不允许添加用户(作者)映射文件。至少不能使用-A选项。 - Nux
1
这实际上与一步git svn clone通常没有什么区别。 - MarkHu
这样做起了作用。另一件似乎也有效的事情是 git svn clone --no-metadata... - Warpzit
3
这只是获取svn项目当前的内容吗?还是包括所有历史记录? - PaulNUK
这可能是个蠢问题,但我接下来该做什么呢?我有一个带有 .git 文件夹的空文件夹。我怎样才能获取我检出的源代码呢? - Steve Smith
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接