## 8.1 配置 Git
Git 的配置分为三层,分别为系统(system),全局(global)和本地(local),对应的配置文件分别为 `/etc/gitconfig`,`~/.gitconfig`和 `.git/config` 。每层的配置都会覆盖掉上一层次的配置。
### 8.1.1 **客户端基本配置**
依据个人的工作偏好进行的配置,通过 `man git-config`可以查看当前版本的 Git 支持哪些配置,也可以在 [http://git-scm.com/docs/git-config.html](http://git-scm.com/docs/git-config.html) 进行查看。
**core.editor**
默认情况下,Git 会调用环境变量(`$VISUAL`或`$EDITOR`)设置的任意文本编辑器,如果没有设置,会调用`vi`来创建和编辑提交以及标签信息。
**commit.template**
项指定为系统上某个文件的路径,当有新的提交时, Git 会使用该文件的内容作为提交的默认信息。
**core.pager**
该配置项指定 Git 运行诸如`log`和`diff`等命令所使用的分页器,默认用的是`less`,可以设置成空字符串,关闭该选项:
```
$ git config --global core.pager ''
```
**user.signingkey**
设置 GPG 签署密钥。
```
$ git config --global user.signingkey <gpg-key-id>
```
每次运行`git tag`命令时,即可直接签署标签,而无需定义密钥。
**core.excludesfile**
允许设置类似于全局生效的`.gitignore`文件。
```
$ git config --global core.excludesfile [config_path]
```
**help.autocorrect**
在打错了一条命令时,Git 会尝试猜测意图,但不会执行它,而把`help.autocorrect`设置成 1,那么只要有一个命令被模糊匹配到了,Git 会自动运行该命令。
### 8.1.2 Git 中的着色
Git 充分支持对终端内容着色。
**color.ui**
设置的默认值是`auto`,它会着色直接输出到终端的内容,可以设置成 `false` 来关闭着色,设置成`always`,来忽略掉管道和终端的不同,即在任何情况下着色输出。
**color.\***
要想具体到哪些命令输出需要被着色以及怎样着色,需要用到和具体命令有关的颜色配置选项。 它们都能被置为`true`、`false`或`always`:
```
color.branch
color.diff
color.interactive
color.status
```
以上每个配置项都有子选项,它们可以被用来覆盖其父设置,以达到为输出的各个部分着色的目的
```
# blue 前景色;black 背景色;bold 粗体
$ git config --global color.diff.meta "blue black bold"
```
* 颜色有:`normal`、`black`、`red`、`green`、`yellow`、`blue`、`magenta`、`cyan`或`white`
* 字体有:`bold`、`dim`、`ul`(下划线)、`blink`、`reverse`(交换前景色和背景色)
### 8.1.3 外部的合并与比较工具
在安装好外部工具后,例如 P4Merge,编辑`~/.gitconfig`文件,添加以下各行:
```
[merge]
tool = extMerge
[mergetool "extMerge"]
cmd = extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
trustExitCode = false
[diff]
external = extDiff
```
### 8.1.4 格式化与多余的空白字符
**core.autocrlf**
Windows 使用回车(CR)和换行(LF)两个字符来结束一行,而 Mac 和 Linux 只使用换行(LF)一个字符。Git 可以在提交时自动地把回车和换行转换成换行,而在检出代码时把换行转换成回车和换行:
```
$ git config --global core.autocrlf true
```
**core.whitespace**
Git 预先设置了一些选项来探测和修正多余空白字符问题。它提供了六种处理多余空白字符的主要选项 —— 其中三个默认开启,另外三个默认关闭。
默认被打开的三个选项是:`blank-at-eol`,查找行尾的空格;`blank-at-eof`,盯住文件底部的空行;`space-before-tab`,警惕行头 tab 前面的空格。
默认被关闭的三个选项是:`indent-with-non-tab`,揪出以空格而非 tab 开头的行(可以用`tabwidth`选项控制它);`tab-in-indent`,监视在行头表示缩进的 tab;`cr-at-eol`,告诉 Git 忽略行尾的回车。
通过设置`core.whitespace`,可以让 Git 打开或关闭以逗号分割的选项。 要想关闭某个选项,可以在输入设置选项时不指定它或在它前面加个`-`。
### 8.1.5 服务器端配置
**receive.fsckObjects**
Git 能够确认每个对象的有效性以及 SHA-1 检验和是否保持一致,但这个操作很耗时,如果想在每次推送时都要求 Git 检查一致性,设置`receive.fsckObjects`为 true 来强迫它这么做:
```
$ git config --system receive.fsckObjects true
```
**receive.denyNonFastForwards**
禁用强制更新推送(force-pushes),可以设置`receive.denyNonFastForwards`:
```
$ git config --system receive.denyNonFastForwards true
```
**receive.denyDeletes**
禁止通过推送删除分支和标签:
```
$ git config --system receive.denyDeletes true
```
- 介绍
- 第一章 起步
- 1.1 关于版本控制
- 1.2 Git 简史
- 1.3 Git 基础
- 1.4 命令行
- 1.5 安装 Git
- 1.6 初次运行 Git 前的配置
- 1.7 获得帮助
- 第二章 基础
- 2.1 获取仓库
- 2.2 记录每次更新到仓库
- 2.3 查看提交历史
- 2.4 撤销操作
- 2.5 远程仓库的使用
- 2.6 打标签
- 2.7 Git 别名
- 第三章 分支
- 3.1 分支简介
- 3.2 分支的新建与合并
- 3.3 分支管理
- 3.4 分支开发工作流
- 3.5 远程分支
- 3.6 变基
- 第四章 服务器上的 Git
- 4.1 协议
- 4.2 在服务器上搭建 Git
- 4.3 生成 SSH 公钥
- 4.4 配置服务器
- 4.5 Git 守护进程
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方托管的选择
- 第五章 分布式 Git
- 5.1 分布式工作流程
- 5.2 向一个项目贡献
- 5.3 维护项目
- 第六章 GitHub
- 6.1 账户的创建和配置
- 6.2 对项目做出贡献
- 6.3 维护项目
- 6.4 管理组织
- 6.5 脚本 GitHub
- 第七章 Git 工具
- 7.1 选择修订版本
- 7.2 交互式暂存
- 7.3 储藏与清理
- 7.4 签署工作
- 7.5 搜索
- 7.6 重写历史
- 7.7 重置揭密
- 7.8 高级合并
- 7.9 Rerere
- 7.10 使用Git调试
- 7.11 子模板
- 7.12 打包
- 7.13 替换
- 7.14 凭证存储
- 第八章 自定义 Git
- 8.1 配置 Git
- 8.2 Git 属性
- 8.3 Git 钩子
- 8.4 使用强制策略的一个例子
- 第九章 Git 与其他系统
- 9.1 作为客户端的 Git
- 9.2 迁移到 Git
- 第十章 Git 内部原理
- 10.1 底层命令和高层命令
- 10.2 Git 对象
- 10.3 Git 引用
- 10.4 包文件
- 10.5 引用规格
- 10.6 传输协议
- 10.7 维护与数据恢复
- 10.8 环境变量
