【问题标题】:Adding a pushurl to git submodule将 pushurl 添加到 git 子模块
【发布时间】:2018-05-20 07:31:30
【问题描述】:

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

现在我向gnome-keyring-query 添加了一个新文件(即Makefile),我想将该子模块与Makefile 一起保存到我的repo 中。因此,我在.gitmodule 文件中添加了一个pushurl(我的存储库网址)。但它不起作用,我的意思是,我不能推动。然后我尝试将pushurl 添加到.git/modules/...path.../gnome-keyring-query/config 文件中。还是不行。

有什么想法吗?

【问题讨论】:

  • stackoverflow.com/questions/8372625/… 的副本我会使用 git remote add
  • @battlmonstr 请阅读我的帖子和您链接的帖子,它们不是完全相同的问题。我想修改子模块并将其推送到其父项目的相同url。

标签: git git-submodules git-push


【解决方案1】:

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

您可以提交到父 ​​repo(好像它没有子模块)或子 repo(好像它没有父 repo)。与推送相同:您有一个遥控器(或一组遥控器)用于父模块,另一个用于子模块。

我可以为您的问题想出几个解决方案:

  • 要么将 Makefile 添加到您的父项目,然后正常提交,但调整 Makefile 目标命令,使其在 gnome-keyring-query 子模块上运行,即您可以添加目标名称,如 make keyring-thismake keyring-that .
  • 或创建子模块存储库的分支,并将您的 Makefile 提交推送到该分支。

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

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

附:在许多情况下,我宁愿避免使用有利于包管理器甚至供应商(复制粘贴源和/或二进制文件)的子模块,这往往是一个较小的负担,特别是如果您不打算大规模使用子模块(用于管理大量的依赖项)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2017-06-29
    • 1970-01-01
    • 2011-06-03
    • 2016-09-30
    • 2015-08-16
    • 1970-01-01
    相关资源
    最近更新 更多