1 Git
Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理 从很小到非常大的项目版本管理。
特点:基于服务器、客户端的运行模式
- 服务器保存文件的所有更新版本
- 客户端是服务器的完整备份,并不是只保留文件的最新版本
Git 之所以快速和高效,主要依赖于它的如下两个特性:
① 直接记录快照,而非差异比较
② 近乎所有操作都是本地执行
1.1 记录快照方式
Git 快照是在原有文件版本的基础上重新生成一份新的文件,类似于备份。
为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
缺点:占用磁盘空间较大
优点:版本切换时非常快,因为每个版本都是完整的文件快照,切换版本时直接恢复目标版本的快照即可。
特点:空间换时间
1.2 git 三个区域
Git 管理的项目,拥有三个区域,分别是工作区、暂存区、Git 仓库。
- 工作区:处理工作的区域
- 暂存区:已完成的工作的临时存放区域, 等待被提交
- Git 仓库:最终的存放区域
1.3 Git 中的三种状态
已修改(modified):表示修改了文件,但还没将修改的结果放到暂存区
已暂存(staged):表示对已修改文件的当前 版本做了标记,使之包含 在下次提交的列表中
已提交(committed): 表示文件已经安全地保存 在本地的 Git 仓库中
- 工作区的文件被修改了,但还没有放到暂存区,就是已修改状态。
- 如果文件已修改并放入暂存区,就属于已暂存状态。
- 如果 Git 仓库中保存着特定版本的文件,就属于已提交状态。
1.4 git 工作流程
基本的 Git 工作流程如下:
① 在工作区中修改文件
② 将你想要下次提交的更改进行暂存
③ 提交更新,找到暂存区的文件,将快照永久性存储到 Git 仓库
1.5 工作区文件4种状态
有两大类
Git 操作的终极结果:让工作区中的文件都处于“未修改”的状态。
- 未跟踪(Untracked):不被 Git 所管理的文件
- 未修改(Unmodified): 工作区中文件的内容和 Git 仓库中文件的内容保持一致
- 已修改(Modified):工作区中文件的内容和 Git 仓库中文件的内容不一致
- 已暂存(Staged):工作区中被修改的文件已被 放到暂存区,准备将修改后 的文件保存到 Git 仓库中
2 git配置
2.1 配置用户信息
是设置自己的用户名和邮件地址,通过 Git 对项目进行版本管理的时 候,Git 需要使用这些基本信息,来记录是谁对项目进行了操作:
如果使用了 —global 选项,那么该命令只需要运行一次,即可永久生效。git config --global user.name xxxx
git config --global user.email xxxx
会被写入到 C:/Users/用户名文件夹/.gitconfig 文件中。
这个文件是 Git 的全局配置文件,配置一次即可永久生效。
2.2 检查配置信息
# 查看全局配置
git config --list --global
# 查看指定全局配置
git config user.name
git config user.email
2.3 获取帮助信息
git help config
git config -h
2.4 获取git仓库方式
# 将尚未进行版本控制的本地目录转换为 Git 仓库
git init
2.5 检查文件状态
git status
# 精简方式查看
git status -s
git status --short
2.6 跟踪新文件
git add xxx
git add . # 当前所有文件
文件在 Changes to be committed 这行的下面,说明已被 跟踪,并处于暂存状态
2.7 提交更新
git commit -m 描述信息
git commit -a -m 描述信息 # 跳过暂存区直接提交仓库
文件等待被提交到 Git 仓库中进行保存。
2.8 撤销文件修改
git checkout -- 文件名
# 撤销工作区中所有文件的修改
git checkout .
2.9 取消暂存文件
git reset HEAD 要移除文件
2.10 移除文件
# 从 Git 仓库和工作区中同时移除对应的文件
git rm -f 文件名
# 只从 Git 仓库中移除指定的文件,但保留工作区中对应的文件
git rm —-cached 文件名
2.11 查看提交历史
# 查看提交历史, 按先后顺序列出,最近排在上面
git log
git log -2 # 最新两条历史
2.12 回退指定版本
git log # 展示所有历史
git reset --hard 指定提交ID # 根据指定提交ID回退指定版本
2.13 查看分支列表
git branch
- 号表示当前所处的分支
2.14 创建新分支
git branch 分支名
2.15 切换分支以及切换并创建
git checkout 分支名
git checkout -b 分支名 # 快速创建并切换
2.16 合并分支
git checkout 主分支
git merge 分支名
2.17 删除分支
git branch -d 分支名
2.18 遇到冲突时的分支合并
我们需要打开 这些包含冲突的文件然后手动解决冲突。
2.19 将本地分支推送到远程仓库
git push -u 远程仓库名 本地分支名:远程分支名
# 第一次时需要带u
git push -u origin 本地分支名
# 第二次直接push
git push
2.20 查看远程仓库中所有的分支列表
git remote show origin
2.21 把远程仓库下载到本地
git checkout 远程分支名
# 下载到本地重命名
git checkout -b 本地分支名 远程仓库名/远程分支名
2.22 拉取远程分支最新代码
git pull
2.23 删除远程分支
git push origin —delete 远程分支
3 忽略文件
创建一个名为 .gitignore 的配置文件
① 以 # 开头的是注释
② 以 / 结尾的是目录
③ 以 / 开头防止递归
④ 以 ! 开头表示取反
① 星号 匹配零个或多个任意字符
② [abc] 匹配任何一个列在方括号中的字符 (此案例匹配一个 a 或匹配一个 b 或匹配一个 c)
③ 问号 ? 只匹配一个任意字符
④ 在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配 所有 0 到 9 的数字)
⑤ 两个星号 * 表示匹配任意中间目录(比如 a//z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等)
# 忽略所有.a文件
*.a
# 跟踪所有lib.a, 即便前面忽略了.a文件
!lib.a
# 只忽略当前目录下TODO文件,不忽略subdir/TODO
/TODO
# 忽略任何目录下名为build文件夹
build/
# 忽略 doc/notes.txt 但不忽略doc/server/arch.txt
doc/*.txt
# 忽略doc/目录下所有子目录下的.pdf文件
doc/**/*.pdf
4 开源协议
① BSD(Berkeley Software Distribution)
② Apache Licence 2.0
③ GPL(GNU General Public License)
- 具有传染性的一种开源协议,不允许修改后和衍生的代码做为闭源的商业软件发布和销售
- 使用 GPL 的最著名的软件项目是:Linux
④ LGPL(GNU Lesser General Public License)
⑤ MIT(Massachusetts Institute of Technology, MIT)
- 是目前限制最少的协议,唯一的条件:在修改后的代码或者发行包中,必须包含原作者的许可信息
- 使用 MIT 的软件项目有:jquery、Node.js