## 10.8 环境变量
Git 总是在一个bash shell 中运行,并借助一些 shell 环境变量来决定它的运行方式。
**全局行为**
* `GIT_EXEC_PATH`:决定 Git 到哪找它的子程序
* `PREFIX`类似,除了用于系统级别的配置。 Git 在`$PREFIX/etc/gitconfig`查找此文件。
* `GIT_CONFIG_NOSYSTEM`:禁用系统级别的配置文件。
* `GIT_PAGER`:控制在命令行上显示多页输出的程序。
* `GIT_EDITOR`当用户需要编辑一些文本(比如提交信息)时, Git 会启动这个编辑器。
**版本库位置**
* `GIT_DIR`:`.git`目录的位置。 如果这个没有设置, Git 会按照目录树逐层向上查找`.git`目录,直到到达`~`或`/`。
* `GIT_CEILING_DIRECTORIES`:控制查找`.git`目录的行为。
* `GIT_WORK_TREE`:非空版本库的工作目录的根路径。 如果没指定,就使用`$GIT_DIR`的父目录。
* `GIT_INDEX_FILE`:索引文件的路径。
* `GIT_OBJECT_DIRECTORY`:指定`.git/objects`目录的位置。
* `GIT_ALTERNATE_OBJECT_DIRECTORIES`:一个冒号分割的列表,用来告诉 Git 到哪里去找不在`GIT_OBJECT_DIRECTORY`目录中的对象。
**路径规则**
* `GIT_GLOB_PATHSPECS`and`GIT_NOGLOB_PATHSPECS`控制通配符在路径规则中的默认行为。`GIT_GLOB_PATHSPECS`设置为 1,通配符表现为通配符;`GIT_NOGLOB_PATHSPECS`设置为 1,通配符仅匹配字面。
* `GIT_LITERAL_PATHSPECS`:禁用上面的两种行为;通配符将不能用,前缀覆盖也不能用。
* `GIT_ICASE_PATHSPECS`:所有的路径规格忽略大小写。
**提交**
Git 提交对象的创建通常最后是由`git-commit-tree`来完成,`git-commit-tree`用这些环境变量作主要的信息源。
* `GIT_AUTHOR_NAME`:`author` 字段的可读的名字。
* `GIT_AUTHOR_EMAIL`:`author` 字段的邮件。
* `GIT_AUTHOR_DATE`:`author` 字段的时间戳。
* `GIT_COMMITTER_NAME`:`committer` 字段的可读的名字。
* `GIT_COMMITTER_EMAIL`:`committer` 字段的邮件。
* `GIT_COMMITTER_DATE`:`committer` 字段的时间戳。
**网络**
* `GIT_CURL_VERBOSE`: 告诉 Git 显示所有由那个库产生的消息。
* `GIT_SSL_NO_VERIFY`:告诉 Git 不用验证 SSL 证书。
* 如果 Git 操作在网速低于`GIT_HTTP_LOW_SPEED_LIMIT`字节/秒,并且持续`GIT_HTTP_LOW_SPEED_TIME`秒以上的时间,Git 会终止那个操作。
* `GIT_HTTP_USER_AGENT`:设置 Git 在通过 HTTP 通讯时用到的 user-agent。
**比较和合并**
* `GIT_DIFF_OPTS`:用来控制在`git diff`命令中显示的内容行数。
* `GIT_EXTERNAL_DIFF`:用来覆盖`diff.external`配置的值。
* `GIT_MERGE_VERBOSITY`:控制递归合并策略的输出。 允许的值有下面这些(默认值是 2):
* 0 什么都不输出,除了可能会有一个错误信息。
* 1 只显示冲突。
* 2 还显示文件改变。
* 3 显示因为没有改变被跳过的文件。
* 4 显示处理的所有路径。
* 5 显示详细的调试信息。
**调试**
* `GIT_TRACE`:控制常规跟踪。
* `GIT_TRACE_PACK_ACCESS`:控制访问打包文件的跟踪信息。
* `GIT_TRACE_PACKET`:打开网络操作包级别的跟踪信息。
* `GIT_TRACE_PERFORMANCE`:控制性能数据的日志打印。
* `GIT_TRACE_SETUP`:显示 Git 发现的关于版本库和交互环境的信息。
关于调试的环境变量可用值如下:
* `true`,`1`,或 `2` – 跟踪类别写到标准错误输出。
* 以`/`开头的绝对路径 – 跟踪输出会被写到那个文件。
**其它**
* `GIT_SSH`: Git 连接 SSH 主机时会用指定的程序代替`ssh`。
* `GIT_ASKPASS`:覆盖了`core.askpass`配置。
* `GIT_NAMESPACE`控制有命令空间的引用的访问,与`--namespace`标志是相同的。
* `GIT_FLUSH`:强制 Git 在向标准输出增量写入时使用没有缓存的 I/O。
* `GIT_REFLOG_ACTION`:可以指定描述性的文字写到 reflog 中。
- 介绍
- 第一章 起步
- 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 环境变量
