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 - 图1
Git 操作的终极结果:让工作区中的文件都处于“未修改”的状态。

  • 未跟踪(Untracked):不被 Git 所管理的文件
  • 未修改(Unmodified): 工作区中文件的内容和 Git 仓库中文件的内容保持一致
  • 已修改(Modified):工作区中文件的内容和 Git 仓库中文件的内容不一致
  • 已暂存(Staged):工作区中被修改的文件已被 放到暂存区,准备将修改后 的文件保存到 Git 仓库中

    2 git配置

    2.1 配置用户信息

    是设置自己的用户名和邮件地址,通过 Git 对项目进行版本管理的时 候,Git 需要使用这些基本信息,来记录是谁对项目进行了操作:
    1. git config --global user.name xxxx
    2. git config --global user.email xxxx
    如果使用了 —global 选项,那么该命令只需要运行一次,即可永久生效。
    会被写入到 C:/Users/用户名文件夹/.gitconfig 文件中。
    这个文件是 Git 的全局配置文件,配置一次即可永久生效。

2.2 检查配置信息

  1. # 查看全局配置
  2. git config --list --global
  3. # 查看指定全局配置
  4. git config user.name
  5. git config user.email

2.3 获取帮助信息

  1. git help config
  2. git config -h

2.4 获取git仓库方式

  1. # 将尚未进行版本控制的本地目录转换为 Git 仓库
  2. git init

2.5 检查文件状态

  1. git status
  2. # 精简方式查看
  3. git status -s
  4. git status --short

2.6 跟踪新文件

  1. git add xxx
  2. git add . # 当前所有文件

文件在 Changes to be committed 这行的下面,说明已被 跟踪,并处于暂存状态

2.7 提交更新

  1. git commit -m 描述信息
  2. git commit -a -m 描述信息 # 跳过暂存区直接提交仓库

文件等待被提交到 Git 仓库中进行保存。

2.8 撤销文件修改

  1. git checkout -- 文件名
  2. # 撤销工作区中所有文件的修改
  3. git checkout .

2.9 取消暂存文件

  1. git reset HEAD 要移除文件

2.10 移除文件

  1. # 从 Git 仓库和工作区中同时移除对应的文件
  2. git rm -f 文件名
  3. # 只从 Git 仓库中移除指定的文件,但保留工作区中对应的文件
  4. git rm —-cached 文件名

2.11 查看提交历史

  1. # 查看提交历史, 按先后顺序列出,最近排在上面
  2. git log
  3. git log -2 # 最新两条历史

2.12 回退指定版本

  1. git log # 展示所有历史
  2. git reset --hard 指定提交ID # 根据指定提交ID回退指定版本

2.13 查看分支列表

  1. git branch
  • 号表示当前所处的分支

2.14 创建新分支

  1. git branch 分支名

2.15 切换分支以及切换并创建

  1. git checkout 分支名
  2. git checkout -b 分支名 # 快速创建并切换

2.16 合并分支

  1. git checkout 主分支
  2. git merge 分支名

2.17 删除分支

  1. git branch -d 分支名

2.18 遇到冲突时的分支合并

我们需要打开 这些包含冲突的文件然后手动解决冲突。

2.19 将本地分支推送到远程仓库

  1. git push -u 远程仓库名 本地分支名:远程分支名
  2. # 第一次时需要带u
  3. git push -u origin 本地分支名
  4. # 第二次直接push
  5. git push

2.20 查看远程仓库中所有的分支列表

  1. git remote show origin

2.21 把远程仓库下载到本地

  1. git checkout 远程分支名
  2. # 下载到本地重命名
  3. git checkout -b 本地分支名 远程仓库名/远程分支名

2.22 拉取远程分支最新代码

  1. git pull

2.23 删除远程分支

  1. 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 等)

  1. # 忽略所有.a文件
  2. *.a
  3. # 跟踪所有lib.a, 即便前面忽略了.a文件
  4. !lib.a
  5. # 只忽略当前目录下TODO文件,不忽略subdir/TODO
  6. /TODO
  7. # 忽略任何目录下名为build文件夹
  8. build/
  9. # 忽略 doc/notes.txt 但不忽略doc/server/arch.txt
  10. doc/*.txt
  11. # 忽略doc/目录下所有子目录下的.pdf文件
  12. 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