给git子模块添加pushurl

3
我想将一个项目作为子模块添加到我的仓库中。例如,我想将https://aur.archlinux.org/packages/gnome-keyring-query/添加为子模块。我已经添加了它,看起来它正在工作,即git submodule update --recursive可以正常运行。
现在我已经向.gitmodule文件中添加了一个pushurl(我的仓库URL),以便将该子模块保留在我的仓库中并带有Makefile文件。但是它不起作用,我的意思是,我无法推送。然后我尝试将pushurl添加到.git/modules/...path.../gnome-keyring-query/config文件中,但它仍然不起作用。
有任何想法吗?

我会使用 git remote add - battlmonstr
@battlmonstr,请阅读我的帖子和你链接的帖子,它们并不是完全相同的问题。我想修改子模块并将其推送到其父项目的相同URL。 - ramgorur
1个回答

2
子模块系统允许将一个独立的仓库显示为您自己的子文件夹,但它不会更进一步。在Git基本功能方面,它们仍然是独立的仓库。
您可以提交到父仓库(就好像它没有子模块),或者子仓库(就好像它没有父仓库)。推送也是同样的情况:您有一个用于父仓库的远程(或一组远程),以及另一个用于子模块的远程。
我可以想到几种解决方案来解决您的问题:
- 要么在父项目中添加Makefile,并正常提交它,但调整Makefile目标命令,使其操作gnome-keyring-query子模块,即您可以添加目标名称,如make keyring-this、make keyring-that。 - 或者创建子模块仓库的分支,并将您的Makefile提交推送到该分支。
第一种方法简单直接,但除了作者提供的内容之外,不允许您修改子模块源代码或进行大量配置。您实际上只能将子模块远程视为只读。
第二种方法更加灵活,但它肯定会增加认知负荷(你必须跟踪三个分支:你的存储库、子模块分支和子模块上游(源)而不是一个),这也是为什么子模块臭名昭著的原因之一,以及为什么存在一些替代方案,例如git subtree
附注:在许多情况下,我更喜欢避免使用子模块,而是选择使用包管理器或甚至供应商(复制和/或二进制源代码),这往往是一个较小的负担,特别是如果您不打算使用子模块来管理大量依赖项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接