【问题标题】:Keep submodule outside working tree将子模块保留在工作树之外
【发布时间】:2016-04-23 20:40:39
【问题描述】:

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

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

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

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

  3. 使库存储库作为子模块目录中的别名可访问。在 Windows 上,这可以使用连接点来实现;在 Linux 上,符号链接不起作用(git 认为您删除了子模块并用符号链接替换了它),但 --bind 挂载确实有效。虽然存储库布局不同(lib/.git 是一个真正的 gitdir,而不仅仅是一个指向 ../.git/modules/lib/ 中的文件的文件),但这工作正常,但创建绑定挂载很烦人,并且确实需要 sudo 访问权限。

有没有更好的方法来做到这一点,即告诉 git 在文件系统的其他地方查找子模块的存储库?

【问题讨论】:

标签: git git-submodules


【解决方案1】:

您可以做的是将子模块与file:// 协议一起使用,以便它指向所需的文件夹。但它只能在您的本地机器上运行。

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

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

如果团队中的每个人都可以访问共享文件系统(例如 NFS 挂载),或者在不太可能的情况下每个人都登录到同一台计算机,这通常会使用。后者并不理想,因为您的所有代码存储库实例都将驻留在同一台计算机上,从而更有可能发生灾难性损失。

【讨论】:

  • 谢谢。无法查看/共享未提交的工作比使用绑定安装更麻烦,但我会根据您的评论接受这个答案。
  • 很高兴为您提供帮助。如果您有网络驱动程序,您仍然可以这样做,但它会减慢您的工作速度并且不推荐
猜你喜欢
  • 2021-12-24
  • 2021-03-20
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 1970-01-01
相关资源
最近更新 更多