更改git子模块,然后将其添加到我的主项目中

时间:2012-09-06 23:37:46

标签: git github git-submodules

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

P
|
 - src
 - Vendor
    |
     - Q

我没有权限对第三方图书馆的远程仓库进行任何更改。

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

我在dev内尝试了以下步骤:

  1. P
  2. cd Vendor/Q
  3. git branch my-fixes
  4. 修复
  5. git checkout my-fixes
  6. git add
  7. git commit -m 'My fixes to 3rd Party Library Q'
  8. cd ../..
  9. git add Vendor/Q
  10. git commit -m 'Changes/fixes made to submodule Q'
  11. 然而,这似乎并没有解决我的问题。有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

  • subtree merge 两个回购
  • 进行修复
  • 将您的项目(包含Q中的内容)推回给您的开发人员使用

答案 2 :(得分:1)

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

虽然git-subtree不是核心git的一部分,但它最近merged进入了主要的git发行版,这使得它成为半官方的。