当前位置: 首页 > java >正文

git fork的项目远端标准协作流程 仓库设置[设置成upstream]

这是一个在开源协作中非常常见的配置。

简单来说,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 的配置是开源社区最标准的协作流程,通常按以下步骤进行:

  1. Fork: 你在 GitHub 上看中了 leggedrobotics/ocs2 这个项目,于是点击 “Fork” 按钮,在你的账号下创建了一个副本 Tipriest/ocs2

  2. Clone: 你把你自己的副本克隆到本地电脑:

    git clone https://github.com/Tipriest/ocs2.git
    

    这时,git remote -v 只会显示 origin

  3. Add Upstream: 为了能方便地获取官方仓库的最新更新,你手动添加了 upstream 这个远程地址:

    git remote add upstream git@github.com:leggedrobotics/ocs2.git
    

    执行完这步,你的 git remote -v 就和你提供的一样了。

  4. 同步更新: 当官方仓库 (upstream) 有了新的提交,而你的 Fork (origin) 落后了,你可以这样做来同步:

    # 1. 从官方仓库拉取最新的代码和分支信息
    git fetch upstream# 2. 切换到你的主分支 (可能是 main 或 master)
    git checkout main# 3. 将官方仓库的更新合并到你的本地主分支
    git merge upstream/main# 4. 将同步后的主分支推送到你自己的 GitHub 仓库
    git push origin main
    
  5. 贡献代码:

    • 你在一个新分支上进行开发 (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 是一个约定俗成的名字,代表了代码的“上游”源头,让你的本地仓库能同时与“自己的远程仓库”和“官方的远程仓库”进行交互。

http://www.xdnf.cn/news/15826.html

相关文章:

  • 快速上手git
  • LINUX入门(二)QT的安装及运行环境搭建
  • 【实习总结】Qt中如何使用QSettings操作.ini配置文件
  • Vue中组件的生命周期
  • 08_Opencv_基本图形绘制
  • Docker实战:使用Docker部署envlinks极简个人导航页
  • 激光雷达和相机在线标定
  • [C/C++安全编程]_[中级]_[如何安全使用循环语句]
  • 语言学校为何成为IT润日路径的制度跳板?签证与迁移结构的工程化拆解
  • 交通出行大前端与 AI 融合:智能导航与出行预测
  • 智能制造——48页毕马威:汽车营销与研发数字化研究【附全文阅读】
  • jxORM--编程指南
  • linux + 宝塔面板 部署 django网站 启动方式:uwsgi 和gunicorn如何选择 ?
  • windows命令提示符cmd使用
  • Django接口自动化平台实现(四)
  • 第 30 场 蓝桥·算法入门赛 题解
  • 制作mac 系统U盘
  • 零基础学习性能测试第一章-为什么会有性能问题
  • 全面解析 JDK 提供的 JVM 诊断与故障处理工具
  • VSCode使用Jupyter完整指南配置机器学习环境
  • 秒赤Haproxy配置算法
  • `TransportService` 是 **Elasticsearch 传输层的“中枢路由器”**
  • SparseTSF:用 1000 个参数进行长序列预测建模
  • RabbitMQ面试精讲 Day 4:Queue属性与消息特性
  • Java拓扑排序:2115 从给定原材料中找到所有可以做出的菜
  • LWJGL教程(2)——游戏循环
  • 网络(HTTP)
  • 【实战1】手写字识别 Pytoch(更新中)
  • 【no vue no bug】 npm : 无法加载文件 D:\software\nodeJS\node22\npm.ps1
  • 嵌入式硬件篇---舵机(示波器)