为git迁移规划存储库布局



我目前有一个大型(30K提交)SVN存储库,我正在将其转换为git。我们的代码库目前有一组通用(Core)代码,以及两个独立的库(Java和.NET)。这使我们能够共享通用代码,并在向只支持这两种语言之一的客户推送构建时使用不同的语言。

SVN存储库目前大量使用SVN:externals,以便在签出时生成使用公共代码以及特定语言代码的特定布局。

存储库布局的精简版本如下:

Core
 +
 +-->classes
 +-->public_html
     +>admin
     +>web
       +>images
       +>javascript
       +>styles
 Java
 +
 +-->public_html
     +>web
       +>includes
       +>code

 .NET
 +
 +-->public_html
     +>web
       +>includes
       +>code

目前,当我在SVN中从trunk签出时,我会在磁盘上获得上面的布局,但如果我签出一个子文件夹(Java或.NET),SVN:externals会给我以下布局:

Java/.NET
+>classes
+>public_html
  +>admin
  +>web
    +>code
    +>javascript
    +>images
    +>includes
    +>styles

这还允许我编辑该文件夹中的代码,签入将提交到存储库中的正确位置。

我的问题是,这是否可以在git中实现,使用子模块或其他方法,或者我们是否需要重新思考我们的整个布局,以及在检查分支以创建构建时如何实现我们想要的。如果我们可以用子模块做到这一点,我应该遵循标准的子模块教程吗,或者我应该看一些更深入的东西吗?

谢谢!

您将无法获得具有子模块的精确目录结构,因为每个子模块都将位于父repo中自己的目录中
也就是说,你会得到

Java
 +
 +-->public_html
 *-->Core
       +
       +-->public_html

(而不是一个混合的"public_html")

我仍然推荐子模块(您可以直接在其中进行修改,如"子模块的真实性质"中所述)
但是请注意,git子模块与svn:externals有很大不同。

一旦您检查了Java repo(其中引用了Core repo),我将使用symlinks(在Unix或Windows上可用)重新创建正确的目录结构。

最新更新