本文基于Git官方文档总结而成,主要用于快速查看命令。
Git与传统的版本控制系统的差异
- Git作为分布式版本控制系统,所有的客户端都具有完整的代码仓库,可以离线操作,没有单点问题。
- Git在版本控制时是直接记录文件快照,而非差异比较。
传统版本控制系统保存的信息可以看做是一组基本文件和每个文件随时间逐步积累的差异
Git保存的信息是文件的快照流,如果某个文件没有修改,Git不会重新存储该文件,而是保存一个链接指向之前存储的文件。
Git的三种状态
Git下的项目文件有三种状态:已提交(committed)、已修改(modified)和已暂存(staged)。已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
因为Git也有三种工作区域:
Git工作的流程如下:
1. 修改文件
2. 将文件提交到暂存区(git add)
3. 将暂存区的文件永久存储到Git仓库目录(git commit)
Git配置
#配置用户名
$ git config --global user.name "Sheldon"
#配置用户邮箱
$ git config --global user.email "sheldon@163.com"
–global的配置是全局配置。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 –global 选项的命令来配置。
#配置文本编辑器
$ git config --global core.editor vim
#检查配置信息
$ git config --list
Git 帮助
#获取config命令的帮助的三种方式
$ git help config
$ git config --help
$ man git-help
Git创建仓库
本地创建仓库
#创建project项目的文件夹
$ mkdir project.git
$ cd project.git
#初始化project的git仓库
$ git init
克隆已有仓库
$ git clone https://github.com/libgit2/ligbit2
这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。 如果你进入到这个新建的 libgit2 文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。 如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以使用如下命令:
#这将执行与上一个命令相同的操作,不过在本地创建的仓库名字变为 mylibgit。
$ git clone https://github.com/libgit2/libgit2 mylibgit
Git项目的运行
Git项目下的文件处于两种状态:已跟踪和未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。
检查当前文件状态
$ git status
On branch master
nothing to commit, working directory clean
注意,git commit是提交已经git add的文件快照,如果一个文件在git add之后又发生了修改,commit也只会提交add时的变化
$ git status s
$ git status --short
忽略文件
我们可以创建一个.gitignore
的文件,列出要忽略的文件。其格式规范为:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号( )匹配零个或多个任意字符;[