在 git 中重新映射目录和文件?P4 中的客户端规范类型



有一个大型项目以这种方式存储在远程 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又名P4);由于 Clientspec.txt 文件,它可以在存储库克隆上定义此类重新映射规则,因此它在 Perforce 中工作。

目前,当存储库从源/主克隆时,不可能在没有预备步骤的情况下仅构建一个库来手动创建相应的符号链接。创建此类符号链接时,无法修改源代码,因为文件和 .git 之间的连接已丢失。

问题:是否可以使用动态重新映射目录并将源/主目录克隆到本地目录,能够保留与 git 的连接(= 能够正确修改/重命名/移动文件?

我已经研究了 git 子模块和 git 子树,但似乎它们没有脚,因为它们用于不同的目的。

谢谢!

附言:目前根本无法影响源站/主站和服务器端。

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

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

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

最新更新