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.vn.md)为主线,系统讲解新手向开源项目提交第一份贡献的完整链路:Fork 复刻 → Clone 克隆 → 创建分支 → 修改文件 → Commit 提交 → Push 推送 → Pull Request 合入请求。读完本文,你将掌握这套在几乎所有开源项目中通用的协作流程,并能独立完成一次真实、可被合并的开源贡献。
项目概览:这个仓库为什么存在
first-contributions是一个专门面向开源新手的教学仓库(MIT 协议),其核心思路是"与其阅读教程,不如真正动手实践":仓库本身就是一个可以安全演练的环境,任何新手都可以按照官方步骤提交自己的名字并触发一次真实的 Pull Request,在真实协作环境中走完全部流程而不用担心破坏项目。
仓库结构本身就体现了这套教学设计:
- 根目录的 README.md 是英文原版完整教程;
- docs/translations 目录下提供了近数十种语言的翻译版本,包括中文简体(README.zh-cn.md)、中文繁体(README.zh-tw.md)以及本文所依据的越南语版本(README.vn.md);
- Contributors.md 是所有贡献者添加自己名字的目标文件,目前已积累数千条贡献记录(文件超过 5900 行),是这套流程被反复验证的活证据;
- docs/additional-material/git_workflow_scenarios 存放 Git 进阶场景文档;
- docs/gui-tool-tutorials 存放不使用命令行时的图形化工具教程。
说明:本文所有命令均以当前仓库教程为事实依据。若本机尚未安装 Git,请先按官方 Git 安装指引完成安装(Linux 可参考仓库内 installing-git-ubuntu.md 与 installing-git-arch.md),安装完成后在终端执行
git --version验证。
第一步:Fork(复刻)上游仓库
Fork 的含义是"复刻":点击仓库页面顶部的Fork按钮,在你的 GitHub 账号下生成一份该仓库的完整副本。
为什么要先 Fork 而不是直接修改原仓库?因为普通贡献者没有上游仓库的写权限。Fork 之后,你拥有自己副本的完全控制权,可以在其中自由创建分支、提交修改,最后通过 Pull Request 把改动"申请"回原仓库。这一机制也是 docs/how-to-contribute-to-open-source-projects.md 中"Fork and Clone → Create a Branch → Write Clean Code → Test → Open PR"贡献流程的第一步。
第二步:Clone(克隆)到本地
进入你的 GitHub 账号,打开刚才 Fork 出来的仓库,点击Code按钮,再点击copy to clipboard(复制到剪贴板)图标复制仓库 URL。
打开终端,执行:
git clone "url bạn vừa sao chép"其中"url bạn vừa sao chép"(去掉引号)就是上一步复制到的你名下副本的地址。例如:
git clone https://github.com/<你的GitHub用户名>/first-contributions.git把<你的GitHub用户名>替换成真实用户名后,这条命令会把 first-contributions 仓库的内容完整下载到你的电脑上,生成一个名为first-contributions的本地目录。克隆完成后,本地目录与你 GitHub 上的 fork 副本即建立了origin远程关联,后续git push默认推送的目标就是它。
第三步:创建独立分支
进入仓库目录(如果当前不在此目录中):
cd first-contributions然后使用git switch命令创建并切换到一个新分支:
git switch -c <tên-nhánh-mới-của-bạn>教程给出的示例分支名是:
git switch -c thêm-Tran-Ly-Vu其中thêm是越南语"添加"之意,即用add-你的名字这样的前缀说明分支用途(英文原版 README 中对应示例为git switch -c add-alonzo-church)。分支名并不强制包含add,但用动词前缀表明"为添加名单而创建"的意图是社区常见约定。
补充:如果你的 Git 版本较旧,执行git switch时报 "switchis not a git command" 错误,说明switch子命令在旧版本中尚不存在。此时改用经典写法即可:
git checkout -b <你的新分支名>checkout -b与switch -c语义等价:-b/-c均表示"创建新分支并立即切换过去"。
第四步:修改 Contributors.md 并提交
用文本编辑器打开仓库根目录的Contributors.md文件,把你的名字添加进去。
这里有一个重要的规范细节:不要加在文件开头或结尾,要加在中间任意位置。原因从文件内容即可看出——贡献者名单是不断追加的开放列表,若所有人都追加到开头或结尾,将不可避免地产生大量冲突;把名字插入中间可以分散写入点,降低与其他人同时提交时的合并冲突概率。
保存文件后,在项目目录执行git status检查工作区状态,你会看到Contributors.md已被标记为已修改(modified)。
接下来用git add把修改加入暂存区:
git add Contributors.md然后提交:
git commit -m "Them <ten-ban> vào danh sách Cộng tác viên"将<ten-ban>替换为你的名字。这条提交信息是越南语原文,意为"将 <你的名字> 添加到贡献者列表",如果你更习惯英文,写成git commit -m "Add your-name to Contributors list"同样符合规范。提交信息应简明描述改动内容,这是 Pull Request 评审者判断改动意图的第一依据。
第五步:Push 到你的 GitHub 分支
将本地提交推送到 GitHub 上你自己的 fork:
git push origin <tên-nhánh-của-bạn>把<tên-nhánh-của-bạn>替换为第三步创建的分支名。这里origin指代你 fork 出来的远程仓库。
英文原版 README 推荐加上-u参数:
git push -u origin <你的分支名>-u(--set-upstream)会把当前本地分支与远程分支建立跟踪关系,此后在该分支上直接执行git push即可,无需再重复指定远程与分支名。
Push 报错排查:身份认证失败
如果你在 push 时看到类似下面的报错,说明遇到了身份认证问题:
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/<你的用户名>/first-contributions.git/'自 2021 年 8 月起,GitHub 已移除 HTTPS 方式下的密码(口令)认证,必须改用**个人访问令牌(Personal Access Token)**或SSH 密钥完成认证。仓库教程给出的解决路径是:按照 GitHub 官方的 SSH 密钥教程,为你的账号生成并配置 SSH 密钥,之后改用 SSH 地址访问仓库。
英文原版 README 还给出了两个补充排查步骤:
- 执行
git remote -v检查当前远程地址。如果输出类似:origin https://github.com/your-username/your_repo.git (fetch) origin https://github.com/your-username/your_repo.git (push)说明远程仍指向 HTTPS 地址;
- 用 SSH 地址覆盖原远程地址:
git remote set-url origin git@github.com:your-username/your_repo.git否则即使配置了令牌,也可能持续被提示输入用户名密码而再次认证失败。
第六步:提交 Pull Request
回到你 GitHub 上的 fork 仓库页面,你会看到页面顶部出现一个Compare & pull request(比较并创建拉取请求)按钮,点击它:
- 确认比较基准:
base是上游原仓库的主分支(master/main),compare是你刚推送的功能分支; - 确认 diff 中只包含你对
Contributors.md的修改; - 点击创建 Pull Request,填写标题与说明后提交。
提交完成后,维护者会审阅你的改动并将其合并进项目主分支。合并成功后,你会收到 GitHub 的邮件通知——至此,你的第一次开源贡献正式完成。
后续行动:庆祝、巩固与进阶
完成这一整套fork → clone → edit → pull request流程,意味着你已掌握开源协作中最高频的标准工作流。教程建议接下来:
- 通过官方 Web 应用分享你的贡献成果;
- 在 Web 应用的"项目列表"中挑选带简单 issue(如
good-first-issue、help-wanted标签)的真实开源项目继续练习; - 系统学习更完整的开源贡献方法论,可阅读仓库内的 docs/how-to-contribute-to-open-source-projects.md 综合指南。
进阶资料:Git 工作流场景文档一览
完成基础流程后,docs/additional-material/git_workflow_scenarios/additional-material.md 汇总了一系列进阶 Git 技术文档,覆盖真实协作中几乎必然会遇到的场景:
| 场景 | 文档 | 适用时机 |
|---|---|---|
| 修改最近一次提交 | amending-a-commit.md | 需要调整已做的提交(改提交信息或补充遗漏改动),且尚未 push |
| 配置 Git 用户信息 | configuring-git.md | 需要精细控制 Git 配置项 |
| 保持 fork 与上游同步 | keeping-your-fork-synced-with-this-repository.md | 你的 fork 缺少上游仓库的新改动时 |
| 把提交移动到其他分支 | moving-a-commit-to-a-different-branch.md | 提交落在了错误的分支上 |
| 删除文件 | removing-a-file.md | 提交前需要从本地仓库移除文件 |
| 删除分支 | removing-branch-from-your-repository.md | Pull Request 合并后清理分支 |
| 解决合并冲突 | resolving-merge-conflicts.md | 多人并行修改同一文件时 |
| 回滚已推送的提交 | reverting-a-commit.md | 需要撤销已经 push 到远程的提交 |
| 压缩多个提交 | squashing-commits.md | 评审者要求把多个提交合并为一个信息完整的提交 |
| 撤销本地提交 | undoing-a-commit.md | 本地仓库状态混乱需要重置 |
| 创建 .gitignore | creating-a-gitignore-file.md | 只提交必要文件,忽略临时与构建产物 |
| 存储凭据 | storing-credentials.md | 为仓库安全地存储认证凭据(注意遵循工作单位的安全策略) |
| 学习资源索引 | Useful-links-for-further-learning.md | 新手与进阶者查找技巧类网站与博客 |
| Gitflow 工作流 | gitflow.md | 了解基于分支模型的团队协作规范 |
其中 keeping-your-fork-synced-with-this-repository.md 尤其值得关注:它解释了开源协作中典型的"三角工作流"——上游公共仓库(upstream)、你的 GitHub fork、你的本地仓库三者之间的同步关系。核心命令链为:
git remote add upstream <上游仓库地址> # 将上游仓库注册为名为 upstream 的远程 git fetch upstream # 拉取上游最新提交 git rebase upstream/main # 将上游主分支的更新变基到本地主分支 git push origin main # 把同步后的主分支推送到自己的 fork图形化工具教程:不熟悉命令行的替代方案
如果你不习惯命令行操作,仓库在 docs/gui-tool-tutorials 中提供了多款图形化工具的逐步教程,覆盖 Fork → Clone → Branch → Commit → Push → Pull Request 的同样流程:
| 工具 | 教程 |
|---|---|
| GitHub Desktop | github-desktop-tutorial.md |
| Visual Studio 2017 | github-windows-vs2017-tutorial.md |
| GitKraken | gitkraken-tutorial.md |
| Visual Studio Code | github-windows-vs-code-tutorial.md |
| Atlassian Sourcetree | sourcetree-macos-tutorial.md |
| IntelliJ IDEA | github-windows-intellij-tutorial.md |
此外,docs/cli-tool-tutorials 还收录了git命令行与 GitHub CLI(gh)的专项教程,以及 docs/translations/Translations.md 这一语言索引页,方便不同语言背景的读者获取母语版教程。
仓库内部视角:教程背后的实践验证
从仓库结构可以印证这套教程的真实性与可操作性:
- Contributors.md已包含数千条来自世界各地贡献者的记录(超过 5900 行),每条记录形如
- 名字。这意味着"按教程提交名字 → 维护者合并"的循环已被真实执行了数千次,流程的每一步都经受了实际检验; - docs/translations中数十种语言的 README 翻译本身就是开源贡献的产物——任何读者都可以像修改
Contributors.md那样,通过翻译或修订文档为项目做贡献,这是从"练习贡献"过渡到"真实贡献"的天然跳板; - 进阶与 GUI 教程目录覆盖了从"推送失败"到"合并冲突"的各类真实故障场景,说明教程体系在设计上就面向"会出错的新手",而非理想化的演示路径。
总结:first-contributions 提供了一条低门槛、零风险、可重复的贡献练习路径。按照本文梳理的六步流程——Fork、Clone、创建分支、修改并提交、Push、提交 Pull Request——你可以在几分钟内完成第一次真实开源贡献;而仓库内的进阶文档、GUI 教程与多语言资源,则为你从"完成第一次"走向"持续参与开源"提供了完整的后续学习地图。
【免费下载链接】first-contributions🚀✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考