我目前有一个大型(30K提交)SVN存储库,我正在转换为git。我们的代码库目前有一组通用(核心)代码,以及两个独立的基础(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
这也可以让我编辑该文件夹中的代码,并且checkin将提交到存储库中的正确位置。
我的问题是,这是否可以在git中实现,使用子模块或其他方法,或者我们是否需要重新考虑整个布局以及如何在执行结帐时实现我们想要的一个分支来创建一个构建。如果我们可以用子模块做这个,我应该遵循标准的子模块教程,还是有更深入的东西我应该看看?
谢谢!
答案 0 :(得分:1)
您将无法获得具有子模块的精确目录结构,因为每个子模块都位于父存储库中的自己的目录中。
即,你会得到
Java
+
+-->public_html
*-->Core
+
+-->public_html
(而不是一个混合的'public_html
')
我仍然会推荐子模块(您可以直接在其中进行修改,如“True nature of submodules”中所述)。
但请保留git submodules are quite different from svn:externals
。
一旦您签出了Java repo(其中包含对Core repo的引用),我将使用符号链接(在Unix或Windows上可用)重新创建正确的目录结构。