使用子模块从SVN转换为Git
我们目前使用subversion作为版本控制系统,我们决定转向git。我一直很难将我的标准布局subversion系统迁移到git中。我已经尽可能多地使用了git svn 我需要完成的是将我们的subversion系统转换为git,其中包含所有提交历史以及标记和分支。然后,为了能够将每个项目与各自的历史记录分离成单独的git存储库,然后将这些单独的存储库组合成子模块 如果您有任何关于如何最轻松地完成此任务的想法,我将不胜感激使用子模块从SVN转换为Git,svn,git,git-submodules,Svn,Git,Git Submodules,我们目前使用subversion作为版本控制系统,我们决定转向git。我一直很难将我的标准布局subversion系统迁移到git中。我已经尽可能多地使用了git svn 我需要完成的是将我们的subversion系统转换为git,其中包含所有提交历史以及标记和分支。然后,为了能够将每个项目与各自的历史记录分离成单独的git存储库,然后将这些单独的存储库组合成子模块 如果您有任何关于如何最轻松地完成此任务的想法,我将不胜感激 svnroot/ |-- branches |-- tags |--
svnroot/
|-- branches
|-- tags
|-- trunk
|-- project A
|-- project B
`-- project C
如果您的svn存储库布局为:
svnroot/
|-- projectA
| |-- branches
| |-- tags
| `-- trunk
|-- projectB
| |-- branches
| |-- tags
| `-- trunk
`-- projectC
|-- branches
|-- tags
`-- trunk
然后,您可以为每个项目创建单独的git存储库,例如,projectA
:
$ git svn clone --stdlayout https://svn.example.net/svnroot/projectA
之后,您可以创建主git repo(),并将为项目{A,B,C}
创建的git repo作为子模块添加到它()
但这可能不是你想要的;从git子模块
手册:
子模块允许外部存储库
嵌入到专用的
源树的子目录,
始终指向特定的提交
不要将它们与遥控器混淆,遥控器主要是指
同一项目的分支机构;子模块用于不同的应用程序
您希望成为源代码树一部分的项目,而
这两个项目仍然保持完全独立,您无法
从主项目中修改子模块的内容
如果您想在主项目中修改项目{A,B,C}
,并保留项目的联合历史记录,则子模块不适合该任务
对于提供的svn回购布局:
svnroot/
|-- branches
|-- tags
|-- trunk
|-- projectA
|-- projectB
`-- projectC
尝试使用--trunk
,--branchs
,--tags
参数创建git存储库,例如:
$ git svn clone \
> --trunk trunk/projectA \
> --branches branches \
> --tags tags \
> https://svn.example.net/svnroot \
> projectA
完成后,.git/config
文件应包含以下内容:
[svn-remote "svn"]
url = https://svn.example.net/svnroot
fetch = projectA/trunk:refs/remotes/trunk
branches = branches/*:refs/remotes/*
tags = tags/*:refs/remotes/tags/*
您可以使用跳过项目中的匹配路径。我已经更新了svn结构的答案