为什么 git 子树会阻止初始化嵌入式子模块?

Why does git subtree prevent init-ing embedded submodules?

我有一个 git 存储库,我将我的 vim 配置保存在其中。这棵树包括许多 git 子模块,这些子模块引用其他人的包含插件的存储库。

由于我对使用 GNU stow 设置适当的点文件存储库感兴趣,我认为集成 vim 存储库的最佳方法是将其子树化到点文件存储库中。由于我的 vim 配置是从其他人那里派生出来的,我想这样我可以轻松地合并上游所做的更改,同时保留我自己的插件和配置。

我已使用 git subtree add -P vim/.vim-files https:\xx master --squash 成功地将子树添加到我的存储库中。生成的树如下所示:

dotfiles/
├── .git
└── vim/
    ├── .vimrc
    └── .vim-files/   <= THE SUBTREE
        ├── .gitmodules
        └── plugins/
            └── submodule1/

之后当我从 dotfiles/ 执行 git submodule init 时,它失败并显示 fatal: No url found for submodule path 'vim/.vim-files/plugins/submodule1' in .gitmodules。即使 URL 存在并且子树回购在独立使用时子模块没有问题。

奇怪的是,当我 cd 进入 .vim-files 和 运行 那里的命令时,错误看起来像这样:fatal: No url found for submodule path 'vim/.vim-files/vim/.vim-files/plugins/submodule1' in .gitmodules.

任何人都可以解释导致这种行为的原因吗?子树和子模块不兼容还是我偶然发现了错误?

我遇到了同样的错误。似乎它是由具有完整路径的子模块引起的,而 git 期望它们是相对的。请参阅我的 dotfiles repo 中的警告注释以供参考: https://github.com/palavrov/config#warning