维护 Git 分叉的最佳方法
Posted
技术标签:
【中文标题】维护 Git 分叉的最佳方法【英文标题】:Best way to maintain a Git fork 【发布时间】:2014-10-13 01:01:08 【问题描述】:公司 ACME 保留了我们扩展和定制的产品 X。他们已经让他们的 git 存储库对我们可见,但我们无法写入它。 ACME 正在使用他们自己的内部 Git 服务器和 Gitolite。
我们的开发人员想要写入它,所以我们需要一个本地副本。但是,我很乐意保留 ACME 公司的 Commit 历史记录。有没有办法做到这一点?另外,我应该如何使用公司 ACME 的代码更新我们的代码?我们正在使用 Github Enterprise。
我的思维方式失去了 ACME 公司的历史。
-
将存储库 X 克隆到暂存文件夹中。让 ACME 公司的此存储库保持最新状态。
创建新的存储库 Y 供我们使用。
在存储库 Y 中为“原始”代码创建分支。开发人员会从这里分支或分叉。
手动将文件从存储库 X 复制到存储库 Y 的“原始”分支。
一定有最好的方法。我本质上是想创建一个本地分支并保持更新,同时仍然让我们的开发人员能够访问提交代码。
【问题讨论】:
【参考方案1】:在我看来,您可以分叉 ACME 存储库。因此,现在您对分叉的存储库(或本地克隆)具有写入权限。
现在您可以在此本地存储库中创建一个新分支以继续您的开发,同时仍保持主分支(或将其重命名为任何适合您的需要)与原始只读存储库链接。
这样做,每当您需要将代码更新到 ACME 存储库中所做的最新开发时,您可以简单地从远程提取他们的更改并将它们合并到您的开发分支。无需创建该存储库的多个副本。
【讨论】:
谢谢。我了解如何进行本地克隆然后创建分支,但是如何将其发布到我们的 Github Enterprise 设置以便其他人可以看到呢?本地克隆不会有对 ACME 存储库的引用吗? 不,您可以选择要推送到存储库的分支。关于遥控器,没有遥控器被推送到 github 存储库。如果您指的是提交历史记录,则通过 refs 可以使用,但如果您指的是远程,则不会将其推送到 github。【参考方案2】:这称为“供应商分支”模式。 (考虑将这些 SO 标签添加到您的帖子中。)
您还可以在您的代表中嵌入 ACME 人工制品:未更改的原始 ACME 代码将独立存在(所谓的“供应商”-)分支,并将合并到“主”或您需要的任何地方。
每当 ACME 更改代码时,您检查 ACME 供应商分支并将更新存储在那里,使用供应商标签进行标记(这便于查看内部的 ACME 版本),并在需要的地方合并更改。
添加编辑:了解此机制后,请查看subtree merge mechanism。
【讨论】:
添加了“供应商分支”标签。谢谢!以上是关于维护 Git 分叉的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
调用 Activity.Recreate() 后维护我的 Activity 后台堆栈的最佳方法是啥?