如何修改使用 git 导入的第三方代码(子树、子模块等)?

How to modify third party code imported with git (subtree, submodules, etc)?

我有一个项目需要支持iOS7。我想使用一个不支持 iOS7 但可以轻松修改的库(我们称之为 LIB)。我也希望 LIB 会经常更改。

什么是理想的解决方案:

  1. 我将 LIB 的代码包含到我的项目中(用最后一个标记 发布)

  2. 我修改LIB来支持iOS7(通常只有一次提交)。我不想将此提交推送到 LIB 的原始存储库,但想将其保存在我的项目存储库中。

  3. 当新的 LIB 版本发布时,我在我的项目中更新它并且 合并第 2 点的更改或重做这些更改。

  4. 我不想在我的项目历史中包含 LIB 的完整历史(因为 git 子树做 AFAIK)。只有像 "LIB changed to 1.2.42; LIB updated to support iOS7;"

  5. 这样的东西

我可以自己复制 LIB 的代码或在 iOS7 支持下维护 LIB 的分支,但这很耗时而且不是很 "automagically"。我已经检查了 git 子模块和 git 子树,但据我所知,不可能有第 2 点,是吗?

解决这个问题的最佳方法是什么?

I can … maintain LIB's fork with iOS7 support

我认为这是最好的选择。

分叉库并在您的应用程序中使用您的分叉。当你想使用新版本的上游库时,将这些更改合并到你的分支中并更新你的主应用程序以使用你的分支库的新版本。

这当然可以使用 Git 子模块来完成,尽管像 CocoaPods 这样的依赖管理器可能是更好的选择。我通常更喜欢在可能的情况下使用依赖管理器,尽管我不是 iOS 开发人员并且不能特别谈论 CocoaPods。