git 和 github 介绍

因为在学习 MaixPy 的过程中, 有很多地方用到 git 和 github, 所以这里简单解释一下它们是什么,以及区别是什么。

什么是 git

git 是一款 代码托管 软件, 用来管理代码的版本。 比如: 我今天改了代码, 然后明天也改了代码, 以后我都能看到这两次改动历史, 以及改了什么内容,可以精确到哪一行,方便后面找问题; 或者我发现第二次提交的代码出现了问题, 我需要回到第一次提交后的版本, 都可以用这个工具实现; 另外方便多个人修改同一份代码,能管理大家提交的代码,不容易出现混乱。

再也不用拷贝无数个文件夹来备份修改了!

git 会在目录下创建一个.git隐藏文件夹, 所有更改记录保存在这里面,不能删除这个文件夹。

但是需要注意的是, 现在的 git 主要用来管理文本文件, 不适用拿来管理二进制文件,比如图片 PDF等等, 会让文件夹占用的空间变得很大。

具体的教程,可以看 这里, 中文教程可以看 这里

什么是 github

github 是一个 分享代码 的 网站

可以在这个网站上注册, 然后建立仓库(repository),往这个仓库里面放代码公开分享,让更多地人来使用, 甚至一起修改,一起优化代码, 这就是开源

每个仓库都是可以单独地使用 git 这个软件来管理的, 大家在自己的电脑上修改代码, 然后使用git提交, 然后使用git推送到github这个网站, 大家就可以看到新的内容了。

MaixPy 的源码的地址是: https://github.com/sipeed/maixpy , 也就是一个 git 仓库

github 的帮助, 中文 帮助

另外,国内也有几家不过的类似github的网站, 比如gitee

git 和 github 的区别

一个是一个软件, 一个是一个网站。 只不过这个网站用到了 git 这个技术来管理仓库。

为什么我无法访问 github, 或者访问速度很慢

github 是国外的网站, 因为距离远,线路问题导致某些运营商的某些线路可能访问慢甚至无法访问, 比如 github 用来存放源文件的域名 https://raw.githubusercontent.com/ 可能无法访问

解决方法:

  • 换个线路, 也就是换个网络, 比如你用电信网, 可以换移动或者联通试试, 换手机流量,或者换个地方等方法
  • 使用 VPN 类软件,这里不教,请注意合法使用

什么是 star

在 github 上, 每个公开的仓库大家都可以去点赞收藏,也就是 star,在 github 右上角 ⭐ 形状的按钮 star
如果你觉得项目不错,请给个 star,这样会鼓励开发者花更多时间维护仓库,同时也告诉第一次来的访问者这是个不错的项目,值得关注。

star 后, 可以在个人资料里面找到自己的 star 仓库,方便下一次找到

说到这里,大家觉得 MaixPy 不错的话,可以 star 一个哦~

什么是 Master 分支

在每个仓库中, 可以存在很多个分支,不同分支可以有不同的代码,而且不同的分支之间还可以互相合并,方便保存代码的不同版本,以及方便团队合作, master 分支就是指主分支,也就是最重要的分支,通常仓库默认展示的就是 master 分支。

什么是提交

提交,英文叫commit, 就是每次更改仓库的代码, 都提交一次,就会被记录到提交历史记录里面,后面随时都可以看这次提交了什么内容,也可以将代码回滚到这次提交

每个提交都有一个独立的commit ID, 比如d28cb7ac7db5ad61c0738df95d733717deefda1d, 简写成d28cb7a

什么是子模块

子模块, 英文叫submodule, 就是在仓库中可以引用其它仓库,相当于是一个软链接, 不需要在仓库放实际的代码, 只需要放一个链接即可。 这样的好处是多个仓库可以分开管理, 比如仓库1引用了仓库2作为子模块, 如果仓库2代码更新了, 仓库1可以选择继续使用旧版的仓库2的代码, 也可以选择使用仓库2最新的代码,只是更新一下子模块链接

比如MaixPy用了kendryte-standalone-sdk作为子模块,看这里
submodule

可以看到这里文件夹的图标不太一样,它只是一个链接,点击就会跳到相应的仓库而不是直接打开文件夹

所以 MaixPy 使用了子模块

什么是克隆

github上面的仓库,如果需要下载到本地来, 就需要使用克隆, 使用

git clone 地址

就可以吧仓库克隆到本地了, 克隆的本地的仓库名副其实就是 github 上面的一份克隆, 完全一样,也保留了历史记录等

当然也可以不用克隆,网页有点击下载的按钮,但是下载的缺陷就是不会包含提交代码的历史记录,根据自己的情况选择

需要注意的是, 在克隆包含有子模块的仓库时, 因为克隆默认只会将子模块的链接克隆下来, 子模块的代码没有克隆到本地, 你需要这样克隆

git clone 地址 --recursive

或者

git clone 地址 project_name
cd project_name
git submodule update --init --recursive

比如:

git clone https://github.com/sipeed/MaixPy --recursive

什么是 issue

也就是问题的意思, 在github 上, 每个仓库有一个专门用来提问的地方, 比如 MaixPy的issue
大家在这里提问, 类似论坛一样, 都会被记录下来,方便后面的人查阅

什么是 fork

在 github 上, 仓库页面右上角有一个 fork 按钮
点击可以将仓库 fork 到自己的仓库,就相当于是一份拷贝,叫 fork 的原因是你在 fork 成自己的仓库后,可以对自己这个仓库进行随意修改,算是原来被 fork 仓库的一个发展分支,源自它但是可以不与它相同

什么是 PR

即 github 上的 pull request 功能, 就是参与一个仓库的代码更新, 就是先 fork 成自己的仓库,然后修改,修改后提交合并到被 fork 的源仓库, 具体方法可自行学习