将子模块保留在工作树

时间:2016-04-23 20:40:39

标签: git git-submodules

我有一个库,我在多个项目中用作git子模块。

一般来说,有三种方法可以解决这个问题:

  1. 让每个项目都有自己的库副本。如果使用--recursive克隆项目,则会发生这种情况。显然,这是浪费,一次处理多个项目时会让人感到困惑。

  2. 不要克隆或注册子模块(即将其保留为git默认创建的空白目录),并配置构建工具以在其他位置查找子模块。除了这个复杂性之外,这还有一个缺点,即子模块中的新提交将不会在父项目中看到' git status输出,您无法git add新的子模块状态。

  3. 使库存储库可作为子模块目录中的别名访问。在Windows上,这可以通过连接点实现;在Linux上,符号链接不起作用(git认为你删除了子模块并将其替换为符号链接),但--bind安装确实有效。尽管存储库布局不同(lib/.git是一个真正的gitdir,而不仅仅是指向../.git/modules/lib/中的文件的文件),但这样可以正常工作,但创建绑定装置很烦人,并且需要{{1访问。

  4. 有没有更好的方法来执行此操作,即告诉git在文件系统的其他位置查找子模块的存储库?

1 个答案:

答案 0 :(得分:2)

您可以做的是使用带有file://协议的子模块,这样它就会指向所需的文件夹。但它只能在你的本地机器上运行。

这也称为本地协议
https://git-scm.com/book/ch4-1.html#Local-Protocol

  

最基本的是Local protocol,其中远程存储库位于磁盘上的另一个目录中。

     

如果团队中的每个人都可以访问共享文件系统(如NFS挂载),或者每个人都登录到同一台计算机的可能性较小,则通常会使用此方法。后者不是理想的,因为你的所有代码库实例都将驻留在同一台计算机上,更有可能造成灾难性的损失。