news 2026/9/19 23:47:09

first-contributions 开源新手实战指南:从 fork 到 Pull Request 的首次贡献完整工作流

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
first-contributions 开源新手实战指南:从 fork 到 Pull Request 的首次贡献完整工作流

first-contributions 开源新手实战指南:从 fork 到 Pull Request 的首次贡献完整工作流

【免费下载链接】first-contributions🚀✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions

本文以 first-contributions 项目的塞尔维亚语(拉丁字母)版教程 docs/translations/README.sr-Latn.md 为核心,逐步骤拆解fork → clone → edit → pull request这一开源协作经典工作流,并结合仓库内的 Contributors.md、进阶文档与 GUI 教程,帮助初学者在真实仓库中完成第一个开源贡献,同时掌握每次贡献都会用到的 Git 命令、分支规范与常见报错处理。

一、项目定位与本文文档背景

first-contributions 是一个以教学为唯一目的的开源仓库:它的 README 本身就是"活教材"。初学者不需要先学习整套 Git 理论,只需按照 README 的指引一步步操作,把名字加入 Contributors.md 贡献者名单,就能真实地走完一次完整的代码贡献流程。

本文依据的 docs/translations/README.sr-Latn.md 是该项目 README 的塞尔维亚语拉丁字母版本,与根目录 README.md(英文原版)内容同构;仓库还在 docs/translations/README.sr-Cyrl.md 提供了塞尔维亚语西里尔字母版本。整个仓库通过 docs/translations/Translations.md 维护了数十种语言的入口索引,体现了开源项目"降低语言门槛"的社区文化。仓库采用 MIT 许可证(README 徽章标注)。

二、动手前的准备:git 环境与 GitHub 账号

原文开篇明确提示:如果本机还没有安装 git,请先完成安装(文档指向 GitHub 官方的 Set up Git 指引,本文以文字说明替代外部链接)。安装完成后,可以在终端执行以下命令确认环境就绪:

git --version

除此之外还需要:

  • 一个 GitHub 账号(用于 fork 仓库、创建 pull request);
  • 一种认证方式:推荐提前配置 SSH 密钥;如果使用 HTTPS 地址,则需准备 personal access token(密码认证已于 2021 年 8 月 13 日起被 GitHub 移除,详见下文"认证错误"一节)。

三、第一步:Fork 仓库

概念:fork 是在你自己的 GitHub 账号下创建原仓库的一份完整副本。此后所有的改动都发生在自己的副本里,不会影响原仓库,这是开源协作中"先分叉、再合并"的基础。

操作:打开本仓库页面,点击页面顶部的Fork按钮。完成后,你的账号下会出现一个first-contributions仓库副本。

四、第二步:克隆仓库到本地

概念:clone(克隆)会把 GitHub 上 fork 出来的仓库完整下载到本地机器,之后才能在本地编辑文件。

获取克隆地址

  1. 进入自己的 GitHub 账号,打开刚刚 fork 出来的first-contributions仓库;
  2. 点击Code按钮;
  3. 切换到SSH标签页;
  4. 点击"复制 URL 到剪贴板"图标,复制地址。

执行克隆:打开终端,运行以下 git 命令:

git clone "url you just copied"

其中"url you just copied"(不带引号)替换为刚复制的、指向你自己 fork 副本的仓库地址。例如:

git clone git@github.com:this-is-you/first-contributions.git

其中this-is-you代表你的 GitHub 用户名。这条命令会把 GitHub 上 first-contributions 仓库的内容完整复制到你的电脑上。

补充原理git clone在复制内容的同时,会默认把来源仓库注册为名为origin的远程引用,并检出默认分支(main)、建立本地分支与远程分支的跟踪关系,因此后续git pushgit pull可以直接基于origin工作,这是克隆后"开箱即用"的原因。

五、第三步:创建专属分支

先进入克隆下来的仓库目录(如果尚未进入):

cd first-contributions

然后使用git switch命令创建新分支并切换过去:

git switch -c your-new-branch-name

例如:

git switch -c add-alonzo-church

参数说明:-c--create的缩写,含义是"创建名为your-new-branch-name的新分支,并立即切换到该分支"。

兼容旧版 git:文档特别给出了一个常见报错场景——如果命令执行后提示Git: "switch" is not a git command. See "git –help",说明你使用的是较旧版本的 git(尚未引入git switch),此时改用传统写法即可:

git checkout -b your-new-branch-name

