这是一个在开源协作中非常常见的配置。
简单来说,upstream
在这里指的是你 Fork 来的那个原始的、官方的仓库。
下面我们来详细解释一下这个 git remote -v
输出的含义:
1. 两条“遥控器” (Remotes)
你的 git
配置了两个远程仓库的地址,就像电视有两个遥控器,一个控制你的电视,一个控制你邻居(官方项目)的电视。
-
origin
: 这是你自己的仓库。https://github.com/Tipriest/ocs2.git
- 这通常是你从 GitHub 上 Fork (分叉) 过来的项目,它属于你自己的账号 (
Tipriest
)。 - 你对这个仓库有完全的读写权限。你开发的新功能、修复的 bug,都会
push
(推送)到这里。
-
upstream
: 这是项目的“上游”,即原始官方仓库。git@github.com:leggedrobotics/ocs2.git
- 这是
ocs2
这个项目的官方维护地址,属于leggedrobotics
这个组织。 - 你通常只有只读权限。你的主要操作是从这里
fetch
(拉取) 最新的官方更新,以保持你的 Fork 和官方版本同步。
2. 这个工作流有什么用?(The Fork & Pull Request Workflow)
这种 origin
+ upstream
的配置是开源社区最标准的协作流程,通常按以下步骤进行:
-
Fork: 你在 GitHub 上看中了
leggedrobotics/ocs2
这个项目,于是点击 “Fork” 按钮,在你的账号下创建了一个副本Tipriest/ocs2
。 -
Clone: 你把你自己的副本克隆到本地电脑:
git clone https://github.com/Tipriest/ocs2.git
这时,
git remote -v
只会显示origin
。 -
Add Upstream: 为了能方便地获取官方仓库的最新更新,你手动添加了
upstream
这个远程地址:git remote add upstream git@github.com:leggedrobotics/ocs2.git
执行完这步,你的
git remote -v
就和你提供的一样了。 -
同步更新: 当官方仓库 (
upstream
) 有了新的提交,而你的 Fork (origin
) 落后了,你可以这样做来同步:# 1. 从官方仓库拉取最新的代码和分支信息 git fetch upstream# 2. 切换到你的主分支 (可能是 main 或 master) git checkout main# 3. 将官方仓库的更新合并到你的本地主分支 git merge upstream/main# 4. 将同步后的主分支推送到你自己的 GitHub 仓库 git push origin main
-
贡献代码:
- 你在一个新分支上进行开发 (
git checkout -b my-new-feature
)。 - 开发完成后,你将这个新分支推送到你自己的仓库 (
git push origin my-new-feature
)。 - 最后,你在 GitHub 上创建一个 Pull Request (PR),请求
leggedrobotics/ocs2
的维护者将你的my-new-feature
分支合并到他们的主分支中。
- 你在一个新分支上进行开发 (
总结
名称 | 指向 | 你的权限 | 主要用途 |
---|---|---|---|
origin | 你自己的 Fork 仓库 (Tipriest/ocs2 ) | 读/写 | 推送 (push ) 你的个人修改和新功能。 |
upstream | 原始的官方仓库 (leggedrobotics/ocs2 ) | 只读 | 拉取 (fetch /pull ) 官方的最新更新,保持同步。 |
所以,upstream
是一个约定俗成的名字,代表了代码的“上游”源头,让你的本地仓库能同时与“自己的远程仓库”和“官方的远程仓库”进行交互。