将pushurl添加到git子模块

时间:2018-05-20 07:31:30

标签: git git-submodules git-push

我想将一个项目作为子模块添加到我的仓库中。例如,我想添加https://aur.archlinux.org/packages/gnome-keyring-query/作为子模块。我添加了它,看起来它正在工作,即git submodule update --recursive有效。

现在我已将新文件(即Makefile)添加到gnome-keyring-query,我希望将该子模块保存到我的仓库Makefile。因此,我在pushurl文件中添加了.gitmodule(我的存储库URL)。但它不起作用,我的意思是,我无法推动。然后我尝试将pushurl添加到.git/modules/...path.../gnome-keyring-query/config文件。它仍然不起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

子模块系统允许在您自己的子文件夹中显示一个单独的存储库,但它不会再进一步​​。就git基本功能而言,它们仍然是独立的存储库。

您可以提交父级仓库(就好像它没有子模块)或子仓库(就好像它没有父仓库)。与推送相同:您有一个远程(或一组远程)用于父项,另一个用于子模块。

我可以为您的问题考虑几种解决方案:

  • 将Makefile添加到您的父项目中,并正常提交,但调整Makefile目标命令,使其在gnome-keyring-query子模块上运行,即您可以添加目标名称,如make keyring-this,{ {1}}。
  • 或者创建子模块repo的一个fork,并将Makefile提交到该fork。

第一种方法简单明了,但除了作者提供的内容之外,它不允许您修改子模块源代码或对其进行大量配置。你基本上将子模块远程设置为只读。

第二种方法更灵活,但它肯定会增加认知负荷(你必须跟踪3个分支:你的repo,submodule-fork和submodule-upstream(origin)而不是1),这是其中一个为什么子模块臭名昭着的原因,以及为什么存在像git subtree这样的替代方案。

P.S。在许多情况下,我更喜欢避免子模块支持包管理器甚至出售(复制粘贴源和/或二进制文件),这往往是一个较小的负担,特别是如果您不打算大规模使用子模块(用于管理大量依赖项。)