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

时间:2013-10-23 16:06:07

标签: git perforce git-submodules git-subtree perforce-client-spec

有一个大型项目,它以下列方式存储在远程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之间的连接丢失。

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

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

谢谢!

P.S。目前,无法影响 origin / master 和服务器端。

1 个答案:

答案 0 :(得分:0)

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

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

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