将子模块保留在工作树之外
Keep submodule outside working tree
我有一个库,我在多个项目中将其用作 git 子模块。
通常,可以通过三种方式解决此问题:
让每个项目都有自己的库副本。如果您使用 --recursive
克隆项目,就会发生这种情况。显然,这是一种浪费,并且在一次处理多个项目时会让人感到困惑。
不要克隆或注册子模块(即将其保留为 git 默认创建的空白目录),并配置您的构建工具以在其他地方查找子模块。除了这种复杂性之外,这还有一个缺点,即子模块中的新提交将不会在父项目的 git status
输出中看到,并且您不能轻易地 git add
新的子模块状态。
使库存储库作为子模块目录中的别名可访问。在 Windows,这可以使用连接点来实现;在 Linux 上,符号链接不起作用(git 认为您删除了子模块并将其替换为符号链接),但 --bind
挂载确实起作用。尽管存储库布局不同(lib/.git
是一个真正的 git 目录,而不仅仅是一个指向 ../.git/modules/lib/
中的文件的文件),这工作正常,但创建绑定安装很烦人并且确实需要 sudo
访问权限。
有没有更好的方法来做到这一点,即告诉 git 在文件系统的其他地方寻找子模块的存储库?
你可以做的是使用带有 file://
协议的子模块,这样它就会指向所需的文件夹。但它只能在您的本地计算机上运行。
这也称为本地协议
https://git-scm.com/book/ch4-1.html#Local-Protocol
The most basic is the Local protocol
, in which the remote repository is in another directory on disk.
This is often used if everyone on your team has access to a shared filesystem such as an NFS mount, or in the less likely case that everyone logs in to the same computer. The latter wouldn’t be ideal, because all your code repository instances would reside on the same computer, making a catastrophic loss much more likely.
我有一个库,我在多个项目中将其用作 git 子模块。
通常,可以通过三种方式解决此问题:
让每个项目都有自己的库副本。如果您使用
--recursive
克隆项目,就会发生这种情况。显然,这是一种浪费,并且在一次处理多个项目时会让人感到困惑。不要克隆或注册子模块(即将其保留为 git 默认创建的空白目录),并配置您的构建工具以在其他地方查找子模块。除了这种复杂性之外,这还有一个缺点,即子模块中的新提交将不会在父项目的
git status
输出中看到,并且您不能轻易地git add
新的子模块状态。使库存储库作为子模块目录中的别名可访问。在 Windows,这可以使用连接点来实现;在 Linux 上,符号链接不起作用(git 认为您删除了子模块并将其替换为符号链接),但
--bind
挂载确实起作用。尽管存储库布局不同(lib/.git
是一个真正的 git 目录,而不仅仅是一个指向../.git/modules/lib/
中的文件的文件),这工作正常,但创建绑定安装很烦人并且确实需要sudo
访问权限。
有没有更好的方法来做到这一点,即告诉 git 在文件系统的其他地方寻找子模块的存储库?
你可以做的是使用带有 file://
协议的子模块,这样它就会指向所需的文件夹。但它只能在您的本地计算机上运行。
这也称为本地协议
https://git-scm.com/book/ch4-1.html#Local-Protocol
The most basic is the
Local protocol
, in which the remote repository is in another directory on disk.This is often used if everyone on your team has access to a shared filesystem such as an NFS mount, or in the less likely case that everyone logs in to the same computer. The latter wouldn’t be ideal, because all your code repository instances would reside on the same computer, making a catastrophic loss much more likely.