我想将一个现有项目(托管在 GitHub 上) merge 为我的项目的一部分(放入子目录中),同时保持历史记录和更新该项目的能力。我发现大约可以采用三种方法:
- Fork 原始项目,将原始内容移动到子目录中并将其推送到我的 GitHub 存储库。
- 启动一个新的 repo,与现有的 repo 进行子树 merge ,然后推送到我的 GitHub repo。
- 克隆现有的 repo,创建一个新的主 repo,将克隆的 repo 作为 子模块 放入主 repo,推送。
(1) 变体可能是 GitHub 上更可取的变体,因为他们可能可以共享源代码。但从逻辑上讲,我的项目不是现有项目的分支。相反,现有的只是一个模块。此外,我不确定将现有代码移动到子目录中是否不会产生问题。 我可能更喜欢 (2) 变体,因为只有一个 repo 协议(protocol)。 (3) 需要处理多个 repo 协议(protocol),但逻辑上最接近我的情况。
我对此进行了相当多的研究,但我不确定。在这种情况下你会推荐什么?提前致谢!
最佳答案
如果两个项目(GitHub 上的和你的)的开发生命周期不同,那么子模块方法更好。
即:如果您在没有系统地更改其他 GitHub 项目的情况下更改您的项目,那么您应该考虑子模块方法。
但是,要实现这一点,您需要 (1) 和 (3) 的组合:
- 如果您不能直接贡献(推送)到 GitHub 项目,则需要 fork 它 (1)。
- 然后您需要将该 fork 项目作为项目中的子模块进行引用 (3)。
它将允许您引用 GitHub 项目的一个特定修订版,同时允许您更新该子模块并为其进行特定推送(如“true nature of submodules”中所述)。
但是一旦你更新了子模块,不要忘记提交你的项目(这是子模块的“父项目”),以便注册你现在引用的子模块的新版本。
关于Git/GitHub : fork, 子树 merge 或外部代码的子模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008232/