[TOC]
## 简介
在这一节里,我们将会学习:
- 什么是 Git ?
- 如何为 Git 做初始化配置?
- Git 的基本使用;
- 什么是 GitHub?
- 如何添加 SSH Key 到 GitHub 上?
- 如何新建 GitHub 项目?
- 如何提交代码到 GitHub?
## 什么是 Git?
Git 是 Linux 的创始人 Linus Torvalds 开源的一款分布式版本控制系统,以帮助开发者更好的对项目进行版本管理。每一个优秀的开发者在进行项目开发时都会第一时间给自己的项目加上 Git ,以便能更好的追踪代码修改,进行版本回溯等操作。在多人协作的开发过程中, Git 更是必不可少的。因此,本书中将使用 Git 来管理项目的所有代码,让你在阅读本书的时候能够体会到 Git 的强大,了解实际开发中我们对 Git 的应用。
在现代化的项目开发中,Git 基本上是标配。
## Git 的基本设置
上一节我们安装的虚拟机 Homestead 中 已经安装了 Git ,本教程的所有 Git 操作都会发生在 Homestead 虚拟机中,因此我们需要先对其进行设置。
首先我们对 Git 进行用户名和邮箱进行设置,请参照下面格式,替换为你自己常用的用户名和邮箱来完成设置:
```shell
$ git config --global user.name "Your Name"
$ git config --global user.email your@example.com
```
>[info] 解释: --global 选项代表对 Git 进行全局设置。
这里个人信息设置的作用,是为你在代码提交时自动署名标记,方便查看提交日志时区分作者。如:
![Git Log](http://tbs.zhanghong.info/images/chapters/02/030_git_log.jpg)
接下来设置 Git 推送分支时相关配置:
```shell
$ git config --global push.default simple
```
此设置是 Git 命令 push 的默认模式为 simple,当我们执行 git push 没有指定分支时,自动使用当前分支,而不是报错。
## Git 初体验
对于有经验的开发者来说,在他每次新建完开发项目的时候,首先要做的第一件事就是将自己的项目纳入到 Git 代码版本管理中,完成这个操作一般需要以下这几个步骤:
接下来我们新建一个名为 Demo 的项目来试验。以下命令请跟着我操作。
1、对 Git 进行初始化:
```shell
$ mkdir ~/Code/Demo
$ cd ~/Code/Demo
$ touch readme.md
$ git init
```
2、将项目所有文件纳入到 Git 中:
```shell
$ git add -A
```
我们可以通过在 `.gitignore` 文件中进行设置,来选择忽略掉一些我们不想纳入到 Git 版本管理中的文件(如缓存文件)。因此上面描述的『所有文件』指的是 **不在** `.gitignore` 中被忽略的文件。
3、检查 Git 状态:
```shell
$ git status
```
![Git Status](http://tbs.zhanghong.info/images/chapters/02/030_git_status.jpg)
上面命令将会向你输出存放在 Git 暂存区的文件,这意味着这些文件还未真正提交到 Git 中。
4、保留改动并提交:
```shell
$ git commit -m "Initial commit"
```
上面这行命令会将暂存区的文件都提交到 Git,`-m` 选项后面带的参数表示本次提交的简单描述。
5、查看历史提交记录:
```shell
$ git log
commit 9e3eb5194f6fe4f505b07e152bf84c78273f45a5 (HEAD -> master)
Author: zhanghong <zhanghong_bean@126.com>
Date: Tue Sep 17 02:22:13 2019 +0000
Initial commit
```
从输出信息中可以很清晰的看到每次提交的作者、日期、描述等信息。注意看这里的 `Author` 项的内容就是我们上面设置的用户信息。 按 `q` 可退出查看。
## Git 的强大
通过上面 Git 的基本讲解,你可能还无法真正体会到 Git 的强大。在平时开发中,我们有时候可能会因为手误或其它原因将某些重要文件删除。如果之前有将此文件纳入到 Git 中,这时便可以利用 Git 来对误删文件进行恢复。请看下面演示。
我们先假装不小心删除 readme.md 文件:
```shell
$ rm readme.md
$ ll
```
使用 `ll` 打印出文件目录列表时,能看到 `readme.md` 文件已被成功移除。
查看 Git 状态:
```shell
$ git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: readme.md
no changes added to commit (use "git add" and/or "git commit -a")
```
能看到有相关提示显示 `readme.md` 文件已被删除,这时你可以选择将删除的文件进行恢复或提交。
下面我们使用 Git 进行恢复被删除文件:
```shell
$ git checkout -f
$ ll
```
这时能看到 `readme.md` 文件已成功恢复。`git checkout -f` 的作用是将在暂存区的更改文件进行强制撤销。
上面强大的功能仅为 Git 的冰山一角,后面教程将讲解更多关于 Git 的使用。如果你想学习更多关于 Git 相关的知识,可以查阅 [《Pro Git》](https://git-scm.com/book/zh/v2) 一书进行学习。
## 什么是 GitHub ?
[GitHub](https://github.com/) 是目前全球最大的代码托管平台,许多非常著名的项目如 [Linux](https://github.com/torvalds/linux)、[composer](https://github.com/composer/composer)、[ThinkPHP](https://github.com/top-think/framework) 等都托管在 GitHub 上。开发者们利用 GitHub 来进行团队协作开发,查阅或收藏别人开源项目的优秀代码,针对某个 Bug 进行技术讨论等。使用 GitHub 的好处非常多,[本书项目代码](https://github.com/zhanghong/ThinkBBS) 也托管在 GitHub 上面。
如果要使用 GitHub,你需要完成下面这几步操作:
### 1. 注册 GitHub 账号
如果你还没有 GitHub 账号的话,请先 [注册](https://github.com/join?source=header-home)。
![Github Signup](http://tbs.zhanghong.info/images/chapters/02/030_github_signup.png)
### 2. 为 GitHub 账号设置 SSH Key
出于安全考虑,Github 服务器和我们本地的通讯要求使用 SSH Key 来验证。在前面『环境部署』的章节中,我们已经在主机中生成过 SSH Key,并且 Homestead 在初始化时,通过 Homestaed.yaml 文件中的 `keys` 选项已经把主机中的 SSH Key 私钥复制到虚拟机中,所以这里我们无需再次生成 SSH Key。
接下来将 SSH Key 添加到 ssh-agent 中:
```shell
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
```
我们再回到 主机中 打印出公钥 id_rsa.pub 文件里的内容,并把输出的内容复制到剪贴板里:
```shell
> cat ~/.ssh/id_rsa.pub
```
![RSA Pub Key](http://tbs.zhanghong.info/images/chapters/02/030_github_rsa_pub.jpg)
最后我们需要将公钥添加到 GitHub 账号,先打开 [Github SSH 令牌管理页面](https://github.com/settings/keys) ,然后把你刚刚复制的令牌按照下图示例添加:
![Add RSA Pub Key](http://tbs.zhanghong.info/images/chapters/02/030_github_add_key.png)
### 3. 提交代码到 Github
在配置完 GitHub 账号之后,我们便可以开始在上面存放项目代码了。首先 [新建一个 GitHub 仓库](https://github.com/new),取名为 hello_demo,填上 `Description` 项目描述,`Initialize this repository with a README` 这一项无需勾选,因为 Demo 已默认帮我们创建好了 `readme.md` 文件。
![Create Repo](http://tbs.zhanghong.info/images/chapters/02/030_github_create_repo.jpg)
创建完成之后,使用以下命令将代码上传到 GitHub 上(将 `your_username` 替换为你自己的 GitHub 用户名):
```shell
$ cd ~/Code/Demo
$ git remote add origin git@github.com:your_username/hello_demo.git
$ git push -u origin master
```
至此,项目已成功托管到 GitHub 上。
![Project Home](http://tbs.zhanghong.info/images/chapters/02/030_github_repo_demo.jpg)
后面我们如果对本地代码进行了改动,只需运行这 3 条命令即可将代码推送到安全可靠的 GitHub 上:
>[warning] 以下命令作为知识重温,不需要执行。
1、保存到暂存区:
```shell
$ git add -A
```
2、输入描述信息并提交到本地的 Git:
```shell
$ git commit -m "Say something"
```
3、将代码推送到 GitHub:
```
$ git push
```
- 第一章 基础信息
- 序言
- 关于作者
- PHP和ThinkPHP
- 如何正确阅读本书
- 写作约定
- 开发规范
- 章节体例
- 本书源码
- 第二章 舞台布置
- 开发环境
- 产品分解
- Git和GitHub
- 创建项目
- 数据库视图管理工具
- 统一代码风格
- 目录结构
- 配置信息
- 后台应用搭建
- 助手函数
- 前台布局模板
- 基础控制器
- 小结
- 第三章 注册登录
- 数据迁移
- 表单提交
- 表单验证
- 模型验证
- 短信提供商
- 发送短信
- 手机验证
- 注册提醒
- 登录与退出
- 重置密码
- 数据填充
- 小结
- 第四章 用户相关
- 个人中心
- 编辑个人资料
- 上传图片
- 上传头像
- 显示头像
- 限制头像分辨率
- 裁剪头像
- 显示注册时间
- 授权访问
- 小结
- 第五章 帖子列表
- 话题分类
- 话题模型
- 话题列表
- 性能优化
- 分类话题列表
- 话题列表排序
- 用户发布的话题
- 分页器美化
- 小结
- 第六章_帖子CURD
- 创建话题
- 生成摘要
- 编辑器优化
- 上传图片
- 显示话题
- 编辑话题
- 删除话题
- 小结
- 第七章 帖子回复
- 回复模型
- 回复列表
- 发表回复
- 删除回复
- XSS 安全漏洞
- 小结
- 第八章 角色权限和管理后台
- 多角色用户权限
- 用户管理
- 话题管理
- 回复管理
- 小结
- 第九章 杂项
- 边栏活跃用户
- 用户最后登录时间
- 边栏资源推荐
- 站点首页
- 小结
- 第十章 总结
- 全书总结
- 附录
- 浅谈ThinkPHP6.0 路由