如何使用overlay mount将多个目录与不同的子目录组合起来?

如何使用overlay mount将多个目录与不同的子目录组合起来?

我已经下载了几个排列在不同源树中的 git 存储库:

  1. repoDirs1(包含子目录,包括供应商)
  2. repoDirs2(包含子目录,包括供应商)
  3. 特别回购1
  4. 特别回购2

为了获得可行的源代码树,我必须执行以下操作:

1. cp -rp repoDirs2/* repoDirs1/
2. cp -rp specialRepos1/vendor/* repoDirs1/vendor/
3. cp -rp specialRepos2/vendor/* repoDirs1/vendor/

这可行,但它改变了原始的 repoDirs1 源树,并给我使用 repo 命令管理它们带来了困难。

我搜索了一下,发现 mount 有一个选项可以进行叠加。然而,在阅读了多个示例之后,我仍然无法弄清楚如何编写正确的安装命令序列来解决我的问题。我要么得到overlayfsknown或其他错误的选项错误。

有人可以帮忙举一个清楚的例子吗?多谢。我使用的是ubuntu 20.04

答案1

未来的读者要小心: 这个问题要求合并两个包含很多子目录的目录。这不应该用于正常的 git 操作。为此,您通常应该尝试使用该.gitignore文件或git 子模块


如果您想将两个目录合并到一个位置,即使存在重叠文件,您也可以使用简单的 overridefs 挂载。在您要求的上下文中,最好将其作为只读overlayfs完成。如果要读/写,它将把所有更改的文件放在一个单独的目录中。您正在寻找的可能性极小。

要创建只读覆盖,您不指定upperor workdir

mount -t overlay overlay -o lowerdir=specialRepos1/vendor/:specialRepos2/vendor/ repoDirs1/vendor/

Archlinux 对此功能有很好的描述:

https://wiki.archlinux.org/index.php/Overlay_filesystem

相关内容