Git / GitHub:外部代码的fork,子树合并或子模块?

时间:2010-10-24 12:41:28

标签: git github

我想将现有项目(托管在GitHub上)作为我项目的一部分(放入子目录),同时保持历史记录和更新该项目的能力。我发现可以有三种方法:

  1. 分叉原始项目,将原始内容移动到子目录中并将其推送到我的GitHub仓库。
  2. 使用现有仓库创建一个新仓库,执行子树合并并推送到我的GitHub仓库。
  3. 克隆现有仓库,制作新的主仓库,将克隆仓库作为子模块放入主仓库,推送。
  4. (1)变体可能是GitHub的首选变体,因为它们可能共享源。但从逻辑上讲,我的项目不是现有项目的分支。而现有的只是一个模块。此外,我不确定将现有代码移动到子目录中是否可能不会出现问题。 我可能更喜欢(2)变体,因为只有一个回购。 (3)需要与几个回购合作,但逻辑上最接近我的情况。

    我对此进行了相当多的研究,但我并不确定。在这种情况下你会推荐什么?提前谢谢!

1 个答案:

答案 0 :(得分:7)

如果两个项目(GitHub和你的项目)的开发生命周期不同,那么子模块方法会更好。
即:如果您在没有系统地更改其他GitHub项目的情况下更改项目,那么您应该考虑子模块方法。

但是,要实现这一点,您需要(1)和(3)的组合:

  • 如果你不能直接向GitHub项目贡献(推送),你需要分叉它(1)。
  • 然后您需要将该分叉项目作为项目中的子模块引用(3)。

它允许您引用GitHub项目的一个特定修订版,同时允许您更新该子模块并对其进行特定推送(如“true nature of submodules”中所述)。
但是一旦你更新了子模块,不要忘记提交你的项目(这是子模块的“父项目”),以便注册你现在引用的子模块的新版本。