1. GIT基本概念
Git 有三种状态,你的文件可能处于其中之一:
- 已提交(committed)。表示数据已经安全的保存在本地数据库中。
- 已修改(modified)。表示修改了文件,但还没保存到数据库中。
- 已暂存(staged)。前两者中间的状态,表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。
1.1 Git 仓库 (Git Repository)
Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
1.2 工作目录 (Working Directory)
工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
1.3 暂存区域 (Staging Area)
暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引(Index)’',不过一般说法还是叫暂存区域。
1.4 基本 Git 工作流程
- 在工作目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
如果 Git 目录中保存着特定版本的文件,就属于“已提交”状态。 如果作了修改并已放入暂存区域,就属于“已暂存”状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是“已修改”状态。
2. 用户环境配置
2.1 用git config进行配置用户信息
$ git config --global user.name "ronzheng"
$ git config --global user.email ronzheng@none.com
2.2 用git config配置编辑器
Git 需要你输入信息时,会调用它。 如果未配置,Git 会使用操作系统默认的文本编辑器,通常是 Vim。
$ git config --global core.editor vim
2.3 命令别名
例子中创建了两个别名。git unstage丢弃工作目录中的修改,git last显示最后一条提交的信息。
$ git config --global alias.unstage 'reset HEAD --'
$ git config --global alias.last 'log -1 HEAD'
2.4 .gitconfig文件
前面配置时,如果指定--global选项,配置信息会保存在~/.gitconfig文件中。
除了保存前面的配置外,如下的.config还创建了三个别名。
- git lg 用树形结构显示提交
- git lgd 用树形结构显示提交,显示的日期是绝对时间
- git lgr 用树形结构显示提交,显示的日期是相对时间
[user]
name = ronzheng
email = ronzheng@none.com
[alias]
unstage = reset HEAD --
last = log -1 HEAD
#
# %h: abbreviated commit hash
# %d: ref names
# %s: subject
# %cd: commit data.
# %cr: commit date, relative
# %an: author name
# %Cred: switch color to red
# %Creset: reset color
# %C(yellow): switch to yellow
#
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s'
lgd = log --graph --date=short --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset'
lgr = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
3. 用.gitignore忽略文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。
文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。
- 星号(**)匹配零个或多个任意字符;
- [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);+ 问号(?)只匹配一个任意字符;
- 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
- 使用两个星号(*) 表示匹配任意中间目录,比如
a/**/z
可以匹配 a/z, a/b/z 或a/b/c/z
等。
# 忽略扩展名为.a的文件
*.a
# 但以lib.a结尾的文件除外
!lib.a
# 忽略目录build及其子目录和文件
build/
相关链接
GIT 常用命令(一)
GIT 常用命令(二)
GIT 概念和配置
【转】一个成功的 Git 分支模型
网友评论