设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
-
2.52.0
2025-11-17
- 2.51.2 无变更
-
2.51.1
2025-10-15
- 2.50.1 → 2.51.0 无变更
-
2.50.0
2025-06-16
- 2.49.1 无更改
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 无更改
-
2.48.0
2025-01-10
- 2.47.1 → 2.47.3 无更改
-
2.47.0
2024-10-06
- 2.46.1 → 2.46.4 无更改
-
2.46.0
2024-07-29
- 2.45.2 → 2.45.4 无变更
-
2.45.1
2024-04-29
-
2.45.0
2024-04-29
- 2.44.2 → 2.44.4 无变更
-
2.44.1
2024-04-19
-
2.44.0
2024-02-23
- 2.43.5 → 2.43.7 无变更
-
2.43.4
2024-04-19
- 2.43.2 → 2.43.3 无变更
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.42.3 → 2.42.4 无变更
-
2.42.2
2024-04-19
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.41.2 → 2.41.3 无变更
-
2.41.1
2024-04-19
-
2.41.0
2023-06-01
- 2.40.3 → 2.40.4 无变更
-
2.40.2
2024-04-19
- 2.40.1 无变更
- 2.40.0 无变更
- 2.39.5 无更改
-
2.39.4
2024-04-19
- 2.39.1 → 2.39.3 无变更
-
2.39.0
2022-12-12
- 2.38.3 → 2.38.5 无更改
-
2.38.2
2022-12-11
- 2.38.1 无更改
-
2.38.0
2022-10-02
- 2.37.3 → 2.37.7 无更改
-
2.37.2
2022-08-11
- 2.37.1 无变更
-
2.37.0
2022-06-27
- 2.36.1 → 2.36.6 无更改
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 无更改
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 无更改
-
2.34.0
2021-11-15
- 2.33.3 → 2.33.8 无变更
-
2.33.2
2022-03-23
-
2.33.1
2021-10-12
- 2.32.1 → 2.33.0 无更改
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 无更改
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 无更改
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 无更改
-
2.29.0
2020-10-19
- 2.28.1 无更改
-
2.28.0
2020-07-27
- 2.27.1 无更改
-
2.27.0
2020-06-01
- 2.26.1 → 2.26.3 无更改
-
2.26.0
2020-03-22
- 2.25.2 → 2.25.5 无更改
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.23.1 → 2.24.4 无更改
-
2.23.0
2019-08-16
- 2.22.2 → 2.22.5 无更改
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 无更改
-
2.20.0
2018-12-09
- 2.19.3 → 2.19.6 无更改
-
2.19.2
2018-11-21
- 2.19.1 无更改
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 无更改
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 无更改
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
- 2.13.7 无更改
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
-
2.2.3
2015-09-04
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
概要
git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch]
[--no-optional-locks] [--no-advice] [--bare] [--git-dir=<path>]
[--work-tree=<path>] [--namespace=<name>] [--config-env=<name>=<envvar>]
<command> [<args>]
描述
Git 是一个快速、可伸缩、分布式的修订控制系统,具有一套不寻常的丰富命令集,既提供高级操作,又提供对内部机制的完全访问。
请参阅 gittutorial[7] 开始,然后参阅 giteveryday[7] 以了解一套有用的最小命令集。 Git 用户手册 提供了更深入的介绍。
掌握基本概念后,您可以返回此页面了解 Git 提供了哪些命令。您可以通过“git help command”了解更多关于单个 Git 命令的信息。 gitcli[7] 手册页为您提供了命令行命令语法的概述。
最新 Git 文档的格式化和超链接副本可在 https://git.github.io/htmldocs/git.html 或 https://git-scm.cn/docs 上查看。
选项
- -v
- --version
-
打印 git 程序所属的 Git 套件版本。
此选项在内部转换为
gitversion...,并接受与 git-version[1] 命令相同的选项。如果同时提供了--help,则它优先于--version。 - -h
- --help
-
打印概要以及最常用命令的列表。如果提供了
--all或-a选项,则会打印所有可用命令。如果指定了一个 Git 命令,此选项将弹出该命令的手册页。还有其他选项可用于控制手册页的显示方式。有关更多信息,请参阅 git-help[1],因为
git--help... 在内部转换为githelp...。 - -C <path>
-
像 git 在 <path> 目录而不是当前工作目录中启动一样运行。当给出多个
-C选项时,每个后续的非绝对-C<path> 都相对于前一个-C<path> 进行解释。如果 <path> 存在但为空,例如-C"",则当前工作目录保持不变。此选项会影响期望路径名的选项,如
--git-dir和--work-tree,因为它们对路径名的解释将相对于由-C选项引起的工作目录。例如,以下调用是等效的git --git-dir=a.git --work-tree=b -C c status git --git-dir=c/a.git --work-tree=c/b status
- -c <name>=<value>
-
将配置参数传递给命令。给定的值将覆盖配置文件中的值。<name> 的格式应与 git config 列出的格式相同(子键用点分隔)。
请注意,在
git-cfoo.bar... 中省略=是允许的,并将foo.bar设置为布尔 true 值(就像在配置文件中 [foo]bar一样)。包含等号但值为空(如git-cfoo.bar=...)会将foo.bar设置为空字符串,而gitconfig--type=bool将其转换为false。 - --config-env=<name>=<envvar>
-
类似于
-c<name>=<value>,为配置变量 <name> 赋值,其中 <envvar> 是从中检索值的环境变量的名称。与-c不同,没有直接设置空字符串值的快捷方式,而是必须将环境变量本身设置为空字符串。如果 <envvar> 在环境中不存在,则会出错。 <envvar> 可能不包含等号,以避免与包含等号的 <name> 产生歧义。这对于您想将临时配置选项传递给 git 的情况很有用,但这些情况发生在其他进程可能能够读取您的命令行(例如
/proc/self/cmdline),但无法读取您的环境变量(例如/proc/self/environ)的操作系统上。在 Linux 上,这是默认行为,但在您的系统上可能并非如此。请注意,这可能会增加
http.extraHeader等变量的安全性,其中敏感信息是值的一部分,但不是例如url.<base>.insteadOf,其中敏感信息可以作为键的一部分。 - --exec-path[=<path>]
-
核心 Git 程序安装位置的路径。这也可以通过设置 GIT_EXEC_PATH 环境变量来控制。如果未给出路径,git 将打印当前设置然后退出。
- --html-path
-
打印 Git 的 HTML 文档安装路径(不带尾部斜杠)并退出。
- --man-path
-
打印此版本 Git 的 man 页面的 manpath(参见
man(1))并退出。 - --info-path
-
打印此版本 Git 的信息文件安装路径并退出。
- -p
- --paginate
-
如果标准输出是终端,则将所有输出通过管道输送到 less(或如果设置了 $PAGER)。这会覆盖
pager.<cmd> 配置选项(请参阅下面的“配置机制”部分)。 - -P
- --no-pager
-
不要将 Git 输出通过管道输送到分页器。
- --git-dir=<path>
-
设置仓库(“.git”目录)的路径。这也可以通过设置
GIT_DIR环境变量来控制。它可以是绝对路径,也可以是相对于当前工作目录的相对路径。使用此选项(或
GIT_DIR环境变量)指定“.git”目录的位置会关闭尝试查找带有“.git”子目录的目录的仓库发现过程(这是 Git 发现仓库和工作树顶层的方式),并告诉 Git 您位于工作树的顶层。如果您不在工作树的顶层目录,您应该使用--work-tree=<path> 选项(或GIT_WORK_TREE环境变量)告诉 Git 工作树的顶层在哪里。如果您只想像在 <path> 中一样运行 git,请使用
git-C<path>。 - --work-tree=<path>
-
设置工作树的路径。它可以是绝对路径,也可以是相对于当前工作目录的路径。这也可以通过设置 GIT_WORK_TREE 环境变量和 core.worktree 配置变量来控制(有关更详细的讨论,请参阅 git-config[1] 中的 core.worktree)。
- --namespace=<path>
-
设置 Git 命名空间。有关更多详细信息,请参阅 gitnamespaces[7]。等同于设置
GIT_NAMESPACE环境变量。 - --bare
-
将仓库视为裸仓库。如果未设置 GIT_DIR 环境变量,则将其设置为当前工作目录。
- --no-replace-objects
-
不要使用替换引用来替换 Git 对象。这相当于将
GIT_NO_REPLACE_OBJECTS环境变量导出为任何值。有关更多信息,请参阅 git-replace[1]。 - --no-lazy-fetch
-
不要按需从主推远程获取缺失对象。与
gitcat-file-e<object> 一起使用,以查看对象是否在本地可用。这相当于将GIT_NO_LAZY_FETCH环境变量设置为1。 - --no-optional-locks
-
不要执行需要锁的可选操作。这相当于将
GIT_OPTIONAL_LOCKS设置为0。 - --no-advice
-
禁用所有建议性提示的打印。
- --literal-pathspecs
-
将路径名视为字面值(即不进行通配符匹配,不进行路径名魔术)。这相当于将
GIT_LITERAL_PATHSPECS环境变量设置为1。 - --glob-pathspecs
-
将“glob”魔术添加到所有路径名。这相当于将
GIT_GLOB_PATHSPECS环境变量设置为1。可以使用路径名魔术“:(literal)”禁用单个路径名的通配符匹配。 - --noglob-pathspecs
-
将“literal”魔术添加到所有路径名。这相当于将
GIT_NOGLOB_PATHSPECS环境变量设置为1。可以使用路径名魔术“:(glob)”启用单个路径名的通配符匹配。 - --icase-pathspecs
-
将“icase”魔术添加到所有路径名。这相当于将
GIT_ICASE_PATHSPECS环境变量设置为1。 - --list-cmds=<group>[,<group>…]
-
按组列出命令。这是一个内部/实验性选项,可能会在未来更改或删除。支持的组包括:builtins(内置命令)、parseopt(使用 parse-options 的内置命令)、deprecated(已弃用的内置命令)、main(libexec 目录中的所有命令)、others($PATH 中所有其他带有 git- 前缀的命令)、list-<category>(请参阅 command-list.txt 中的类别)、nohelpers(排除辅助命令)、alias 和 config(从配置变量 completion.commands 中检索命令列表)。
- --attr-source=<tree-ish>
-
从 <tree-ish> 而不是工作树读取 gitattributes。请参阅 gitattributes[5]。这相当于设置
GIT_ATTR_SOURCE环境变量。
高级命令 (porcelain)
我们将 porcelain 命令分为主命令和一些辅助用户实用程序。
主要 porcelain 命令
- git-add[1]
-
将文件内容添加到索引
- git-am[1]
-
从邮箱应用一系列补丁
- git-archive[1]
-
创建命名树的文件存档
- git-backfill[1]
-
下载部分克隆中缺少的对象
- git-bisect[1]
-
使用二分查找找到引入错误的提交
- git-branch[1]
-
列出、创建或删除分支
- git-bundle[1]
-
通过存档移动对象和引用
- git-checkout[1]
-
切换分支或恢复工作树文件
- git-cherry-pick[1]
-
应用一些现有提交引入的更改
- git-citool[1]
-
git-commit 的图形替代
- git-clean[1]
-
从工作树中删除未跟踪的文件
- git-clone[1]
-
将仓库克隆到新目录
- git-commit[1]
-
记录对仓库的更改
- git-describe[1]
-
根据可用引用为对象命名,使其易于人类阅读
- git-diff[1]
-
显示提交之间、提交与工作树之间等的更改
- git-fetch[1]
-
从另一个仓库下载对象和引用
- git-format-patch[1]
-
准备用于电子邮件提交的补丁
- git-gc[1]
-
清理不必要的文件并优化本地仓库
- git-grep[1]
-
打印匹配模式的行
- git-gui[1]
-
Git 的便携式图形界面
- git-init[1]
-
创建一个空的 Git 仓库或重新初始化一个现有的仓库
- git-log[1]
-
显示提交日志
- git-maintenance[1]
-
运行任务以优化 Git 仓库数据
- git-merge[1]
-
将两个或多个开发历史合并在一起
- git-mv[1]
-
移动或重命名文件、目录或符号链接
- git-notes[1]
-
添加或检查对象备注
- git-pull[1]
-
从另一个仓库或本地分支获取并集成
- git-push[1]
-
更新远程引用以及相关的对象
- git-range-diff[1]
-
比较两个提交范围(例如,一个分支的两个版本)
- git-rebase[1]
-
在另一个基础提示之上重新应用提交
- git-reset[1]
-
将当前 HEAD 重置为指定状态
- git-restore[1]
-
恢复工作树文件
- git-revert[1]
-
撤销一些现有提交
- git-rm[1]
-
从工作树和索引中删除文件
- git-shortlog[1]
-
总结 git log 输出
- git-show[1]
-
显示各种类型的对象
- git-sparse-checkout[1]
-
将您的工作树减至受跟踪文件的一个子集
- git-stash[1]
-
将脏工作目录中的更改暂存起来
- git-status[1]
-
显示工作树状态
- git-submodule[1]
-
初始化、更新或检查子模块
- git-switch[1]
-
切换分支
- git-tag[1]
-
创建、列出、删除或验证标签
- git-worktree[1]
-
管理多个工作树
- gitk[1]
-
Git 仓库浏览器
- scalar[1]
-
管理大型 Git 仓库的工具
辅助命令
Manipulators (操作命令)
- git-config[1]
-
获取和设置仓库或全局选项
- git-fast-export[1]
-
Git 数据导出器
- git-fast-import[1]
-
快速 Git 数据导入器的后端
- git-filter-branch[1]
-
重写分支
- git-mergetool[1]
-
运行合并冲突解决工具来解决合并冲突
- git-pack-refs[1]
-
打包 head 和 tag 以实现高效的仓库访问
- git-prune[1]
-
修剪对象数据库中所有不可达的对象
- git-reflog[1]
-
管理 reflog 信息
- git-refs[1]
-
低级引用访问
- git-remote[1]
-
管理跟踪的仓库集
- git-repack[1]
-
打包仓库中未打包的对象
- git-replace[1]
-
创建、列出、删除替换对象的引用
Interrogators (查询命令)
- git-annotate[1]
-
用提交信息注释文件行
- git-blame[1]
-
显示一个文件的每一行最后是由哪个修订版和作者修改的
- git-bugreport[1]
-
收集信息供用户报告 Bug
- git-count-objects[1]
-
计算未打包对象的数量及其磁盘占用
- git-diagnose[1]
-
生成诊断信息 zip 存档
- git-difftool[1]
-
使用常用 diff 工具显示更改
- git-fsck[1]
-
验证对象数据库中对象的连通性和有效性
- git-help[1]
-
显示关于 Git 的帮助信息
- git-instaweb[1]
-
在 gitweb 中即时浏览您的工作仓库
- git-merge-tree[1]
-
执行合并而不触摸索引或工作树
- git-rerere[1]
-
重用已记录的冲突合并分辨率
- git-show-branch[1]
-
显示分支及其提交
- git-verify-commit[1]
-
检查提交的 GPG 签名
- git-verify-tag[1]
-
检查标签的 GPG 签名
- git-version[1]
-
显示 Git 的版本信息
- git-whatchanged[1]
-
显示引入每个提交的差异的日志
- gitweb[1]
-
Git Web 界面(Git 仓库的 Web 前端)
与他人互动
这些命令用于与外部 SCM 交互以及通过电子邮件补丁与其他人员交互。
- git-archimport[1]
-
将 GNU Arch 仓库导入 Git
- git-cvsexportcommit[1]
-
将单个提交导出到 CVS 检出
- git-cvsimport[1]
-
从其他 SCM 中抢救您所爱又恨的数据
- git-cvsserver[1]
-
Git 的 CVS 服务器模拟器
- git-imap-send[1]
-
将一组补丁从 stdin 发送到 IMAP 文件夹
- git-p4[1]
-
从 Perforce 仓库导入和提交
- git-quiltimport[1]
-
将 quilt 补丁集应用于当前分支
- git-request-pull[1]
-
生成待处理更改的摘要
- git-send-email[1]
-
将一组补丁作为电子邮件发送
- git-svn[1]
-
Subversion 仓库和 Git 之间的双向操作
重置、恢复和撤销
有三个名称相似的命令:git reset、git restore 和 git revert。
-
git-revert[1] 用于创建新提交以撤销其他提交所做的更改。
-
git-restore[1] 用于从索引或另一个提交恢复工作树中的文件。此命令不更新您的分支。该命令也可用于从另一个提交恢复索引中的文件。
-
git-reset[1] 用于更新您的分支,移动提示以从分支添加或删除提交。此操作会更改提交历史记录。
gitreset也可用于恢复索引,与gitrestore重叠。
低级命令 (plumbing)
尽管 Git 包含自己的 porcelain 层,但其低级命令足以支持开发替代的 porcelain。此类 porcelain 的开发者可能会从阅读 git-update-index[1] 和 git-read-tree[1] 开始。
这些低级命令的接口(输入、输出、选项集和语义)被设计成比 Porcelain 命令更稳定,因为这些命令主要用于脚本使用。另一方面,Porcelain 命令的接口会根据需要进行更改,以改善最终用户体验。
以下描述将低级命令分为:操作对象(在仓库、索引和工作树中)、查询和比较对象,以及在仓库之间移动对象和引用的命令。
操作命令
- git-apply[1]
-
将补丁应用于文件和/或索引
- git-checkout-index[1]
-
将文件从索引复制到工作树
- git-commit-graph[1]
-
写入和验证 Git commit-graph 文件
- git-commit-tree[1]
-
创建新的提交对象
- git-hash-object[1]
-
计算对象 ID 并选择性地从文件创建对象
- git-index-pack[1]
-
为现有的打包存档构建 pack 索引文件
- git-merge-file[1]
-
执行三方文件合并
- git-merge-index[1]
-
为需要合并的文件执行合并
- git-mktag[1]
-
创建带有额外验证的标签对象
- git-mktree[1]
-
从 ls-tree 格式的文本构建 tree-object
- git-multi-pack-index[1]
-
写入和验证 multi-pack-indexes
- git-pack-objects[1]
-
创建对象的打包存档
- git-prune-packed[1]
-
删除已在 pack 文件中的冗余对象
- git-read-tree[1]
-
将树信息读入索引
- git-replay[1]
-
实验性:在新的基准上重放提交,也适用于裸仓库
- git-symbolic-ref[1]
-
读取、修改和删除符号引用
- git-unpack-objects[1]
-
从打包存档中解压对象
- git-update-index[1]
-
在工作树中注册文件内容到索引
- git-update-ref[1]
-
安全地更新存储在引用中的对象名称
- git-write-tree[1]
-
从当前索引创建 tree-object
查询命令
- git-cat-file[1]
-
提供仓库对象的内容或详细信息
- git-cherry[1]
-
查找尚未应用到上游的提交
- git-diff-files[1]
-
比较工作树和索引中的文件
- git-diff-index[1]
-
比较树与工作树或索引
- git-diff-pairs[1]
-
比较提供的 blob 对的内容和模式
- git-diff-tree[1]
-
比较通过两个 tree 对象找到的 blob 的内容和模式
- git-for-each-ref[1]
-
输出每个引用的信息
- git-for-each-repo[1]
-
对仓库列表运行 Git 命令
- git-get-tar-commit-id[1]
-
从使用 git-archive 创建的存档中提取提交 ID
- git-last-modified[1]
-
实验性:显示文件的最后修改时间
- git-ls-files[1]
-
显示索引和工作树中文件的信息
- git-ls-remote[1]
-
列出远程仓库中的引用
- git-ls-tree[1]
-
列出 tree 对象的内容
- git-merge-base[1]
-
为合并找到尽可能好的共同祖先
- git-name-rev[1]
-
为给定的修订版本查找符号名称
- git-pack-redundant[1]
-
查找冗余的 pack 文件
- git-repo[1]
-
检索关于仓库的信息
- git-rev-list[1]
-
以相反的时间顺序列出提交对象
- git-rev-parse[1]
-
提取和处理参数
- git-show-index[1]
-
显示打包存档索引
- git-show-ref[1]
-
列出本地仓库中的引用
- git-unpack-file[1]
-
创建带有 blob 内容的临时文件
- git-var[1]
-
显示 Git 逻辑变量
- git-verify-pack[1]
-
验证打包的 Git 存档文件
通常,查询命令不会触及工作树中的文件。
同步仓库
- git-daemon[1]
-
一个非常简单的 Git 仓库服务器
- git-fetch-pack[1]
-
从另一个仓库接收缺失的对象
- git-http-backend[1]
-
HTTP 上的 Git 服务器端实现
- git-send-pack[1]
-
通过 Git 协议将对象推送到另一个仓库
- git-update-server-info[1]
-
更新辅助信息文件以帮助“哑”服务器
以下是上述命令使用的辅助命令;最终用户通常不直接使用它们。
- git-http-fetch[1]
-
通过 HTTP 从远程 Git 仓库下载
- git-http-push[1]
-
通过 HTTP/DAV 将对象推送到另一个仓库
- git-receive-pack[1]
-
接收推送到仓库的内容
- git-shell[1]
-
用于仅 Git SSH 访问的受限登录 shell
- git-upload-archive[1]
-
将存档发送回 git-archive
- git-upload-pack[1]
-
将打包的对象发送回 git-fetch-pack
内部辅助命令
这些是其他命令使用的内部辅助命令;最终用户通常不直接使用它们。
- git-check-attr[1]
-
显示 gitattributes 信息
- git-check-ignore[1]
-
调试 gitignore / exclude 文件
- git-check-mailmap[1]
-
显示联系人的规范名称和电子邮件地址
- git-check-ref-format[1]
-
确保引用名称格式正确
- git-column[1]
-
以列格式显示数据
- git-credential[1]
-
检索和存储用户凭据
- git-credential-cache[1]
-
在内存中临时存储密码的辅助程序
- git-credential-store[1]
-
在磁盘上存储凭据的辅助程序
- git-fmt-merge-msg[1]
-
生成合并提交消息
- git-hook[1]
-
运行 git hook
- git-interpret-trailers[1]
-
在提交消息中添加或解析结构化信息
- git-mailinfo[1]
-
从单个电子邮件消息中提取补丁和作者信息
- git-mailsplit[1]
-
简单的 UNIX mbox 分割程序
- git-merge-one-file[1]
-
与 git-merge-index 一起使用的标准辅助程序
- git-patch-id[1]
-
计算补丁的唯一 ID
- git-sh-i18n[1]
-
Shell 脚本的 Git i18n 设置代码
- git-sh-setup[1]
-
通用的 Git shell 脚本设置代码
- git-stripspace[1]
-
删除不必要的空格
指南
以下文档页面是关于 Git 概念的指南。
- gitcore-tutorial[7]
-
面向开发人员的 Git Core 教程
- gitcredentials[7]
-
向 Git 提供用户名和密码
- gitcvs-migration[7]
-
CVS 用户 Git 入门
- gitdiffcore[7]
-
微调 diff 输出
- giteveryday[7]
-
日常 Git 的有用最小命令集
- gitfaq[7]
-
使用 Git 的常见问题解答
- gitglossary[7]
-
Git 词汇表
- gitnamespaces[7]
-
Git 命名空间
- gitremote-helpers[7]
-
与远程仓库交互的辅助程序
- gitsubmodules[7]
-
在一个仓库内挂载另一个仓库
- gittutorial[7]
-
Git 入门教程
- gittutorial-2[7]
-
Git 入门教程:第二部分
- gitworkflows[7]
-
Git 推荐工作流程概述
仓库、命令和文件接口
本文档讨论用户应直接交互的仓库和命令接口。有关标准的更多详细信息,请参阅 git-help[1] 中的 --user-formats。
- gitattributes[5]
-
为每个路径定义属性
- gitcli[7]
-
Git 命令行接口和约定
- githooks[5]
-
Git 使用的 Hooks
- gitignore[5]
-
指定要忽略的故意未跟踪的文件
- gitmailmap[5]
-
映射作者/提交者姓名和/或电子邮件地址
- gitmodules[5]
-
定义子模块属性
- gitrepository-layout[5]
-
Git 仓库布局
- gitrevisions[7]
-
为 Git 指定修订版本和范围
文件格式、协议和其他开发者接口
本文档讨论文件格式、线上协议和其他 Git 开发者接口。请参阅 git-help[1] 中的 --developer-interfaces。
- gitformat-bundle[5]
-
bundle 文件格式
- gitformat-chunk[5]
-
基于块的文件格式
- gitformat-commit-graph[5]
-
Git commit-graph 格式
- gitformat-index[5]
-
Git index 格式
- gitformat-pack[5]
-
Git pack 格式
- gitformat-signature[5]
-
Git 加密签名格式
- gitprotocol-capabilities[5]
-
协议 v0 和 v1 功能
- gitprotocol-common[5]
-
各种协议共有的内容
- gitprotocol-http[5]
-
Git 基于 HTTP 的协议
- gitprotocol-pack[5]
-
Pack 文件如何在网络上传输
- gitprotocol-v2[5]
-
Git Wire Protocol,版本 2
配置机制
Git 使用简单的文本格式来存储每个仓库和每个用户的自定义设置。这样的配置文件可能如下所示:
# # A '#' or ';' character indicates a comment. # ; core variables [core] ; Don't trust file modes filemode = false ; user identity [user] name = "Junio C Hamano" email = "gitster@pobox.com"
各种命令会从配置文件中读取信息并相应地调整其操作。请参阅 git-config[1] 以获取列表和关于配置机制的更多详细信息。
标识符术语
- <object>
-
表示任何类型对象的对象名称。
- <blob>
-
表示 blob 对象名称。
- <tree>
-
表示 tree 对象名称。
- <commit>
-
表示 commit 对象名称。
- <tree-ish>
-
表示 tree、commit 或 tag 对象名称。接受 <tree-ish> 参数的命令最终想要操作 <tree> 对象,但会自动解引用指向 <tree> 的 <commit> 和 <tag> 对象。
- <commit-ish>
-
表示 commit 或 tag 对象名称。接受 <commit-ish> 参数的命令最终想要操作 <commit> 对象,但会自动解引用指向 <commit> 的 <tag> 对象。
- <type>
-
表示需要对象类型。目前是以下之一:
blob、tree、commit或tag。 - <file>
-
表示文件名 - 几乎总是相对于
GIT_INDEX_FILE描述的树结构的根目录。
符号标识符
文件/目录结构
请参阅 gitrepository-layout[5] 文档。
有关每个 hook 的更多详细信息,请阅读 githooks[5]。
更高级别的 SCM 可能会在 $GIT_DIR 中提供和管理额外信息。
术语
请参阅 gitglossary[7]。
环境变量
各种 Git 命令会关注环境变量并改变其行为。标记为“布尔值”的环境变量的取值方式与布尔值配置变量相同,即“true”、“yes”、“on”和正数被视为“yes”,而“false”、“no”、“off”和“0”被视为“no”。
以下是这些变量:
Git 仓库
这些环境变量适用于 *所有* 核心 Git 命令。注意:值得注意的是,它们可能会被 Git 之上的 SCM 使用/覆盖,因此在使用外部前端时要小心。
GIT_INDEX_FILE-
此环境变量指定一个备用的索引文件。如果未指定,则使用默认值
$GIT_DIR/index。 GIT_INDEX_VERSION-
此环境变量指定在写入索引文件时使用的索引版本。它不会影响现有的索引文件。默认使用索引文件版本 2 或 3。有关更多信息,请参阅 git-update-index[1]。
GIT_OBJECT_DIRECTORY-
如果通过此环境变量指定了对象存储目录,则 sha1 目录将创建在其中;否则,将使用默认的
$GIT_DIR/objects目录。 GIT_ALTERNATE_OBJECT_DIRECTORIES-
由于 Git 对象是不可变的,旧对象可以归档到共享的、只读的目录中。此变量指定一个用“:”分隔(在 Windows 上是“;”分隔)的 Git 对象目录列表,可用于搜索 Git 对象。新对象不会写入这些目录。
以“"”(双引号)开头的条目将被解释为 C 风格的带引号路径,去除前导和尾部的双引号并保留反斜杠转义。例如,值 "path-with-\"-and-:-in-it":vanilla-path 包含两个路径:
path-with-"-and-:-in-it和vanilla-path。 GIT_DIR-
如果设置了
GIT_DIR环境变量,则它指定一个路径,而不是默认的.git,作为仓库的根目录。--git-dir命令行选项也设置此值。 GIT_WORK_TREE-
设置工作树根目录的路径。这也可以通过
--work-tree命令行选项和 core.worktree 配置变量来控制。 GIT_NAMESPACE-
设置 Git 命名空间;有关详细信息,请参阅 gitnamespaces[7]。
--namespace命令行选项也设置此值。 GIT_CEILING_DIRECTORIES-
这应该是一个冒号分隔的绝对路径列表。如果设置,它是一个目录列表,Git 在查找仓库目录时不应更改目录(对于排除加载缓慢的网络目录很有用)。它不会排除当前工作目录或在命令行或环境变量中设置的 GIT_DIR。通常,Git 必须读取此列表中的条目并解析可能存在的任何符号链接,以便将其与当前目录进行比较。但是,如果即使此访问速度很慢,您也可以在列表中添加一个空条目来告诉 Git 后续条目不是符号链接,无需解析;例如,
GIT_CEILING_DIRECTORIES=/maybe/symlink::/very/slow/non/symlink。 GIT_DISCOVERY_ACROSS_FILESYSTEM-
当在没有 ".git" 仓库目录的目录中运行时,Git 会尝试在其父目录中查找此类目录以找到工作树的顶部,但默认情况下它不会跨越文件系统边界。此布尔环境变量可以设置为 true,以告诉 Git 不要停止在文件系统边界。与
GIT_CEILING_DIRECTORIES类似,它不会影响通过GIT_DIR或在命令行中显式设置的仓库目录。 GIT_COMMON_DIR-
如果此变量设置为路径,则通常位于 $GIT_DIR 中的非工作树文件将从该路径获取。工作树特定文件(如 HEAD 或 index)将从 $GIT_DIR 获取。有关详细信息,请参阅 gitrepository-layout[5] 和 git-worktree[1]。此变量的优先级低于其他路径变量,如 GIT_INDEX_FILE、GIT_OBJECT_DIRECTORY…
GIT_DEFAULT_HASH-
如果设置了此变量,新仓库的默认哈希算法将设置为此值。克隆时将忽略此值,并始终使用远程仓库的设置。默认值为“sha1”。请参阅 git-init[1] 中的
--object-format。 GIT_DEFAULT_REF_FORMAT-
如果设置了此变量,则新存储库的默认引用后端格式将设置为此值。默认为“files”。请参阅
--ref-format在 git-init[1]。
Git 提交
GIT_AUTHOR_NAME-
在创建提交或标签对象时,或在写入 reflogs 时,用于作者身份的可读姓名。覆盖
user.name和author.name配置设置。 GIT_AUTHOR_EMAIL-
在创建提交或标签对象时,或在写入 reflogs 时,用于作者身份的电子邮件地址。覆盖
user.email和author.email配置设置。 GIT_AUTHOR_DATE-
在创建提交或标签对象时,或在写入 reflogs 时,用于作者身份的日期。请参阅 git-commit[1] 获取有效格式。
GIT_COMMITTER_NAME-
在创建提交或标签对象时,或在写入 reflogs 时,用于提交者身份的可读姓名。覆盖
user.name和committer.name配置设置。 GIT_COMMITTER_EMAIL-
在创建提交或标签对象时,或在写入 reflogs 时,用于作者身份的电子邮件地址。覆盖
user.email和committer.email配置设置。 GIT_COMMITTER_DATE-
在创建提交或标签对象时,或在写入 reflogs 时,用于提交者身份的日期。请参阅 git-commit[1] 获取有效格式。
EMAIL-
如果未设置其他相关环境变量或配置设置,则用于作者和提交者身份的电子邮件地址。
Git 差异
GIT_DIFF_OPTS-
唯一有效的设置是“--unified=?? "或“-u??”,用于设置在创建统一 diff 时显示的上下文行的数量。这优先于 Git diff 命令行的任何“-U”或“--unified”选项值。
GIT_EXTERNAL_DIFF-
当设置了环境变量
GIT_EXTERNAL_DIFF时,将调用其命名的程序来生成 diff,Git 不会使用其内置的 diff 机制。对于已添加、删除或修改的路径,GIT_EXTERNAL_DIFF将使用 7 个参数调用。path old-file old-hex old-mode new-file new-hex new-mode
其中
- <old|new>-file
-
是 GIT_EXTERNAL_DIFF 可以用来读取 <old|new> 内容的文件,
- <old|new>-hex
-
是 40 位 SHA-1 哈希值,
- <old|new>-mode
-
是文件模式的八进制表示。
文件参数可以指向用户的工件(例如,“git-diff-files”中的
new-file)、/dev/null(例如,当添加新文件时old-file)或临时文件(例如,索引中的old-file)。GIT_EXTERNAL_DIFF不必担心取消链接临时文件——当GIT_EXTERNAL_DIFF退出时,它会被删除。对于未合并的路径,
GIT_EXTERNAL_DIFF将使用 1 个参数 <path> 调用。对于 GIT_EXTERNAL_DIFF 调用的每个路径,将设置两个环境变量:
GIT_DIFF_PATH_COUNTER和GIT_DIFF_PATH_TOTAL。 GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE-
如果此布尔环境变量设置为 true,则
GIT_EXTERNAL_DIFF命令应返回退出代码 0(如果它认为输入文件相等)或 1(如果它认为它们不同),如diff(1)。如果设置为 false(这是默认值),则命令应返回退出代码 0,而不管相等性如何。任何其他退出代码都会导致 Git 报告致命错误。 GIT_DIFF_PATH_COUNTER-
每条路径递增一的 1 基计数器。
GIT_DIFF_PATH_TOTAL-
路径的总数。
其他
GIT_MERGE_VERBOSITY-
控制递归合并策略所显示输出量的数字。覆盖 merge.verbosity。请参阅 git-merge[1]
GIT_PAGER-
此环境变量覆盖
$PAGER。如果将其设置为空字符串或值为“cat”,Git 将不会启动分页器。另请参阅 git-config[1] 中的core.pager选项。 GIT_PROGRESS_DELAY-
控制在显示可选进度指示器之前延迟多少秒的数字。默认为 1。
GIT_EDITOR-
此环境变量覆盖
$EDITOR和$VISUAL。当在交互模式下启动编辑器时,Git 的多个命令会使用它。另请参阅 git-var[1] 和 git-config[1] 中的core.editor选项。 GIT_SEQUENCE_EDITOR-
此环境变量在编辑交互式 rebase 的 todo 列表时会覆盖配置的 Git 编辑器。另请参阅 git-rebase[1] 和 git-config[1] 中的
sequence.editor选项。 GIT_SSHGIT_SSH_COMMAND-
如果设置了这两个环境变量之一,那么当 git fetch 和 git push 需要连接到远程系统时,它们将使用指定的命令而不是 ssh。传递给已配置命令的命令行参数由 ssh 变体决定。有关详细信息,请参阅 git-config[1] 中的
ssh.variant选项。$GIT_SSH_COMMAND优先于$GIT_SSH,并由 shell 进行解释,允许包含其他参数。$GIT_SSH,另一方面,只能是程序的路径(如果需要其他参数,可以是包装 shell 脚本)。通常,通过个人
.ssh/config文件配置任何所需的选项更为容易。有关更多详细信息,请咨询您的 ssh 文档。 GIT_SSH_VARIANT-
如果设置了此环境变量,则它会覆盖 Git 的自动检测,即
GIT_SSH/GIT_SSH_COMMAND/core.sshCommand是否指向 OpenSSH、plink 或 tortoiseplink。此变量会覆盖具有相同目的的配置设置ssh.variant。 GIT_SSL_NO_VERIFY-
设置此环境变量并将其导出为任何值,都表示 Git 在通过 HTTPS 获取或推送时不要验证 SSL 证书。
GIT_ATTR_SOURCE-
设置将从哪个 treeish 读取 gitattributes。
GIT_ASKPASS-
如果设置了此环境变量,则需要获取密码或密码短语(例如,用于 HTTP 或 IMAP 身份验证)的 Git 命令将使用合适的提示作为命令行参数调用此程序,并从其 STDOUT 读取密码。另请参阅 git-config[1] 中的
core.askPass选项。 GIT_TERMINAL_PROMPT-
如果此布尔环境变量设置为 false,Git 将不会在终端上提示(例如,当请求 HTTP 身份验证时)。
GIT_CONFIG_GLOBALGIT_CONFIG_SYSTEM-
从指定的文件中获取配置,而不是从全局或系统级别的配置文件中获取。如果设置了
GIT_CONFIG_SYSTEM,则不会读取构建时定义的系统配置文件(通常是/etc/gitconfig)。同样,如果设置了GIT_CONFIG_GLOBAL,则不会读取$HOME/.gitconfig或$XDG_CONFIG_HOME/git/config。可以将其设置为/dev/null以跳过读取相应级别的配置文件。 GIT_CONFIG_NOSYSTEM-
是否跳过从系统范围的
$(prefix)/etc/gitconfig文件读取设置。此布尔环境变量可以与$HOME和$XDG_CONFIG_HOME一起使用,为挑剔的脚本创建可预测的环境,或者您可以将其设置为 true,以便在等待有足够权限的人修复有错误的/etc/gitconfig文件时暂时避免使用它。 GIT_FLUSH-
如果此布尔环境变量设置为 true,则诸如 git blame(增量模式)、git rev-list、git log、git check-attr 和 git check-ignore 等命令将在每个记录刷新后强制刷新输出流。如果此变量设置为 false,则这些命令的输出将完全使用缓冲 I/O 进行。如果此环境变量未设置,Git 将根据 stdout 是否重定向到文件来选择缓冲或面向记录的刷新。
GIT_TRACE-
启用常规跟踪消息,例如别名展开、内置命令执行和外部命令执行。
如果此变量设置为“1”、“2”或“true”(区分大小写),则跟踪消息将打印到 stderr。
如果变量设置为大于 2 且小于 10(严格)的整数值,则 Git 将此值解释为文件描述符,并尝试将跟踪消息写入此文件描述符。
或者,如果变量设置为绝对路径(以 / 字符开头),Git 将其解释为文件路径,并尝试将跟踪消息追加到其中。
取消设置变量,或将其设置为空、“0”或“false”(不区分大小写)会禁用跟踪消息。
GIT_TRACE_FSMONITOR-
为文件系统监视器扩展启用跟踪消息。有关可用的跟踪输出选项,请参阅
GIT_TRACE。 GIT_TRACE_PACK_ACCESS-
为所有对任何 pack 的访问启用跟踪消息。对于每次访问,都会记录 pack 文件名和 pack 中的偏移量。这可能有助于解决某些 pack 相关的性能问题。有关可用的跟踪输出选项,请参阅
GIT_TRACE。 GIT_TRACE_PACKET-
启用从给定程序进出所有数据包的跟踪消息。这有助于调试对象协商或其他协议问题。跟踪在以“PACK”开头的数据包处关闭(但请参阅下面的
GIT_TRACE_PACKFILE)。有关可用的跟踪输出选项,请参阅GIT_TRACE。 GIT_TRACE_PACKFILE-
启用对给定程序发送或接收的 packfiles 的跟踪。与其他跟踪输出不同,此跟踪是逐字记录的:没有标头,也没有引用二进制数据。您几乎肯定希望将其重定向到文件(例如,
GIT_TRACE_PACKFILE=/tmp/my.pack),而不是在终端上显示它或将其与其他跟踪输出混合。请注意,这目前仅在克隆和获取的客户端端实现。
GIT_TRACE_PERFORMANCE-
启用与性能相关的跟踪消息,例如每个 Git 命令的总执行时间。有关可用的跟踪输出选项,请参阅
GIT_TRACE。 GIT_TRACE_REFS-
为引用数据库上的操作启用跟踪消息。有关可用的跟踪输出选项,请参阅
GIT_TRACE。 GIT_TRACE_SETUP-
在 Git 完成其设置阶段后,启用打印 .git、工作树和当前工作目录的跟踪消息。有关可用的跟踪输出选项,请参阅
GIT_TRACE。 GIT_TRACE_SHALLOW-
启用有助于调试浅层仓库获取/克隆的跟踪消息。有关可用的跟踪输出选项,请参阅
GIT_TRACE。 GIT_TRACE_CURL-
启用 curl 的完整跟踪,转储 git 传输协议的所有进出数据,包括描述性信息。这类似于在命令行上执行 curl
--trace-ascii。有关可用的跟踪输出选项,请参阅GIT_TRACE。 GIT_TRACE_CURL_NO_DATA-
当启用 curl 跟踪时(请参阅上面的
GIT_TRACE_CURL),请勿转储数据(即,仅转储信息行和标头)。 GIT_TRACE2-
启用“trace2”库中更详细的跟踪消息。来自
GIT_TRACE2的输出是一种简单的人类可读的基于文本的格式。如果此变量设置为“1”、“2”或“true”(区分大小写),则跟踪消息将打印到 stderr。
如果变量设置为大于 2 且小于 10(严格)的整数值,则 Git 将此值解释为文件描述符,并尝试将跟踪消息写入此文件描述符。
或者,如果变量设置为绝对路径(以 / 字符开头),Git 将其解释为文件路径,并尝试将跟踪消息追加到其中。如果路径已存在且是目录,跟踪消息将写入该目录中的文件(每个进程一个),文件名根据 SID 的最后一个组件和一个可选计数器命名(以避免文件名冲突)。
此外,如果变量设置为
af_unix:[<socket-type>:]<absolute-pathname>,Git 将尝试将路径打开为 Unix 域套接字。套接字类型可以是stream或dgram。取消设置变量,或将其设置为空、“0”或“false”(不区分大小写)会禁用跟踪消息。
有关详细信息,请参阅 Trace2 文档。
GIT_TRACE2_EVENT-
此设置写入适合机器解释的 JSON 格式。有关可用的跟踪输出选项,请参阅
GIT_TRACE2,有关详细信息,请参阅 Trace2 文档。 GIT_TRACE2_PERF-
除了
GIT_TRACE2中提供的基于文本的消息外,此设置还写入基于列的格式,用于理解嵌套区域。有关可用的跟踪输出选项,请参阅GIT_TRACE2,有关详细信息,请参阅 Trace2 文档。 GIT_TRACE_REDACT-
默认情况下,当激活跟踪时,Git 会编辑 cookie、“Authorization: ”标头、“Proxy-Authorization: ”标头和 packfile URI 的值。将此布尔环境变量设置为 false 可阻止此编辑。
GIT_NO_REPLACE_OBJECTS-
设置并导出此环境变量表示 Git 将忽略替换引用,并且不替换 Git 对象。
GIT_LITERAL_PATHSPECS-
将此布尔环境变量设置为 true 将导致 Git 将所有路径规范视为字面值,而不是通配符模式。例如,运行
GIT_LITERAL_PATHSPECS=1gitlog--*.c'将搜索触及路径*.c的提交,而不是通配符*.c匹配的任何路径。当您将字面路径馈送到 Git 时(例如,之前由gitls-tree、--rawdiff 输出等提供的路径),您可能会想要这样做。 GIT_GLOB_PATHSPECS-
将此布尔环境变量设置为 true 将导致 Git 将所有路径规范视为通配符模式(也称为“glob”魔术)。
GIT_NOGLOB_PATHSPECS-
将此布尔环境变量设置为 true 将导致 Git 将所有路径规范视为字面值(也称为“literal”魔术)。
GIT_ICASE_PATHSPECS-
将此布尔环境变量设置为 true 将导致 Git 将所有路径规范视为不区分大小写。
GIT_NO_LAZY_FETCH-
将此布尔环境变量设置为 true 表示 Git 不会按需从 promisor remote 延迟获取缺失的对象。
GIT_REFLOG_ACTION-
当引用更新时,会创建 reflog 条目来跟踪引用更新的原因(通常是更新引用的高级命令的名称),以及引用的旧值和新值。脚本化的 Porcelain 命令可以使用
git-sh-setup中的 set_reflog_action 辅助函数,在用户作为顶层命令调用它时将其名称设置为此变量,以便记录在 reflog 的主体中。 GIT_REF_PARANOIA-
如果此布尔环境变量设置为 false,则在迭代引用列表时忽略损坏或命名不当的引用。通常 Git 会尝试包含任何此类引用,这可能会导致某些操作失败。这通常是可取的,因为潜在的破坏性操作(例如,git-prune[1])最好中止而不是忽略损坏的引用(从而认为它们指向的历史不值得保存)。默认值为
1(即,对检测和中止所有操作保持警惕)。您通常不需要将其设置为0,但在尝试从损坏的存储库中抢救数据时可能很有用。 GIT_COMMIT_GRAPH_PARANOIA-
在从 commit-graph 加载 commit 对象时,Git 会在对象数据库中执行对象的存在性检查。这样做是为了避免 commit-graph 包含对已删除提交的引用的情况,但这会带来性能损失。
默认值为“false”,禁用上述行为。将其设置为“true”可启用存在性检查,因此 commit-graph 永远不会返回已删除的提交,但会以牺牲性能为代价。
GIT_ALLOW_PROTOCOL-
如果设置为由冒号分隔的协议列表,则行为类似于将
protocol.allow设置为never,并且列出的每个协议都将protocol.<name>.allow设置为always(覆盖任何现有配置)。有关更多详细信息,请参阅 git-config[1] 中protocol.allow的描述。 GIT_PROTOCOL_FROM_USER-
将此布尔环境变量设置为 false,以防止用于 fetch/push/clone 的协议(已配置为
user状态)。这对于限制从不受信任的存储库递归初始化子模块或对于将潜在不受信任的 URL 馈送到 Git 命令的程序很有用。有关更多详细信息,请参阅 git-config[1]。 GIT_PROTOCOL-
仅供内部使用。用于握手线路协议。包含一个由冒号 : 分隔的键列表,可选值为 <key>[=<value>]。应忽略未知键和值。
请注意,服务器可能需要配置为允许此变量通过某些传输。它将在访问本地存储库时(即
file://或文件系统路径)以及通过git://协议自动传播。对于 git-over-http,在大多数配置中它应该可以自动工作,但请参阅 git-http-backend[1] 中的讨论。对于 git-over-ssh,可能需要配置 ssh 服务器以允许客户端传递此变量(例如,通过使用 OpenSSH 的AcceptEnvGIT_PROTOCOL)。此配置是可选的。如果未传播该变量,则客户端将回退到原始的“v0”协议(但可能会错过一些性能改进或功能)。该变量目前仅影响克隆和获取;它尚未用于推送(但将来可能会)。
GIT_OPTIONAL_LOCKS-
如果此布尔环境变量设置为 false,Git 将在不执行任何需要获取锁的可选子操作的情况下完成任何请求的操作。例如,这将阻止
gitstatus作为副作用刷新索引。这对于不希望与其他存储库操作产生锁竞争的后台进程很有用。默认为1。 GIT_REDIRECT_STDINGIT_REDIRECT_STDOUTGIT_REDIRECT_STDERR-
仅限 Windows:允许将标准输入/输出/错误句柄重定向到环境变量指定的路径。这对于多线程应用程序特别有用,因为通过
CreateProcess() 传递标准句柄的传统方式不可行,因为它需要将句柄标记为可继承(因此,所有产生的进程都将继承它们,可能阻止常规的 Git 操作)。主要预期用例是使用命名管道进行通信(例如,\\.\pipe\my-git-stdin-123)。支持两个特殊值:
off将简单地关闭相应的标准句柄,如果GIT_REDIRECT_STDERR是 2>&1,则标准错误将重定向到与标准输出相同的句柄。 GIT_PRINT_SHA1_ELLIPSIS(已弃用)-
如果设置为
yes,则在(缩写的)SHA-1 值后打印省略号。这会影响分离 HEAD 的指示(git-checkout[1])和原始 diff 输出(git-diff[1])。在提到的情况下打印省略号不再被认为是足够的,并且在可预见的将来(以及变量)很可能会删除对其的支持。 GIT_ADVICE-
如果设置为
0,则禁用所有建议消息。这些消息旨在为人类用户提供提示,帮助他们摆脱困境或利用新功能。用户可以使用advice.*配置键禁用单个消息。这些消息可能会对执行 Git 进程的工具造成干扰,因此此变量可用于禁用消息。(--no-advice全局选项也可用,但旧版本的 Git 在不理解此选项时可能会失败。不理解它的 Git 版本将忽略此环境变量。)
讨论
有关以下内容的更多详细信息,请参阅 用户手册的 Git 概念章节 和 gitcore-tutorial[7]。
一个 Git 项目通常由一个工作目录和一个顶层的“.git”子目录组成。.git 目录包含一个压缩的对象数据库(表示项目的完整历史记录)、一个将该历史记录链接到工作树当前内容的“index”文件,以及指向该历史记录的命名指针(例如标签和分支头)。
对象数据库包含三种主要类型的对象:blob,用于存储文件数据;tree,指向 blob 和其他 tree 以构建目录层次结构;以及 commit,每个 commit 引用一个 tree 和若干个父 commit。
commit,相当于其他系统称作“changeset”或“version”,代表了项目历史中的一个步骤,每个父 commit 代表紧接其前的一个步骤。拥有多个父 commit 的 commit 代表了独立开发线的合并。
所有对象都通过其内容的 SHA-1 哈希值来命名,通常写作一个 40 位的十六进制字符串。这些名称是全局唯一的。可以通过签名一个 commit 来验证其整个历史。为此提供了一个第四种对象类型,称为 tag。
对象在创建时存储在单独的文件中,但为了效率,之后可能会被压缩到“pack files”中。
名为 ref 的指针标记了历史中的重要节点。一个 ref 可以包含一个对象的 SHA-1 名称,或者另一个 ref 的名称(后者称为“symbolic ref”)。以 refs/head/ 开头的 ref 包含正在开发的分支的最新 commit(或“head”)的 SHA-1 名称。感兴趣的 tag 的 SHA-1 名称存储在 refs/tags/ 下。一个名为 HEAD 的 symbolic ref 包含当前检出的分支的名称。
索引文件初始化时包含所有路径的列表,以及每个路径对应的 blob 对象和一组属性。blob 对象表示当前分支 head 时的文件内容。属性(最后修改时间、大小等)取自工作树中对应的文件。通过比较这些属性可以发现工作树的后续更改。索引可以更新为新内容,并且可以从索引中存储的内容创建新的 commit。
索引还能够存储给定路径名的多个条目(称为“stages”)。当合并正在进行时,这些 stages 用于保存文件的各种未合并的版本。
安全性
一些配置选项和 hook 文件可能会导致 Git 运行任意 shell 命令。由于配置和 hook 不会通过 git clone 复制,因此通常可以安全地克隆来自不受信任来源的远程仓库,使用 git log 等命令进行检查。
然而,在 .git 目录(或其周围的工作树)中运行 Git 命令时,如果该 .git 目录本身来自不受信任的来源,则不安全。其配置和 hook 中的命令将按正常方式执行。
默认情况下,当仓库的所有者不是运行命令的用户时,Git 会拒绝运行。请参阅 git-config[1] 中 safe.directory 的条目。虽然这可以在多用户环境中保护您,但请注意,您也可以获取由您自己拥有的不受信任的仓库(例如,如果您从不受信任的来源解压了一个 zip 文件或 tarball)。在这种情况下,您需要先“清理”不受信任的仓库。
如果您有一个不受信任的 .git 目录,您应该首先使用 git clone --no-local 克隆它以获取一个干净的副本。Git 确实会限制 upload-pack 将运行的选项和 hook 的集合,upload-pack 处理 clone 或 fetch 的服务器端,但请注意,upload-pack 的攻击面很大,因此这仍然存在一定的风险。最安全的方法是通过一个非特权用户来提供仓库(可以通过 git-daemon[1]、ssh,或者使用其他工具更改用户 ID)。请参阅 git-upload-pack[1] 的 SECURITY 部分的讨论。
更多文档
请参阅“description”部分中的参考资料来开始使用 Git。以下内容对于初学者来说可能比必要的要详细。
用户手册的 Git 概念章节 和 gitcore-tutorial[7] 都提供了对底层 Git 架构的介绍。
请参阅 gitworkflows[7] 以了解推荐工作流的概述。
另请参阅 howto 文档以获取一些有用的示例。
内部机制在 Git API 文档 中有详细说明。
从 CVS 迁移的用户可能还想阅读 gitcvs-migration[7]。
作者
Git 由 Linus Torvalds 发起,目前由 Junio C Hamano 维护。Git 邮件列表 <git@vger.kernel.org> 贡献了大量内容。https://openhub.net/p/git/contributors/summary 提供了更完整的贡献者列表。
如果您克隆了 git.git 本身,git-shortlog[1] 和 git-blame[1] 的输出可以显示项目特定部分的作者。
报告 Bug
请将 Bug 报告给 Git 邮件列表 <git@vger.kernel.org>,开发和维护主要在此进行。您无需订阅列表即可发送消息。请参阅列表存档 https://lore.kernel.org/git 以查看之前的 Bug 报告和其他讨论。
与安全相关的问题应私密披露给 Git 安全邮件列表 <git-security@googlegroups.com>。