为什么必须建分支:这是开源协作的基本规范。每个 pull request 应当对应一个独立的功能分支,把不相关的改动隔离在不同分支中,既方便维护者逐个审查,也便于自己在多个任务之间切换。文档示例中add-alonzo-church这类"动词-对象"式命名(add-你的名字)也是社区中常见的命名习惯。

六、第四步:修改文件并提交

修改文件:用文本编辑器打开仓库根目录下的 Contributors.md 文件,在文件中加入你的名字。文档特别强调:不要加在文件开头或结尾,请加在中间任意位置,然后保存文件。

这个文件正是本教程的"练兵场"——它是真实存在的贡献者名单(当前仓库中已积累 5920 行),每位学习者的"贡献"就是把名字追加进这份名单,从而在不涉及复杂业务代码的情况下完整体验提交流程。

查看变更:回到项目目录执行git status,可以看到有改动存在(Contributors.md会出现在"未暂存的更改"区域)。

暂存改动:使用git add把改动加入刚刚创建的分支:

git add Contributors.md

提交改动:使用git commit提交:

git commit -m "Add your-name to Contributors list"

将命令中的your-name替换为你的真实名字。-m参数用于直接指定提交信息,避免打开交互式编辑器。

底层原理补充:这条流程对应 Git 的"三区模型"——工作区(你编辑文件的地方)→ 暂存区(git add后,改动被记录但尚未入库)→ 本地版本库(git commit后,改动正式成为一次提交)。git status正是用来观察文件在这三个区域之间流转状态的命令:未暂存的改动与已暂存的改动会分别展示,是提交前检查内容是否完整的重要工具。

七、第五步:推送到 GitHub

使用git push把本地提交推送到 GitHub:

git push -u origin your-branch-name

your-branch-name替换为之前创建的分支名。

参数说明:

  • origin:默认的远程仓库名,即你 fork 出来的 GitHub 仓库;
  • -u--set-upstream):建立本地分支与远程分支的跟踪关系。加上它之后,以后在这个分支上执行git push/git pull可以直接省略远程名和分支名;
  • your-branch-name:要推送的本地分支名。

常见错误:认证失败

文档用较大篇幅专门处理了 push 阶段最常见的报错。自 2021 年 8 月 13 日起,GitHub 移除了 HTTPS 协议的密码认证,只能使用 personal access token 或 SSH 密钥。典型报错信息如下:

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: Authentication failed for 'https://github.com/<your-username>/first-contributions.git/'

处理步骤

  1. 为你的账号生成并配置 SSH 密钥(文档建议参照 GitHub 官方的 SSH 密钥添加教程操作,此处以文字说明替代外部链接);
  2. 先检查当前远程地址是否确实指向 HTTPS:
git remote -v

如果输出类似:

origin https://github.com/your-username/your_repo.git (fetch) origin https://github.com/your-username/your_repo.git (push)
  1. 将远程地址切换为 SSH 格式:
git remote set-url origin git@github.com:your-username/your_repo.git

否则 push 时仍会被反复要求输入用户名和密码,并最终报认证错误。

八、第六步:提交 Pull Request

推送成功后,回到 GitHub 上你自己的 fork 仓库,页面会出现一个Compare & pull request按钮:

  1. 点击该按钮,进入 pull request 创建页面;
  2. 确认改动内容无误后,点击提交 pull request;
  3. 维护者审核后会把这些改动合并进项目的主分支(main),合并完成后你会收到邮件通知。

至此,一个贡献从"想法"到"合入上游仓库"的完整链路就打通了。值得说明的是:仓库根目录的 Contributors.md 中那数千行名单,正是由无数个这样的小型 pull request 累积而成,这本身就是开源协作力量最直观的证明。

九、完成之后的进阶方向

恭喜!你已经完成了标准的fork → clone → edit → pull request工作流——这是作为开源协作者最常遇到、也最重要的标准流程。

完成首秀之后,文档给出了三个进阶方向:

  1. 更多练习:继续在其他练习项目中反复打磨这套流程;
  2. 参与真实项目:从带有"easy issue"标签的简单问题入手,开始为其他开源项目做贡献;
  3. 学习进阶 Git 技巧:本仓库在 docs/additional-material/git_workflow_scenarios/additional-material.md 汇总了一系列实战场景文档,覆盖协作中会反复遇到的进阶问题:
