44

我正在开发一个 Java 遗留项目,该项目有 20 个相互连接的模块。因此,每个模块都有自己的分支和标签。结构是这样的:


/projects
   .svn
   - module1
       .svn
       -trunk
       -branch
       -tag
   - module2
       .svn
       -trunk
       -branch
       -tag

项目文件夹大约 30 GB,几乎不可能用于git-svn clone检出所有模块,但这是因为它计算了所有分支和标签。

是否可以只克隆项目主干,以便我可以开始在本地提交?

4

3 回答 3

63

编辑:我误读了这个问题并回答了我认为你在问的问题,而不是你实际问的问题。

仅克隆主干

克隆单个 Subversion 目录很容易,实际上克隆哪个目录并不重要。只是不要指定任何“布局”参数,并直接给出主干的路径:

git svn clone http://path.to.svn.repo/module1/trunk

克隆特定模块,包括标签和分支等

“正常”git svn clone看起来像下面这样:

git svn clone --stdlayout http://path.to.svn.repo/

您想要使用的将是:

git svn clone --stdlayout http://path.to.svn.repo/module1/

这将找到文件夹的trunk,branchtagmodule1文件夹,并为您克隆它们。

于 2013-01-30T09:43:04.990 回答
13

我发现带有 --stdlayout 的 git svn clone 并没有为我做正确的事情。

在同样的情况下,这个策略效果很好:

git svn init --trunk $repo/projects/module1/trunk --tags $repo/projects/module1/tag --branches $repo/projects/module1/branch
git svn 获取
于 2013-02-20T22:08:24.577 回答
4

我只是想根据@me_and 的回答添加更多信息。

用于克隆主干的命令将起作用,但在 git 文件夹中创建的结构是:

refs
 |--remotes
    |--git-svn

这相当于refs/remotes/git-svn

如果我们这样做:

git svn clone https://domain/svn/repo/trunk --no-metadata --authors-file=authors.txt --trunk=https://domain/svn/repo/trunk

那么创建的结构是:

refs
 |--remotes
    |--origin
       |--trunk

相当于refs/remotes/origin/trunk

第二种结构看起来对 git 更友好,并且可能会减少您必须编写的命令和 shell 脚本 :)

PS [--no-metadata] 和 [--author-file] 参数是可选的。

  • 元数据选项禁用 git 在提交消息后附加 svn 信息。
  • authors-file 选项允许你将你的 svn 贡献者映射到 git 贡献者,这样你的 svn 历史版本就不会在 git 中被弄乱。
于 2016-11-24T12:11:53.530 回答