我嵌套了 git repos,它会导致问题吗?

sou*_*edi 6 git

历史

  1. 我安装了 etckeeper
  2. 我决定跟踪例如 shorewall 防火墙配置作为它自己的 git 存储库。我想我希望更容易查看特定的配置更改。我决定不再需要 etckeeper 并卸载了它。所以没有冲突,除了......
  3. 在重新考虑 etckeeper 时,我注意到我实际上并没有删除/etc/.git.

在我意识到之前,我会认为这git init会拒绝创建嵌套的 git 存储库。

如果我简单地继续使用 etckeeper,我会担心外部 git 可能会因为跟踪内部 .git 目录而变得臃肿。或者,它可能会忽略作为单独 git 存储库的目录中的所有文件。

所以我很好奇,可能出什么问题了?

sou*_*edi 7

我对嵌套 git 存储库的第一次测试没有遇到这三个问题中的任何一个。您不必添加.gitgitignore; .git自动忽略所有目录的内容。

其他文件(例如在与 相同的目录中.git)可以在外部存储库中提交。

所以我认为 etckeeper 可以保持跟踪所有文件,而子目录可以在特定存储库中更仔细地记录它们的历史记录。这两个历史不会互相了解。

后来才注意到一个问题。当我提交了一个目录,它是一个 git 存储库包含提交本身,并且我尚未在外部存储库中提交该目录中的文件时,它显示为Subproject. 内容仅由提交 ID 表示。 gitk似乎将其显示为一个Submodule

这听起来像 git 真的想将它们识别为git-submodule. 我不是特别明白git-submodule,我只知道它有一个有点混乱的名声。

我还注意到,即使 git 正在使用子模块,.etckeeper文件也会因.git目录中的文件而膨胀。

  • 我确信对于 SVN 这样的安排是不可能的,因为 SVN 用 .svn 目录散布每个目录级别。你可以用 git 做到这一点在技术上很有趣,但实际上很可怕。+1 有趣的 Q 和 A。 (3认同)
  • “Unix 会给你足够的绳子来搬起石头砸自己的脚。如果你不认为绳子能做到这一点,你应该阅读手册页。” 显然 git 更严格地遵循 Unix 的基本原则:)。 (2认同)