1

有一个大型项目存储在远程 GIT 存储库中:

root/
   |
   *
   module1/
         |
         * include/
         |       |
         |       * lib1/
         |       |     header1.h
         |       |     headerN.h
         |       * libN/
         |             headerX.h
         * sources/
                 | 
                 * lib1/
                 |     file1.cxx
                 |     fileN.cxx
                 * libN/
                 ...

该产品是从这些库构建的。构建系统自动下载源代码,重新映射每个文件夹,将每个库的源目录放在磁盘上相应的头文件附近,即:

 lib1/
   include/
       header1.h
       headerN.h
   sources/
       fileN.cxx
   CMakeList.txt

当库以这种方式映射到磁盘时,它可以被构建。这种结构是由于历史原因(Perforce aka P4);它在 Perforce 中工作,因为Clientspec.txt文件可以在存储库克隆上定义此类重映射规则。

目前,当存储库从origin/master克隆时,无法在项目中仅构建一个库而无需手动创建相应的符号链接的初步步骤。创建此类符号链接后,无法在此处修改源代码,因为文件和 .git 之间的连接丢失。

问题:是否可以通过动态重新映射目录并将其与git的连接(= 能够正确修改/重命名/移动文件?

我研究了git submodulegit subtree但似乎它们不适合,因为它们用于不同的目的。

谢谢!

PS 目前根本不可能影响源/主服务器和服务器端。

4

1 回答 1

0

目前没有。子树必须位于该路径中没有其他源的子树中。否则,当您拆分时,您最终会抓取不属于该子树的文件。

然而,这是一个常见的请求,我认为它最终可能需要某种 p4 clientspec 类型的解决方案(但这纯粹是我的观点,我现在没有动力将这种变化贡献给 git)。如果我遇到同样的问题,也许有一天我会尝试解决它。无论如何,它发生了这么多,它一定会被某人解决。

您可以尝试将单独的库放在两个没有任何重叠的单独克隆中,并使用 AUFS 之类的东西以某种方式将两者合并在一起,然后返回到每个单独的副本来处理签入。您也可能不想在 mix 文件夹中创建任何新文件。整个工作流程一团糟。

于 2014-03-06T08:29:52.537 回答