当前位置: 首页 > 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.lryc.cn/news/594034.html

相关文章:

  • [硬件电路-55]:绝缘栅双极型晶体管(IGBT)的原理与应用
  • Elasticsearch 简化指南:GCP Google Compute Engine
  • windows + phpstorm 2024 + phpstudy 8 + php7.3 + thinkphp6 配置xdebug调试
  • Qt 应用程序入口代码分析
  • QT无边框窗口
  • 学习C++、QT---30(QT库中如何自定义控件(自定义按钮)讲解)
  • 在vue中遇到Uncaught TypeError: Assignment to constant variable(常亮无法修改)
  • Ajax简单介绍及Axios请求方式的别名
  • 最简单的 Android TV 项目示例
  • Request和Response相关介绍
  • SparseTSF:用 1000 个参数进行长序列预测建模
  • 分享如何在Window系统的云服务器上部署网站及域名解析+SSL
  • [数据库]Neo4j图数据库搭建快速入门
  • 理解操作系统
  • Leetcode 06 java
  • 深入理解设计模式:访问者模式详解
  • VSCode中Cline无法正确读取终端的问题解决
  • 详解Mysql Order by排序底层原理
  • 金融大前端中的 AI 应用:智能投资顾问与风险评估
  • Facebook 开源多季节性时间序列数据预测工具:Prophet 快速入门 Quick Start
  • Centos卷挂载失败系统无法启动
  • 【Java项目安全基石】登录认证实战:Session/Token/JWT用户校验机制深度解析
  • Android系统5层架构
  • 手推OpenGL相机的正交投影矩阵和透视投影矩阵(附源码)
  • Java 大视界 -- Java 大数据在智能安防门禁系统中的权限动态管理与安全审计(353)
  • LeetCode第337题_打家劫舍III
  • 如何实战优化SEO关键词提升百度排名?
  • SQL Server(2022)安装教程及使用_sqlserver下载安装图文
  • python的pywebview库结合Flask和waitress开发桌面应用程序简介
  • Flink2.0学习笔记:Table API SQL