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

标签 git github

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

  1. Fork 原始项目,将原始内容移动到子目录中并将其推送到我的 GitHub 存储库。
  2. 启动一个新的 repo,与现有的 repo 进行子树 merge ,然后推送到我的 GitHub repo。
  3. 克隆现有的 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/

相关文章:

java - 你如何检查两个提交是否仅在代码格式上不同

git - 如何在 github/bitbucket 中提出代码建议?

git - 如何在不删除和重新 fork 的情况下重新获取 fork 的 Git 存储库?

java - 使用 Eclipse 插件检测 git 存储库中的代码气味?

c# - 如何远程编辑/创建 GitHub Repo 的 wiki?

git - 如何查看 github fork 是否可能比原来的更远?

Git 不推送所有文件和文件夹

git - Youtrack 与 GIT 的集成级别(不是 github)

git - 为什么按名称删除远程分支会产生错误,而按引用删除则不会?

perl - 如何使我的 Perl 模块的 README 文件与 Github 的 Markdown 显示兼容?