如何使用git-svn将以不同目录为根的svn分支导入git?

时间:2008-11-03 13:13:56

标签: svn git git-svn

我有一个SVN存储库结构,如下所示。我们在分支下使用多个级别用于各种发布维护分支,以及功能分支的目录。

git-svn init似乎使用单个 - 分支参数,即它似乎期望所有分支都在一个位置。

trunk
branches
  1.1
    1.2.1
    1.2.2
  1.2
    1.2.1
    1.2.2
    1.2.3
  features
    feature1
    feature2

关于如何处理这个的任何想法?

由于

4 个答案:

答案 0 :(得分:13)

在配置文件中,将svn-remotes部分设置为:

[svn-remote "svn"]
    url = svn://svnserver/repo
    fetch = trunk:refs/remotes/trunk
    branches = branches/*/*:refs/remotes/*
    tags = tags/*:refs/remotes/tags/*

这可以让你抓住嵌套的分支。

答案 1 :(得分:1)

按照惯例,Subversion将所有内容分支到Subversion存储库中的单个“分支”路径中,因此git-svn做出此假设并不奇怪。

我建议如下(请注意,您可能会在此操作中丢失一些历史记录):

  1. 使用命名约定展平Subversion branches路径,以保留唯一标识和当前结构的概念。
  2. 执行git-svn
  3. 移动git存储库中的内容以符合您的做法。
  4. losing history的危险取决于git-svn跟踪来自不同路径的复制操作的程度。我最近遇到了迁移subversion存储库(1.4-ish)的问题。

答案 2 :(得分:0)

为每个分支子目录创建一个git仓库是否可行?

答案 3 :(得分:0)

您可以为每个分支添加多个git svn个遥控器,或者可能为分支的每个目录添加多个git svn fetch个遥控器。最初的{{1}}需要永远,但据我所知它应该有效。