Git学习指南 (一)
2016-07-22 本文已影响594人
缭雾
特点
-
直接记录快照,而非差异比较
- 大部分版本控制系统以文件变更列表的方式存储信息. 将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异
- Git 更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具,而不只是一个简单的 VCS。 稍后我们在Git 分支讨论 Git 分支管理时,将探究这种方式对待数据所能获得的益处
-
近乎所有操作都是本地执行
- Git 中的绝大多数操作都只需要访问本地文件和资源
-
Git 保证完整性
- Git 中所有数据在存储前都计算校验和,然后以校验和来引用。 Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名
-
Git 一般只添加数据
-
三种状态
- 已提交(committed)
- 已修改(modified)
- 已暂存(staged)
配置
-
安装git
-
初次运行 Git 前的配置
- 当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改.
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
- 再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。
-
检查配置信息
-
git config --list
:列出所有 Git 当时能找到的配置 -
git config <key>
: 查找某一项配置 如: git config user.name
-
-
帮助 :如 git help config
- git help <verb>
- git <verb> --help
- man git-<verb>
基础
1.获取git仓库
- 在现有目录中初始化仓库
- 进入该目录,并输入
$ git init
, 该命令会创建一个名为 .git 的子目录 -
git add
实现对指定文件的跟踪, git commmit 提交$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
- 进入该目录,并输入
-
从一个服务器克隆一个现有的 Git 仓库。
git clone
- 记录每次更新到仓库:
git status
/git status -s
/git add xx
/.gitignore
文件
- 状态
-
工作目录下的每一个文件都不外乎这两种状态:
已跟踪
或未跟踪
。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改
,已修改
或已放入暂存区
。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。 -
已跟踪: 可能处于
未修改
/已修改
/已放入暂存区
-
未跟踪: 既不存在于上次快照的记录中,也没有放入暂存区。
-
-
检查文件状态
git status
-
跟踪新文件: JASON.json
git add JASON.json
- git add xx 就会加入暂存区. 状态只要是在Changes to be committed 下的都是暂存文件
-
暂存的文件已修改
-
git status
更新的文件会出现显示Changes not staged for commit:下, 说明内容发生改变,在运行git add JASON.json
放到暂存区
-
-
状态简览:
-
git status -s
或git status --short
-
A
表示加入了暂存区.M
表示修改了但是没有加到暂存区.??
表示新添加的未跟踪文件
-
-
忽略文件:一般我们总会有些文件无需纳入 Git 的管理,这时新建一个
.gitignore
的文件-
.[oa]
忽略所有以 .o 或 .a 结尾的文件 /*~
忽略所有以波浪符(~)结尾的文件. 此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。 要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。 -
所有空行或者以 # 开头的行都会被 Git 忽略
-
可以使用标准的 glob 模式匹配。
-
匹配模式可以以(/)开头防止递归。
-
匹配模式可以以(/)结尾指定目录
-
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
举例:
# but do track lib.a, even though you're ignoring .a files above !lib.a # only ignore the TODO file in the current directory, not subdir/TODO /TODO # ignore all files in the build/ directory build/ # ignore doc/notes.txt, but not doc/server/arch.txt doc/*.txt # ignore all .pdf files in the doc/ directory doc/**/*.pdf
-
https://git-scm.com/book/zh/v2/Git-基础-记录每次更新到仓库