进阶主题仓库文档路径
修改(amend)最近一次提交docs/additional-material/git_workflow_scenarios/amending-a-commit.md
配置 git 用户信息等选项docs/additional-material/git_workflow_scenarios/configuring-git.md
保持 fork 与上游仓库同步docs/additional-material/git_workflow_scenarios/keeping-your-fork-synced-with-this-repository.md
把提交移动到其他分支docs/additional-material/git_workflow_scenarios/moving-a-commit-to-a-different-branch.md
从本地仓库删除文件docs/additional-material/git_workflow_scenarios/removing-a-file.md
从仓库删除分支docs/additional-material/git_workflow_scenarios/removing-branch-from-your-repository.md
解决合并冲突docs/additional-material/git_workflow_scenarios/resolving-merge-conflicts.md
撤销(revert)已推送的提交docs/additional-material/git_workflow_scenarios/reverting-a-commit.md
用交互式 rebase 合并(squash)提交docs/additional-material/git_workflow_scenarios/squashing-commits.md
撤销本地提交docs/additional-material/git_workflow_scenarios/undoing-a-commit.md
学习资源汇总docs/additional-material/git_workflow_scenarios/Useful-links-for-further-learning.md
创建 .gitignore 文件docs/additional-material/git_workflow_scenarios/creating-a-gitignore-file.md
安全地存储凭证docs/additional-material/git_workflow_scenarios/storing-credentials.md

此外,该目录还收录了why-using-branches.mdrebase-vs-merge.mdresetting-a-branch.mdresetting-a-commit.mdstashing-a-file.mdcheck-commit-log.mdgitflow.mddelete-branch-locally.md等更多实战场景文档,可作为持续进修的索引。

十、不习惯命令行?用 GUI 工具完成同样流程

如果命令行让你感到不适,文档明确给出了替代路径:仓库在 docs/gui-tool-tutorials 目录下维护了多款图形界面工具的完整教程,覆盖了主流平台与 IDE:

工具教程路径
GitHub Desktopdocs/gui-tool-tutorials/github-desktop-tutorial.md
Visual Studio 2017docs/gui-tool-tutorials/github-windows-vs2017-tutorial.md
GitKrakendocs/gui-tool-tutorials/gitkraken-tutorial.md
Visual Studio Codedocs/gui-tool-tutorials/github-windows-vs-code-tutorial.md
Atlassian Sourcetreedocs/gui-tool-tutorials/sourcetree-macos-tutorial.md
IntelliJ IDEAdocs/gui-tool-tutorials/github-windows-intellij-tutorial.md

该目录还包含旧版 GitHub Desktop 教程 github-desktop-old-version-tutorial.md、Sublime Merge 教程 sublime-merge-tutorial.md 以及 translations 多语言子目录,基本覆盖了各类开发环境。

结语

回顾整条路径:fork 建立自己的副本 → clone 拉到本地 → 新建分支隔离改动 → 编辑文件并 commit 记录 → push 推回远程 → 提交 pull request 请求合并。这套流程既是 first-contributions 项目的核心教学主线,也是所有开源项目协作的通用范式。无论你后续参与多少个项目,遇到多少次 review 意见、合并冲突或版本回退,本文涉及的这些基础命令与 进阶文档 都会是你最可靠的工具箱。

【免费下载链接】first-contributions🚀✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 23:45:41

序贯决策博弈:从博弈树到逆向归纳的工程落地

简介&#xff1a;本资源是《博弈论教程&#xff08;第三版&#xff09;》第四章配套教学PPT&#xff0c;聚焦序贯决策博弈核心内容&#xff0c;面向高校经济学、管理学及应用数学专业师生&#xff0c;以及对动态博弈建模有需求的研究者与从业者。课件系统讲解博弈树构建、策略与…

作者头像 李华
网站建设 2026/9/19 23:45:29

Claude Code 连上 TaoToken 后能在 VS Code 里正常对话

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 23:41:11

从板卡到源码:Zephyr RTOS 中 NXP FRDM-KW41Z 开发板支持全解析

操作系统嵌入式RTOS物联网 【免费下载链接】zephyr Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures. 项目地址&#xff1a; https://gitcode.com/GitHub_Trending/ze/zep…

作者头像 李华
网站建设 2026/9/19 23:40:59

电动车租赁平台系统 — 系统设计与实现

电动车租赁平台系统 — 系统设计与实现电动车租赁平台系统是一套基于 Spring Boot 与 Vue 的前后端分离管理系统&#xff0c;包含后台管理端与用户前台展示端&#xff0c;本文整理主要功能界面&#xff0c;供学习与源码参考。技术栈后端&#xff1a;Spring Boot MyBatis数据库…

作者头像 李华
网站建设 2026/9/19 23:38:32

老Mac升级macOS:OpenCore Legacy Patcher操作指南

老Mac升级macOS&#xff1a;OpenCore Legacy Patcher操作指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 老Mac升级macOS这条路&#xff0c;苹果官方渠道…

作者头像 李华