3

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

P
|
 - src
 - Vendor
    |
     - Q

我无权对 3rd 方库的远程仓库进行任何更改。

我做了一些修复,Q现在我希望将它们推送到master我的项目分支中,P以便我的团队成员也可以使用它们。
目前我正在我的' dev'分支上开发。

我从内部尝试了以下步骤P

  1. cd Vendor/Q
  2. git branch my-fixes
  3. git checkout my-fixes
  4. 进行修复
  5. git add
  6. git commit -m 'My fixes to 3rd Party Library Q'
  7. cd ../..
  8. git add Vendor/Q
  9. git commit -m 'Changes/fixes made to submodule Q'
  10. git push

但是,这似乎并不能解决我的问题。有人可以帮我吗?

4

3 回答 3

1

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

虽然 git-subtree 不是核心 git 的一部分,但它最近被合并到主要的 git 发行版中,这使它成为半官方的。

于 2012-09-07T06:12:23.677 回答
1

如果您推送项目 P,没有人将能够从第 6 步获得提交,因为您无权对第三方库的远程仓库进行任何更改。

您是否考虑过创建一个存储库来存储贵公司对 Q 的更改,而不是将子模块注册到第 3 方的远程?这样您就可以将您对 Q 的更改保存到您公司的服务器上。

于 2012-09-07T03:51:25.077 回答
1

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

  • 子树将两个 repos 合并在一起
  • 进行修复
  • 将您的项目(其中包含 Q)推回给您的开发人员使用
于 2012-09-07T05:58:45.753 回答