我有一个库,我在多个项目中用作git子模块。
一般来说,有三种方法可以解决这个问题:
让每个项目都有自己的库副本。如果使用--recursive
克隆项目,则会发生这种情况。显然,这是浪费,一次处理多个项目时会让人感到困惑。
不要克隆或注册子模块(即将其保留为git默认创建的空白目录),并配置构建工具以在其他位置查找子模块。除了这个复杂性之外,这还有一个缺点,即子模块中的新提交将不会在父项目中看到' git status
输出,您无法git add
新的子模块状态。
使库存储库可作为子模块目录中的别名访问。在Windows上,这可以通过连接点实现;在Linux上,符号链接不起作用(git认为你删除了子模块并将其替换为符号链接),但--bind
安装确实有效。尽管存储库布局不同(lib/.git
是一个真正的gitdir,而不仅仅是指向../.git/modules/lib/
中的文件的文件),但这样可以正常工作,但创建绑定装置很烦人,并且需要{{1访问。
有没有更好的方法来执行此操作,即告诉git在文件系统的其他位置查找子模块的存储库?
答案 0 :(得分:2)
您可以做的是使用带有file://
协议的子模块,这样它就会指向所需的文件夹。但它只能在你的本地机器上运行。
这也称为本地协议
https://git-scm.com/book/ch4-1.html#Local-Protocol
最基本的是
Local protocol
,其中远程存储库位于磁盘上的另一个目录中。如果团队中的每个人都可以访问共享文件系统(如NFS挂载),或者每个人都登录到同一台计算机的可能性较小,则通常会使用此方法。后者不是理想的,因为你的所有代码库实例都将驻留在同一台计算机上,更有可能造成灾难性的损失。