3

我有一个布局是这样的存储库:

    树干/
        项目A
        项目B
    分支机构/
        项目A-1.0
        项目B-1.0
    标签/
        项目A-1.0.1
        项目B-1.0.1

我想将它们转换为单独的 git 存储库,其中 trunk/projectA 作为顶级目录,它的所有分支都作为 git 分支。

每当我尝试指定一个git svn initlikegit svn init -T trunk/projectA -b branches -t tags http://svn.example.com时,后续操作git svn fetch都会在不同的修订版上神秘地失败。有时它一直到 200,有时它停止。

我目前的想法是我应该创建一个 git 存储库,将整个 subversion 存储库镜像为单个实体,每个项目都有子目录。然后我会使用git-filter-branch将子目录重写到项目的根目录。

但是,我不确定如何让分支表现得像我想要的那样使用git-filter-branchand。

此外,为每个项目的“主干”创建一个具有不同分支的单个 git 存储库也是理想的,在这种情况下,如果没有真正的主控,我不会有任何问题。

4

2 回答 2

5

您是否考虑过使用 svn2git将您的 svn 导入 git 存储库?

这比 git svn clone因为如果你在 svn 中有这段代码更好:

  trunk
    ...
  branches
    1.x
    2.x
  tags
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

git-svn将通过提交历史来构建一个新的 git repo。
它将所有分支和标签导入为远程 svn 分支,而您真正想要的是 git-native 本地分支和 git tag objects
所以在导入这个项目后,你会得到:

  $ git branch
  * master
  $ git branch -a
  * master
    1.x
    2.x
    tags/1.0.0
    tags/1.0.1
    tags/1.0.2
    tags/1.1.0
    tags/2.0.0
    trunk
  $ git tag -l
  [ empty ]

在 svn2git 完成你的项目后,你会得到这个:

  $ git branch
  * master
    1.x
    2.x
  $ git tag -l
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

最后,它确保 master 的 HEAD 与 svn repo 的当前主干相同。

所以在你的情况下,它会给你实际的 git 分支来应用git-filter-branch

于 2009-02-12T05:09:04.180 回答
0

我最终做的是克隆存储库的根目录并为每个项目复制新的 git 存储库并重新安排内容。它既不干净也不漂亮,但它是我不再需要经常查看的遗留代码。

于 2010-04-28T17:49:50.293 回答