将非标准 Subversion 存储库转换为 git

2023-12-24

我有一个存储库,其布局如下:



    trunk/
        projectA
        projectB
    branches/
        projectA-1.0
        projectB-1.0
    tags/
        projectA-1.0.1
        projectB-1.0.1
  

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

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

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

但是,我不确定如何让分支表现得像我想要的那样git-filter-branch and.

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


你有没有考虑过svn2git https://stackoverflow.com/questions/572893/cloning-a-non-standard-svn-repository-with-git-svn/572898#572898为了将你的 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 存储库。
It 将导入所有分支和标签作为远程 svn 分支,而你真正想要的是 git-native 本地分支和 git tag 对象.
所以导入这个项目后,你会得到:

  $ 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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将非标准 Subversion 存储库转换为 git 的相关文章

随机推荐