如何跟踪分叉项目中的原始代码库?

How do I keep track of the original codebase in a forked project?

我使用 git 管理的项目(在 github 上,如果相关)的情况有点复杂。

对于大多数项目,我的 git 工作流程 (1) 如下所示:

main repo (upstream)
|
|_repo A (origin)

我在自己的 repo (repo A) 的分支中修改代码,然后推送到 repo。合并 PR 后,我使用以下命令同步 repo A

pull upstream master
push origin master

这里没什么特别的,它是一个基本的 git 工作流程,其他人可以轻松地协作完成该项目。

我现在正在处理另一个工作流程更复杂的项目,它看起来像这样:

original repo
|
|_main repo (upstream)
  |
  |_repo A (origin)

基本上,main repooriginal repo 的一个分支,不再积极开发。 main 分支现在是代码库的 官方版本 和用户 pull/push 他们的更改 to/from main repo (如上) . 但是,original repo 有一些偶尔的更新可能需要合并到 main repo 中。显然 main 将包含 original 不包含的更改,因此简单的工作流程 (1) 不再适用。

为了保持官方版本的同步,我下载了最新版本的original,将其与分叉时制作的main的离线副本进行比较,然后手动将更改添加到(例如)repo A。通常,它不是很多文件或更改,所以它是可行的,但它远非理想的解决方案。我不是git方面的大专家,除了基本的东西,我的问题是是否有更好的方法来组织工作流程。或者也许有一些聪明的“git-fu”技术?

出于多种原因,从 main 推到 original(即使其成为上游)或取得 original 的所有权不是选项。

您可以使用 git remote 命令添加配置多个遥控器。因此,在您的情况下,您可以为原始存储库配置远程并使用 git pull remote-name branch --rebase 从中获取更新。根据 main 和 original 中的内容,您可能会遇到合并冲突,您可能需要手动修复这些冲突。