对 git 子模块进行更改并将其添加到我的主项目中

4

我有一个git项目P。在我的项目P中有一个子模块Q,它是从第三方库的主分支克隆下来的。

P
|
 - src
 - Vendor
    |
     - Q

我没有权限将任何更改推送到第三方库的远程存储库。

我在 Q 中进行了一些修复,现在我想将它们推送到我的项目 Pmaster 分支中,这样我的团队成员也可以使用它们。目前我正在我的 'dev' 分支上开发。

我尝试了从 P 中执行以下步骤:

  1. cd Vendor/Q
  2. git branch my-fixes
  3. git checkout my-fixes
  4. 进行修复
  5. git add
  6. git commit -m '我对第三方库 Q 进行的修复'
  7. cd ../..
  8. git add Vendor/Q
  9. git commit -m '对子模块 Q 进行的更改/修复'
  10. git push

然而,这似乎并没有解决我的问题。有人能帮我吗?

3个回答

1
如果您推送项目P,由于您没有权限将任何更改推送到第三方库的远程存储库,因此没有人能够获取步骤6的提交。
您是否考虑创建一个存储库来存储公司对Q的更改,而不是将子模块注册到第三方的远程存储库?这样,您可以将对Q的更改保存到公司的服务器上。

我也注意到第三方库已不再通过Github更新。 库的新版本应从网站下载。 那么,我是否不需要将Q作为子模块呢? 我可以将它作为P下的一个目录,并在需要时进行更新。 - kaushal
@kaushal 是的。请也将这个信息更新到问题中 :) - eis

1

考虑到您将把两个仓库(Q 和您的项目)集成在一起,而无需将任何修复推回 GitHub Q 仓库(因为 Q 不再在 GitHub 上更新),您可以:

  • 子树合并这两个仓库
  • 进行您的修复
  • 将您的项目(包括 Q 在内)推回给您的开发人员使用。

1

使用子模块的替代方案是git-subtree(不要与子树合并策略混淆)。它相对于子模块的主要优点是,Q成为您的P的历史记录和存储库的一部分,同时保留将更改推送回供应商的Q的能力。此外,不关心Q来自何处的用户甚至不需要安装git-subtree。

虽然git-subtree不是核心git的一部分,但最近已经合并到主git发行版中,这使其半官方化。


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