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

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.dtcms.com/a/289376.html

相关文章:

  • 基于自定义数据集微调SigLIP2-分类任务
  • C语言:深入理解指针(2)
  • FreeRTOS学习笔记之内存管理
  • Spring MVC上下文容器在Web容器中是如何启动的(源码深入剖析)?
  • LeetCode 121. 买卖股票的最佳时机
  • Docker安装mysql、redis
  • 学习日志15 python
  • 深入理解Graphite协议:数据采集、存储与可视化的核心技术
  • [硬件电路-57]:根据电子元器件的受控程度,可以把电子元器件分为:不受控、半受控、完全受控三种大类
  • 65-OVP保护电路
  • 医学图像超分辨率重建深度学习模型开发报告
  • [硬件电路-58]:根据电子元器件的控制信号的类型分为:电平控制型和脉冲控制型两大类。
  • FNAF同人:简陋的测试
  • Pact 合约测试框架
  • 民法学学习笔记(个人向) Part.4
  • 20250720-5-Kubernetes 调度-污点与污点容忍_笔记
  • 力扣(LeetCode)第 459 场周赛
  • pthread_detach与pthread_join区别及使用场景
  • MySQL EXPLAIN 解读
  • 奥比中光双目摄像头实现物品抓取的机器人系统
  • 算法-递推
  • golang踩坑之url不会decode问题
  • 物联网安装调试-继电器
  • Google-多代理设计:用更好的提示和拓扑优化代理
  • 可视化技术如何拯救柔性生产?小批量定制化订单的排产仿真与产能透视
  • Navicat Premium:一站式数据库管理解决方案
  • Codeforces Round 1037 (Div. 3)(A,B,C,D,E,F,G1)
  • Centos卷挂载失败系统无法启动
  • 力扣:动态规划java
  • 《剥开洋葱看中间件:Node.js请求处理效率与错误控制的深层逻辑》