为什么 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
我有一个 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