Github 使用入门
本节目录
重点看一下“Fork 与 Clone”、“请求合并”和“子模块”!
创建仓库
在 GitHub 上创建新仓库非常简单。首先,登录到 GitHub 账户。然后,点击右上角的"+"号,选择 New repository
来开始创建新仓库的流程。
- 输入仓库信息:填写仓库的名称,以及可选的描述。这些信息将帮助人们了解,这个仓库是关于什么的。
- 选择仓库可见性:可以选择公开或私有仓库。公开仓库可以被任何人看到,而私有仓库则需要指定账户才可见。
- 初始化仓库:可以选择初始化仓库与否。如果选择初始化,GitHub 会自动为仓库添加一个
README.md
文件,这是一个包含项目信息的文档,通常用于向人们介绍项目。 - 添加忽略文件:创建一个项目时,可以选择添加一个
.gitignore
文件,以帮助 GitHub 忽略不需要的文件。 - 添加许可证:您可以选择一个许可证(比如 MIT),以定义他人如何使用您的代码。
上面这些步骤大多是可选的,之后,只需要点击 Create repository
按钮,就能创建成功。
仓库管理
在仓库页面,通过最右侧的“管理”你可以进行多种管理操作:
- 基本信息:编辑仓库的名称、描述、可见性等。
- 分支保护:设置分支保护规则,防止重要分支被错误地修改或删除。
- WebHooks:配置 WebHooks,当仓库发生特定事件(如推送代码)时,自动触发外部服务。
- 部署密钥:添加部署密钥,允许服务器无密码访问仓库。
- 成员管理:邀请其他用户加入仓库,并设置他们的权限级别。
Fork 与 Clone
在 GitHub 上,你可以通过“fork”功能创建一个项目的副本,这个副本将存储在你的账户下。这是参与开源项目的一种方式。
Fork:在仓库页面上,点击右上角的 Fork
按钮,项目就会被复制到你的账户下。
Clone:为了在本地编辑项目,你需要克隆项目。在仓库页面上,找到并复制仓库的 URL,然后使用 git clone
命令将仓库克隆到本地。
它们之间的区别是,使用 Fork
后,你拿到的是一个副本,而 Clone
后,你拿到的是原始仓库的一个完整拷贝。这就使得,你在进行 push
操作时,对 Fork
的仓库进行的 push
操作不会影响原始仓库,而 Clone
的仓库的 push
操作会影响到原始仓库。所以,在后续的几个阶段,一定记得先 Fork
题目仓库!
提交代码
刚刚提到了 push
,在 GitHub 上,你可以通过 push
操作将本地的代码提交到远程仓库。
在本地对代码进行修改后,你需要将更改提交到 GitHub。以下是提交代码的基本步骤:
- 添加更改:使用
git add
命令将你的更改添加到暂存区。 - (本地)提交更改:使用
git commit
命令将你的更改提交到本地仓库。一般常用git commit -m <message>
,message 处填写你想要提交部分的说明。 - 推送更改:使用
git push
命令将你的本地更改推送到 GitHub,保存至远程服务器。
请求合并
当你在自己的分支上完成了一些更改,并希望将这些更改合并到主分支时,你可以创建一个 Pull Request
(简称PR)。
- 创建 Pull Request:在你的 GitHub 仓库页面上,点击“New pull request”按钮,然后选择你的分支和要合并的目标分支。
- 填写信息:添加一个标题和描述,一般要说明你的更改内容。
- 等待审查:提交 Pull Request 后,项目的维护者将审查你的更改。如果有任何问题,他们可能会提出反馈,比如会关闭 PR,代表拒绝你的更改请求。
注:在训练营过程中,拒绝 PR 的情况一般发生在:
-
你使用的是直接 clone 源仓库,在做完题目后,你直接使用了 push,发现了报错,按照 AI/其它教程 给出的方式进行操作,错误的发起了 PR,这会导致仓库的管理员直接拒绝你的这个 PR。你需要先 Fork 源仓库,再把 Fork 出的仓库拉取到本地,然后把你写好的代码 copy 到本地的新 Fork 出来的仓库,再进行 push 操作,这样就不会出现上述问题。
-
在你提交“报告”时,你只提交了你新写的报告,但没有兼容其他人的报告,在管理员这边,看起来就是你把其他人的报告全删掉了,只留下了你自己的,这也会导致你的 PR 被拒绝。你需要 确保你的报告兼容其他人的报告,一般通过先
git pull
一下,然后在git add
时正确选择范围,来解决此问题。
拉取
在多人协作的项目中,你的本地仓库可能会过时。为了获取最新的更改,你需要使用 git pull
命令来拉取最新的代码。
在训练营过程中,如果发现某些未测试出来的 bug,可能会更新试题的源码,这时你需要拉取最新的代码,以获取最新的试题。
问题跟踪
GitHub 提供了一个问题跟踪系统,可以帮助你跟踪项目中的问题和任务。
- 创建问题:在仓库页面上,点击
Issues
按钮,然后点击New issue
按钮来创建一个新的问题。 - 编辑问题:你可以添加标题、描述,甚至标签来帮助分类和跟踪问题。
子模块
在 GitHub 中使用子模块(submodule)是一种将一个仓库作为另一个仓库的一部分来使用的方法。以下是如何使用 GitHub 子模块的基本步骤:
- 增:添加子模块使用
git submodule add
命令添加子模块。这个命令会创建一个.gitmodules
文件,并在其中记录子模块的信息。
例如:使用如下命令时:
# git submodule add <子模块内容> <待添加子模块的本地仓库的路径>
# 例如:
git submodule add <某远程仓库地址> ./exam-grading
# 注:子模块内容,如果你把远程仓库拉取下来了,可以直接传拉取下来的那个仓库的本地地址,相对绝对都行!
# 注:远程仓库的权限,必须是public,不然会找不到而报错!
这会在对应路径添加子模块。注:添加后,记得用 push
提交到远程,要走 commit + push
的流程!
- clone:当克隆一个含有子模块的仓库时,需要初始化并更新子模块。由于子模块没有被拉取,且可能是单独的一个 git 仓库,并且可能会依赖更多的子模块,所以需要递归拉取:
# 先 clone
# 再 cd 进去
# 之后用下面的命令:
git submodule update --init --recursive
- 更新:当需要更新子模块到最新版本时,进到对应的子模块目录,然后直接拉取代码即可。
- 删除:删除比较麻烦,基本不太会用到。所以,为了培养大家的自学能力,请自行找资料。大致流程为:
- 删除子模块内容(自己找对应的 git 命令)。
- 编辑
.gitmodules
文件删除与子模块相关的条目。 - 编辑
.git/config
文件删除与子模块相关的配置。 - 将更改推送到远程。
官方文档
GitHub 的官方文档是学习 GitHub 的最好资源之一。你可以在GitHub Help上找到详细的指南和教程,帮助你更好地使用 GitHub。