Git与Github使用
# Git和Github
# 1、了解Git和GitHub
# 1.1 什么是Git
- Git是一款免费、开源的分布式版本控制系统(https://www.git-scm.com)
- Git可以有效、高速的处理从很小到非常大的项目版本管理。
- Git最初由 Linux 之父 Linus Trovalds(林纳斯·托瓦兹) 开发,用作Linux内核代码的管理。
# 1.2 什么是版本控制系统
版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况得系统。
具体功能:
- 记录文件的所有历史变化
- 随时可恢复到任何一个历史状态
- 多人协作开发或修改
- 错误恢复
# 1.3 什么是GitHub
- Github是全球最大的社交编程及代码托管网站(https://github.com/)。
- Github可以托管各种git库,并提供一个web界面(用户名.github.io/仓库名)。
- Github作为开源代码库以及版本控制系统,Github拥有百万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法。
# 1.4 Git和GitHub的关系
Git是版本控制软件
Github是项目代码托管的平台,借助git来管理项目代码
# 1.5 为什么学习GitHub
学习优秀的开源项目
关注行业前辈了解最新的行业动态
如:
PHP 鸟哥,前新浪总架构师 https://github.com/laruence
国内最流行的PHP开发框架(thinkphp):https://github.com/top-think/thinkphp
全球最流行的PHP框架(laravel):https://github.com/laravel/laravel
PHP编码规范(FIG-PHP):https://www.gitbook.com/book/jifei/php-fig-standards/details
# 2、使用GitHub
# 2.1 基本概念
仓库(Repository):仓库用来存放项目代码,每个项目对应一个仓库,多个开源项目则有多个仓库。
收藏(Star):收藏项目,方便下次查看。Star的数量即为收藏项目的人数,在 GitHub 上如果你有一个项目获得100个star都算很不容易了!
复制克隆项目(Fork):这个不好翻译,如果实在要翻译我把他翻译成分叉,什么意思呢?你开源了一个项目,别人想在你这个项目的基础上做些改进,然后应用到自己的项目中,这个时候他就可以 Fork 你的项目(打开项目主页点击右上角的fork按钮即可),然后他的 GitHub 主页上就多了一个项目,只不过这个项目是基于你的项目基础(本质上是在原有项目的基础上新建了一个分支),他就可以随心所欲的去改进,但是丝毫不会影响原有项目的代码与结构。
发起请求(Pull Request):发起请求,这个其实是基于 Fork 的,还是上面那个例子,如果别人在你基础上做了改进,后来觉得改进的很不错,应该要把这些改进让更多的人收益,于是就想把自己的改进合并到原有项目里,这个时候他就可以发起一个 Pull Request(简称PR) ,原有项目创建人,也就是你,就可以收到这个请求,这个时候你会仔细review他的代码,并且测试觉得OK了,就会接受他的PR,这个时候他做的改进就会加入原有项目了。
关注(Watch):如果你 Watch 了某个项目,那么以后只要这个项目有任何更新,你都会第一时间收到关于这个项目的通知提醒。
事物卡片(Issue):发现代码BUG,但是目前没有成型代码,需要讨论时用
# 3、Git的安装和使用
# 3.1 目的
使用Git管理GitHub托管项目代码
# 3.2 下载安装
1.Git官网下载:https://www.git-scm.com/download/win
2.双击安装
3.选择安装的工作目录
4.选择组件
5.开始菜单目录名设置
6.选择使用命令行环境
7.以下三步默认,直接点击next
8.等待安装
9.检验是否安装完成
# 4、Git的基本工作流程
# 4.1 Git工作区域
# 4.2 向仓库添加文件流程
git status:查看文件状态
# 4.3 添加远程仓库工作流程
# 5、Git初始化及仓库创建和操作
# 5.1 基本信息设置
1. 设置用户名
git config --global user.name 'Master-Frank'
2. 设置用户名邮箱
git config --global user.email '1486493017@qq.com'
2
3
4
5
# 5.2 初始化一个Git仓库
# 5.2.1 创建文件夹
# 5.2.2 在文件夹内初始化git(创建git仓库)
cd 文件夹名
git init
2
# 5.3 向仓库添加文件
创建/添加文件
touch 文件名.文件后缀名
1将文件添加到暂存区
git add 文件名.文件后缀名 //如果要将全部文件提交到暂存区,可以使用"git add ."
1
2将文件从暂存区提交到仓库
git commit -m '提交描述'
1
# 5.4 修改仓库文件
修改文件
vi 文件名.文件后缀名 //使用vim编辑器修改文件内容。'i'编辑,':wq'保存并退出 cat 文件名.文件后缀名 //查看文件内容
1
2
添加至暂存区
git add 文件名.文件后缀名
1提交到仓库
git commit -m '提交描述'
1
# 5.5 删除仓库文件
rm 文件名.文件后缀名
git rm 文件名.文件后缀名
git commit -m '提交描述'
2
3
# 6、Git管理远程仓库
# 6.1 使用远程仓库的目的
作用:备份,实现代码共享集中化管理
# 6.2 SSH验证
要使本机能关联远程仓库,首次需要SSH验证。
# 6.2.1 创建SSH key
首先在本机的用户主目录C:\Users\你的电脑账户名
下查看有没有.ssh
目录。如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。
如果没有,打开Git Bash,输入下面的命令:
# 创建SSH Key
ssh-keygen -t rsa -C "邮件地址"
2
会返回下面的内容。括号中的路径即会生成SSH key的路径。按回车。
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/你的电脑账户名/.ssh/id_rsa):
2
然后返回下面的内容会让你设置密码。一般情况不需要设置密码,直接回车。
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
2
最后返回类似下面的内容:
The key fingerprint is:
SHA256:++Ik2wTYxuEz5UP/G+XEo7ju8pM8SZhol0ifwdZa15U
The key's randomart image is:
+---[RSA 2048]----+
| .|
| E.|
| ..o. . . |
| =.=+.o ... |
| ..O=SO.. = |
| .++Oo.o = . |
| ...+o.o+ . |
| *o.*. o |
| ..o**o. |
+----[SHA256]-----+
2
3
4
5
6
7
8
9
10
11
12
13
14
说明你的SSH key已经生成。打开C:\Users\你的电脑账户名\.ssh
,可以看到id_rsa
和id_rsa.pub
这两个文件已经生成。
用记事本打开id_rsa.pub
,复制全部内容。
接下来到Github上验证。打开Github,点击右上角的头像,点击settings

点击左侧的SSH and GPG keys
,再点击右上的New SSH key
。
此处要输入两个内容:
- title:输入任意一个名字,建议与你当前用的电脑有关
- Key:输入刚刚在
id_rsa.pub
中的内容
然后点击Add SSH key
最后还需要输入一次GitHub的密码,SSH验证就成功啦。
# 6.2 Git克隆操作
# 6.2.1 目的
将远程仓库(github对应的项目)复制到本地
# 6.2.2 代码
git clone 仓库地址
仓库地址由来:
克隆过程:
# 6.3 将本地仓库同步到git远程仓库中
将本地仓库提交到GitHub。如果有添加或修改,需要先添加到暂存区并提交到本地仓库。
git push
可以看到仓库的全部内容已经同步到了GitHub上。
# 6.4 git push时可能遇到的问题
# 6.4.1 无法同步,或显示没有权限
vi .git/config (也可以找到对应文件用记事本打开.git下的config)
然后将
[remote "origin"]
url = https://github.com/用户名/仓库名.git
2
修改为:
[remote "origin"]
url = https://用户名:密码@github.com/用户名/仓库名.git
2
如下图
# 6.4.2 显示shallow update not allowed
这是由于克隆的原仓库限制浅克隆后无法上传到另一个仓库。
有两个解决办法:
- 最简单的方法是将目录下的.git文件夹删除,重新
git init
,然后git add .
,git commit -m '提交描述'
,git push
即可 - 如果已经提交了好几次并且不想丢失这些提交,可以使用
git filter-branch --all
,这样就能去掉克隆下来的限制提交的grafted标记了,就可以愉快的git push
了
# 6.4.3 显示Could not resolve host或Connection was reset,errno10054
这是网络的问题,可以试多几次。如果都不行,可以尝试科学上网(你懂的)
# 6.4.4 显示Updates were rejected because the remote contains work that you do not have locally
这是因为GitHub上的仓库已经被修改,本地的仓库不是最新的。
需要先执行git pull
同步GitHub上的仓库,再重新修改后push
# 6.4.5 git pull出错,显示Pulling is not possible because you have unmerged files.
这是因为本地的某些文件和GitHub上产生冲突。本地的push和merge会形成MERGE-HEAD(FETCH-HEAD), HEAD(PUSH-HEAD)这样的引用。
解决方法:先执行git reset --hard FETCH_HEAD
,冲突就会解决,再重新执行git pull
即可。
# 7、Git常用命令
# 7.1 创建仓库命令
命令 | 说明 |
---|---|
git init | 初始化仓库 |
git clone | 拷贝一份远程仓库,也就是下载一个项目 |
# 7.2 提交与修改
命令 | 说明 |
---|---|
git add | 添加文件到仓库 |
git status | 查看仓库当前的状态,显示有变更的文件 |
git diff | 比较文件的不同,即暂存区和工作区的差异 |
git commit | 提交暂存区到本地仓库 |
git reset | 回退版本 |
git rm | 删除工作区文件 |
git mv | 移动或重命名工作区文件 |
# 7.3 提交日志
命令 | 说明 |
---|---|
git log | 查看历史提交记录 |
git blame | 以列表形式查看指定文件的历史修改记录 |
# 7.4 远程操作
命令 | 说明 |
---|---|
git remote | 远程仓库操作 |
git fetch | 从远程获取代码库 |
git pull | 下载远程代码并合并 |
git push | 上传远程代码并合并 |
# 8、Github Pages 搭建网站
GitHub Pages只支持搭建静态网页。
# 8.1 创建一个仓库,在仓库中上传网页文件
# 8.2 在该仓库中点击setting,在左侧找到pages
# 8.3 选择对应的分支和根目录,然后点击save
# 8.4 稍等片刻,Github Page的访问地址就会出来了
# 8.5 访问这个地址,就能显示index.html的页面了
# 9、Git和SVN的区别(面试考点)
- Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
- **Git 把内容按元数据方式存储,而 SVN 是按文件:**所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
- **Git 分支和 SVN 的分支不同:**分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
- **Git 没有一个全局的版本号,而 SVN 有:**目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
- **Git 的内容完整性要优于 SVN:**Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。