Datawhale干货
作者:陈思州,Datawhale成员
学 AI,几乎绕不开开源内容。
最新的模型、最火的项目、最好用的工具,第一时间几乎都发在 GitHub 上。
我最近也写了不少 AI 开源项目相关内容,发现很多人一打开 GitHub 就被一堆词卡住了:Fork、Clone、Branch、Commit、Pull Request、Issue、README、License……这些词单独看都不难,但放到一个开源项目里,就很容易搞混。
这篇按 4 个问题梳理:
Git 和 GitHub 有什么区别? Fork / Clone / Branch / Commit / PR 分别是什么? 一次开源贡献的完整流程是什么? 新手最容易混淆哪些地方?
一、Git 和 GitHub 有什么区别?
Git 是版本控制工具。 它会记录代码每次修改了什么、谁改的、什么时候改的。你也可以用它切换版本、合并分支、查看历史记录。
GitHub 是放代码和协作的平台。 项目可以放在 GitHub 上,别人可以查看、下载、提 Issue、提交 Pull Request,也可以参与 review。
所以你在本地敲的很多命令,比如 git add、git commit、git branch,主要是在使用 Git。你在网页上看到的 Star、Issue、PR、Fork,更多是 GitHub 上的协作功能。
可以这样理解:
Git:帮你管理代码版本
GitHub:帮大家一起协作项目
二、这些高频词到底是什么意思?
Repository(仓库),可以理解成一个项目的代码空间。一个仓库里通常会有代码、README、配置文件、文档、测试文件等。
Clone 是把远程仓库下载到本地。比如你看到一个项目,想在自己电脑上运行,就需要 clone。clone 后,你电脑上会有一份完整代码。
Fork 是把别人的仓库复制到你自己的 GitHub 账号下。开源贡献里经常会用到 fork,因为你一般不能直接改原项目,所以先在自己账号下有一份副本。
Branch(分支),可以理解成从主线代码上拉出一条修改线。比如你想修 README,就新建一个fix-readme分支;你想加登录功能,就新建一个add-login分支。这样每个任务的修改会更清楚。
Commit 是一次修改记录。你改完文件后,可以用 commit 把这次修改保存成一条历史记录。一个好的 commit,最好能让别人看懂这次改了什么。
Pull Request(简称 PR),是你向项目维护者发出的合并请求。意思是:我在这个分支里做了一些修改,请你看看能不能合进项目。
三、一次开源贡献的完整流程
假设你想给一个开源项目修 README 里的一个错误,流程大概是这样:
你先在 GitHub 上把原项目 fork 到自己的账号。这样你的账号下就有了一份项目副本。然后把这份 fork clone 到本地,在本地新建一个 branch。接着修改 README,确认没有问题后,用 commit 记录这次修改,再 push 到你的 fork。
最后,你在 GitHub 上从自己的分支发起 Pull Request。项目维护者看到 PR 后,会 review 你的修改。维护者可能直接合并,也可能在评论里让你补说明、改格式、修测试。
完整流程可以简化成:
Fork 原项目 → Clone 到本地 → 新建 Branch → 修改代码 → Commit 保存修改 → Push 到自己的 fork → 发起 Pull Request → 等维护者 Review / Merge
这里最容易弄混的一点是:你 push 的通常是自己的 fork,不是原项目。PR 才是把你的修改交给原项目维护者审核的入口。
四、新手最容易混淆的几个点
Fork 和 Clone 很容易混。fork 发生在 GitHub 上,是把别人的仓库复制到你账号下;clone 发生在你电脑上,是把远程仓库下载到本地。一个在网页端,一个在本地。
Commit 和 Push 也容易混。commit 只是把修改记录在本地仓库里,push 才会把这些记录同步到远程仓库。所以你 commit 完后,如果 GitHub 上看不到变化,通常是因为还没 push。
Branch 和 PR 也不是一回事。branch 是你做修改的分支,PR 是你把这个分支里的修改拿去请求合并。开源项目里建议每个任务单独开分支,这样维护者 review 时更清楚。
还有 origin 和 upstream。这个刚开始会有点绕,简单理解:
upstream:原项目
origin:你的 fork
local:你电脑上的本地仓库
如果你从自己的 fork clone 项目,本地的 origin 通常就是你的 fork。原项目一般会被叫做 upstream。你想让自己的 fork 跟上原项目更新,就需要从 upstream 拉最新代码。
最后总结
第一次参与开源项目,不需要一上来背所有 Git 命令。先把这条流程理解清楚就够了:fork 到自己账号,clone 到本地,新建分支,修改代码,commit 记录修改,push 到自己的 fork,最后发 PR 请求原项目合并。
一句话收尾:Git 负责记录版本变化,GitHub 负责远程托管和协作。Fork、Clone、Branch、Commit、PR 这些词,都是围绕"怎么把你的修改交给项目维护者审核"展开的。等你理解这条线,再去学具体命令,就会顺很多。
一起“点赞”三连↓
夜雨聆风