我目前有一个大型(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上可用)重新创建正确的目录结构。