如何使用git-svn只检查主干而不是分支和标签?

toy*_*toy 42 svn git git-svn

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


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

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

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

me_*_*and 58

编辑:我误解了这个问题并回答了我的想法,而不是你实际问的问题.

只克隆主干

克隆单个Subversion目录很简单,实际上克隆哪个目录无关紧要.只是不要指定任何"layout"参数,并直接给出trunk的路径:

git svn clone http://path.to.svn.repo/module1/trunk
Run Code Online (Sandbox Code Playgroud)

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

"正常" git svn clone看起来如下所示:

git svn clone --stdlayout http://path.to.svn.repo/
Run Code Online (Sandbox Code Playgroud)

因此,你想要使用的是:

git svn clone --stdlayout http://path.to.svn.repo/module1/
Run Code Online (Sandbox Code Playgroud)

这会发现trunk,branchtag该的子module1文件夹,并复制它们.


Dew*_*ser 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 fetch


stu*_*ash 5

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

克隆 trunk 的命令可以工作,但在 git 文件夹中创建的结构是:

refs
 |--remotes
    |--git-svn
Run Code Online (Sandbox Code Playgroud)

这相当于refs/remotes/git-svn

如果我们这样做:

git svn clone https://domain/svn/repo/trunk --no-metadata --authors-file=authors.txt --trunk=https://domain/svn/repo/trunk
Run Code Online (Sandbox Code Playgroud)

那么创建的结构是:

refs
 |--remotes
    |--origin
       |--trunk
Run Code Online (Sandbox Code Playgroud)

相当于refs/remotes/origin/trunk

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

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

  • 元数据选项禁止 git 在提交消息后附加 svn 信息。
  • authors-file 选项允许您将 svn 贡献者映射到 git 贡献者,这样您的 svn 历史修订就不会在 git 中混乱。