设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.49.0 无更改
- 2.48.1 无更改
-
2.48.0
2025-01-10
- 2.47.1 → 2.47.2 无更改
-
2.47.0
2024-10-06
- 2.46.1 → 2.46.3 无更改
-
2.46.0
2024-07-29
- 2.45.2 → 2.45.3 无更改
-
2.45.1
2024-04-29
-
2.45.0
2024-04-29
- 2.44.2 → 2.44.3 无更改
-
2.44.1
2024-04-19
-
2.44.0
2024-02-23
- 2.43.5 → 2.43.6 无更改
-
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] 手册页面提供了命令行命令语法的概述。
可以在 https://git.github.io/htmldocs/git.html 或 https://git-scm.cn/docs 查看格式化和超链接的最新 Git 文档副本。
选项
- -v
- --version
-
打印 git 程序来自的 Git 套件版本。
此选项在内部转换为
git version ...
并接受与 git-version[1] 命令相同的选项。 如果同时给出了--help
,则它优先于--version
。 - -h
- --help
-
打印概要和最常用命令的列表。 如果给出了选项
--all
或-a
,则会打印所有可用命令。 如果指定了一个 Git 命令,则此选项将调出该命令的手册页。还有其他选项可用于控制手册页的显示方式。 有关更多信息,请参见 git-help[1],因为
git --help ...
在内部转换为git help ...
。 - -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 -c foo.bar ...
中的=
,并将foo.bar
设置为布尔真值(就像 config 文件中的[foo]bar
一样)。 包括等号但使用空值(例如git -c foo.bar= ...
)会将foo.bar
设置为空字符串,git config --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 的 Info 文件的路径,然后退出。
- -p
- --paginate
-
如果标准输出是一个终端,则将所有输出管道传输到 less (如果已设置,则管道传输到 $PAGER)。 这会覆盖
pager.<cmd>
配置选项(请参见下面的“配置机制”部分)。 - -P
- --no-pager
-
不要将 Git 输出管道传输到分页器。
- --git-dir=<path>
-
设置存储库的路径(“.git”目录)。 也可以通过设置
GIT_DIR
环境变量来控制这一点。 它可以是绝对路径或相对于当前工作目录的相对路径。使用此选项(或
GIT_DIR
环境变量)指定 “.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
-
不要按需从 promisor 远程仓库获取丢失的对象。与
git cat-file -e <object>
结合使用,可用于查看对象是否在本地可用。这等同于将GIT_NO_LAZY_FETCH
环境变量设置为1
。 - --no-optional-locks
-
不执行需要锁定的可选操作。这等同于将
GIT_OPTIONAL_LOCKS
设置为0
。 - --no-advice
-
禁用所有建议提示的打印。
- --literal-pathspecs
-
按字面意义处理 pathspec(即,无通配符,无 pathspec 魔法)。这等同于将
GIT_LITERAL_PATHSPECS
环境变量设置为1
。 - --glob-pathspecs
-
向所有 pathspec 添加 "glob" 魔法。这等同于将
GIT_GLOB_PATHSPECS
环境变量设置为1
。可以使用 pathspec 魔法 ":(literal)" 在单个 pathspec 上禁用 globbing。 - --noglob-pathspecs
-
向所有 pathspec 添加 "literal" 魔法。这等同于将
GIT_NOGLOB_PATHSPECS
环境变量设置为1
。可以使用 pathspec 魔法 ":(glob)" 在单个 pathspec 上启用 globbing。 - --icase-pathspecs
-
向所有 pathspec 添加 "icase" 魔法。这等同于将
GIT_ICASE_PATHSPECS
环境变量设置为1
。 - --list-cmds=<group>[,<group>…]
-
按组列出命令。这是一个内部/实验性选项,将来可能会更改或删除。支持的组包括:builtins,parseopt (使用 parse-options 的内置命令),main (libexec 目录中的所有命令),others (
$PATH
中所有具有 git- 前缀的其他命令),list-<category> (参见 command-list.txt 中的类别),nohelpers (排除 helper 命令),alias 和 config (从配置变量 completion.commands 检索命令列表) - --attr-source=<tree-ish>
-
从 <tree-ish> 而不是工作区读取 gitattributes。参见 gitattributes[5]。这等同于设置
GIT_ATTR_SOURCE
环境变量。
高级命令(瓷器)
我们将瓷器命令分为主要命令和一些辅助用户实用程序。
主要瓷器命令
- 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]
-
创建、列出、删除或验证使用 GPG 签名的标签对象
- git-worktree[1]
-
管理多个工作区
- gitk[1]
-
Git 存储库浏览器
- scalar[1]
-
用于管理大型 Git 存储库的工具
辅助命令
操纵器
- git-config[1]
-
获取和设置存储库或全局选项
- git-fast-export[1]
-
Git 数据导出器
- git-fast-import[1]
-
快速 Git 数据导入器的后端
- git-filter-branch[1]
-
重写分支
- git-mergetool[1]
-
运行合并冲突解决工具以解决合并冲突
- git-pack-refs[1]
-
打包头和标签以实现高效的存储库访问
- git-prune[1]
-
从对象数据库中删除所有无法访问的对象
- git-reflog[1]
-
管理 reflog 信息
- git-refs[1]
-
对引用的低级访问
- git-remote[1]
-
管理一组跟踪的存储库
- git-repack[1]
-
打包存储库中未打包的对象
- git-replace[1]
-
创建、列出、删除用于替换对象的引用
询问者
- git-annotate[1]
-
用提交信息注释文件行
- git-blame[1]
-
显示哪个版本和作者最后修改了文件的每一行
- git-bugreport[1]
-
收集用户信息以提交错误报告
- 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 存储库导入并提交到 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] 是关于更新您的分支,移动尖端以便从分支中添加或删除提交。 此操作会更改提交历史记录。
git reset
还可以用于恢复索引,与git restore
重叠。
底层命令(管道)
尽管 Git 包含它自己的瓷器层,但它的底层命令足以支持替代瓷器的开发。 此类瓷器的开发人员可以首先阅读 git-update-index[1] 和 git-read-tree[1]。
这些底层命令的接口(输入、输出、选项集和语义)旨在比瓷器层命令更稳定,因为这些命令主要用于脚本使用。 另一方面,瓷器命令的界面可能会发生变化,以改善最终用户体验。
以下描述将底层命令分为操作对象(在存储库、索引和工作树中)的命令、查询和比较对象的命令以及在存储库之间移动对象和引用的命令。
操作命令
- git-apply[1]
-
将补丁应用于文件和/或索引
- git-checkout-index[1]
-
将文件从索引复制到工作树
- git-commit-graph[1]
-
写入并验证 Git 提交图文件
- git-commit-tree[1]
-
创建一个新的提交对象
- git-hash-object[1]
-
计算对象 ID 并选择性地从文件创建对象
- git-index-pack[1]
-
为现有打包的归档文件构建包索引文件
- git-merge-file[1]
-
运行三向文件合并
- git-merge-index[1]
-
为需要合并的文件运行合并
- git-mktag[1]
-
使用额外的验证创建标签对象
- git-mktree[1]
-
从 ls-tree 格式化的文本构建树对象
- git-multi-pack-index[1]
-
写入并验证多包索引
- git-pack-objects[1]
-
创建打包的对象归档
- git-prune-packed[1]
-
删除已存在于包文件中的额外对象
- 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]
-
从当前索引创建树对象
查询命令
- git-cat-file[1]
-
提供存储库对象的内容或详细信息
- git-cherry[1]
-
查找尚未应用于上游的提交
- git-diff-files[1]
-
比较工作树和索引中的文件
- git-diff-index[1]
-
将树与工作树或索引进行比较
- git-diff-tree[1]
-
比较通过两个树对象找到的 blob 的内容和模式
- git-for-each-ref[1]
-
输出有关每个引用的信息
- git-for-each-repo[1]
-
在一系列存储库上运行 Git 命令
- git-get-tar-commit-id[1]
-
从使用 git-archive 创建的归档中提取提交 ID
- git-ls-files[1]
-
显示有关索引和工作树中的文件的信息
- git-ls-remote[1]
-
列出远程存储库中的引用
- git-ls-tree[1]
-
列出树对象的内容
- git-merge-base[1]
-
为合并找到尽可能好的共同祖先
- git-name-rev[1]
-
查找给定修订的符号名称
- git-pack-redundant[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 钩子
- 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]
-
Git 的 shell 脚本 i18n 设置代码
- git-sh-setup[1]
-
Common Git shell script setup code(常用的 Git shell 脚本设置代码)
- git-stripspace[1]
-
删除不必要的空格
指南
以下文档页面是关于 Git 概念的指南。
- gitcore-tutorial[7]
-
面向开发人员的 Git 核心教程
- 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 使用的钩子
- 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]
-
基于 Chunk 的文件格式
- gitformat-commit-graph[5]
-
Git 提交图格式
- gitformat-index[5]
-
Git 索引格式
- gitformat-pack[5]
-
Git 打包格式
- gitformat-signature[5]
-
Git 加密签名格式
- gitprotocol-capabilities[5]
-
协议 v0 和 v1 功能
- gitprotocol-common[5]
-
各种协议的共同之处
- gitprotocol-http[5]
-
基于 Git HTTP 的协议
- gitprotocol-pack[5]
-
包如何在线传输
- gitprotocol-v2[5]
-
Git 线协议,版本 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>
-
指示一个提交对象名称。
- <tree-ish>
-
指示一个树、提交或标签对象名称。接受 <tree-ish> 参数的命令最终希望对 <tree> 对象进行操作,但会自动解引用指向 <tree> 的 <commit> 和 <tag> 对象。
- <commit-ish>
-
指示一个提交或标签对象名称。接受 <commit-ish> 参数的命令最终希望对 <commit> 对象进行操作,但会自动解引用指向 <commit> 的 <tag> 对象。
- <type>
-
指示需要一个对象类型。当前选项包括:
blob
、tree
、commit
或tag
。 - <file>
-
指示一个文件名 - 几乎总是相对于树结构
GIT_INDEX_FILE
描述的根目录。
符号标识符
文件/目录结构
请参阅 gitrepository-layout[5] 文档。
阅读 githooks[5] 以获取有关每个钩子的更多详细信息。
更高级别的 SCM 可能会在 $GIT_DIR
中提供和管理其他信息。
术语
请参阅 gitglossary[7]。
环境变量
各种 Git 命令会注意环境变量并更改其行为。标记为“Boolean”的环境变量采用与布尔值配置变量相同的方式取值,即“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 在查找仓库目录时应避免 chdir 进入的目录列表(对于排除加载缓慢的网络目录很有用)。它不会排除当前工作目录或在命令行或环境变量中设置的 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”。请参见 git-init[1] 中的
--ref-format
。
Git 提交
-
GIT_AUTHOR_NAME
-
在创建提交或标签对象,或写入 reflog 时,在作者身份中使用的可读名称。覆盖
user.name
和author.name
配置设置。 -
GIT_AUTHOR_EMAIL
-
在创建提交或标签对象,或写入 reflog 时,在作者身份中使用的电子邮件地址。覆盖
user.email
和author.email
配置设置。 -
GIT_AUTHOR_DATE
-
在创建提交或标签对象,或写入 reflog 时,用于作者身份的日期。有关有效格式,请参见 git-commit[1]。
-
GIT_COMMITTER_NAME
-
在创建提交或标签对象,或写入 reflog 时,在提交者身份中使用的可读名称。覆盖
user.name
和committer.name
配置设置。 -
GIT_COMMITTER_EMAIL
-
在创建提交或标签对象,或写入 reflog 时,在作者身份中使用的电子邮件地址。覆盖
user.email
和committer.email
配置设置。 -
GIT_COMMITTER_DATE
-
在创建提交或标签对象,或写入 reflog 时,用于提交者身份的日期。有关有效格式,请参见 git-commit[1]。
-
EMAIL
-
如果未设置其他相关的环境变量或配置设置,则在作者和提交者身份中使用的电子邮件地址。
Git 差异
-
GIT_DIFF_OPTS
-
唯一有效的设置是“--unified=??” 或 “-u??”,用于设置创建统一差异时显示的上下文行数。这优先于 Git diff 命令行上传递的任何 “-U” 或 “--unified” 选项值。
-
GIT_EXTERNAL_DIFF
-
当环境变量
GIT_EXTERNAL_DIFF
设置时,将调用由它命名的程序来生成差异,并且 Git 不使用其内置的差异机制。对于添加、删除或修改的路径,使用 7 个参数调用GIT_EXTERNAL_DIFF
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
退出时被删除。对于未合并的路径,会使用 1 个参数调用
GIT_EXTERNAL_DIFF
,即 <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 的计数器,每个路径递增 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
-
一个控制在显示可选进度指示器之前延迟多少秒的数字。 默认为 2。
-
GIT_EDITOR
-
此环境变量覆盖
$EDITOR
和$VISUAL
。 当以交互模式启动编辑器时,多个 Git 命令会使用它。 另请参阅 git-var[1] 和 git-config[1] 中的core.editor
选项。 -
GIT_SEQUENCE_EDITOR
-
此环境变量在编辑交互式 rebase 的待办事项列表时,会覆盖配置的 Git 编辑器。 另请参阅 git-rebase[1] 和 git-config[1] 中的
sequence.editor
选项。 -
GIT_SSH
-
GIT_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
-
设置将从中读取 gitattributes 的树对象。
-
GIT_ASKPASS
-
如果设置了此环境变量,则需要获取密码或密码短语(例如,用于 HTTP 或 IMAP 身份验证)的 Git 命令将使用适当的提示作为命令行参数调用此程序,并从其 STDOUT 读取密码。 另请参阅 git-config[1] 中的
core.askPass
选项。 -
GIT_TERMINAL_PROMPT
-
如果此布尔环境变量设置为 false,git 将不会在终端上提示(例如,在请求 HTTP 身份验证时)。
-
GIT_CONFIG_GLOBAL
-
GIT_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 以暂时避免使用有 bug 的/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
-
启用对任何包的所有访问的跟踪消息。 对于每次访问,都会记录包文件名和包中的偏移量。 这可能有助于解决一些与包相关的性能问题。 有关可用的跟踪输出选项,请参阅
GIT_TRACE
。 -
GIT_TRACE_PACKET
-
启用给定程序进出所有数据包的跟踪消息。 这有助于调试对象协商或其他协议问题。 跟踪在以 "PACK" 开头的数据包处关闭(但请参阅下面的
GIT_TRACE_PACKFILE
)。 有关可用的跟踪输出选项,请参阅GIT_TRACE
。 -
GIT_TRACE_PACKFILE
-
启用对给定程序发送或接收的包文件的跟踪。 与其他跟踪输出不同,此跟踪是逐字的:没有标头,也没有对二进制数据进行引用。 你几乎肯定希望将其定向到文件中(例如,
GIT_TRACE_PACKFILE=/tmp/my.pack
),而不是在终端上显示它或将其与其他跟踪输出混合。请注意,目前这仅针对克隆和抓取的客户端实现。
-
GIT_TRACE_PERFORMANCE
-
启用与性能相关的跟踪消息,例如每个 Git 命令的总执行时间。 有关可用的跟踪输出选项,请参阅
GIT_TRACE
。 -
GIT_TRACE_REFS
-
启用对 ref 数据库的操作的跟踪消息。 有关可用的跟踪输出选项,请参阅
GIT_TRACE
。 -
GIT_TRACE_SETUP
-
启用跟踪消息,打印 Git 完成其设置阶段后的 .git、工作树和当前工作目录。 有关可用的跟踪输出选项,请参阅
GIT_TRACE
。 -
GIT_TRACE_SHALLOW
-
启用可以帮助调试浅层存储库的抓取/克隆的跟踪消息。 有关可用的跟踪输出选项,请参阅
GIT_TRACE
。 -
GIT_TRACE_CURL
-
启用 git 传输协议的所有传入和传出数据的 curl 完整跟踪转储,包括描述性信息。 这类似于在命令行上执行 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 将所有 pathspecs 视为字面量,而不是作为 glob 模式。例如,运行
GIT_LITERAL_PATHSPECS=1 git log -- '*.c'
将搜索触及路径*.c
的提交,而不是 glob*.c
匹配的任何路径。如果您正在向 Git 提供字面路径(例如,先前由git ls-tree
、--raw
diff 输出等提供给您的路径),您可能需要这样做。 -
GIT_GLOB_PATHSPECS
-
将此布尔环境变量设置为 true 将导致 Git 将所有 pathspecs 视为 glob 模式(又名 "glob" 魔术)。
-
GIT_NOGLOB_PATHSPECS
-
将此布尔环境变量设置为 true 将导致 Git 将所有 pathspecs 视为字面量(又名 "literal" 魔术)。
-
GIT_ICASE_PATHSPECS
-
将此布尔环境变量设置为 true 将导致 Git 将所有 pathspecs 视为不区分大小写。
-
GIT_NO_LAZY_FETCH
-
将此布尔环境变量设置为 true 告诉 Git 不要按需从 promisor 远程延迟获取丢失的对象。
-
GIT_REFLOG_ACTION
-
当 ref 被更新时,reflog 条目会被创建,以跟踪 ref 被更新的原因(通常是更新 ref 的高级命令的名称),以及 ref 的旧值和新值。脚本化的 Porcelain 命令可以使用
git-sh-setup
中的 set_reflog_action 辅助函数将其名称设置为此变量,当它被最终用户作为顶级命令调用时,该名称将被记录在 reflog 的正文中。 -
GIT_REF_PARANOIA
-
如果此布尔环境变量设置为 false,则在迭代 ref 列表时忽略损坏的或命名不当的 ref。通常,Git 会尝试包含任何此类 ref,这可能导致某些操作失败。这通常是首选的,因为潜在的破坏性操作(例如,git-prune[1])最好中止,而不是忽略损坏的 ref(因此认为它们指向的历史不值得保存)。默认值为
1
(即,对检测和中止所有操作保持偏执)。您通常不需要将其设置为0
,但在尝试从损坏的存储库中挽救数据时,它可能很有用。 -
GIT_COMMIT_GRAPH_PARANOIA
-
从 commit-graph 加载提交对象时,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 服务器可能需要配置为允许客户端传递此变量(例如,通过将AcceptEnv GIT_PROTOCOL
与 OpenSSH 一起使用)。此配置是可选的。如果变量未传播,则客户端将回退到原始的“v0”协议(但可能会错过一些性能改进或功能)。此变量目前仅影响克隆和获取;它尚未用于推送(但将来可能会使用)。
-
GIT_OPTIONAL_LOCKS
-
如果此布尔环境变量设置为 false,Git 将完成任何请求的操作,而不执行任何需要获取锁的可选子操作。例如,这将阻止
git status
刷新索引作为副作用。这对于在后台运行的进程非常有用,这些进程不希望与其他存储库操作发生锁争用。默认为1
。 -
GIT_REDIRECT_STDIN
-
GIT_REDIRECT_STDOUT
-
GIT_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 消息。这些消息旨在为人类用户提供提示,这些提示可能有助于他们摆脱问题情况或利用新功能。用户可以使用advice.*
配置键禁用单个消息。这些消息可能会中断执行 Git 进程的工具,因此可以使用此变量来禁用消息。(--no-advice
全局选项也可用,但旧的 Git 版本在不理解此选项时可能会失败。Git 版本将忽略不理解它的环境变量。)
讨论
有关以下内容的更多详细信息,请参见用户手册的 Git 概念章节和gitcore-tutorial[7]。
一个 Git 项目通常包含一个工作目录,在顶层有一个 ".git" 子目录。 .git 目录包含压缩的对象数据库(代表项目的完整历史记录)、将该历史记录链接到工作树当前内容的 "index" 文件以及指向该历史记录的命名指针(例如标签和分支头)。
对象数据库包含三种主要类型的对象:blobs,用于保存文件数据;trees,指向 blobs 和其他 trees 以构建目录层次结构;以及 commits,每个 commits 引用一个 tree 和一些父 commits。
commit,相当于其他系统称之为“变更集”或“版本”,代表项目历史中的一个步骤,每个父级代表一个紧接在前的步骤。具有多个父级的 commits 代表独立开发线的合并。
所有对象都通过其内容的 SHA-1 哈希值命名,通常写成 40 个十六进制数字的字符串。这种名称是全局唯一的。只需签名该 commit,就可以保证通向 commit 的整个历史记录。第四种对象类型 tag,用于此目的。
首次创建时,对象存储在单独的文件中,但为了提高效率,稍后可能会压缩到“pack 文件”中。
名为 refs 的命名指针标记了历史记录中感兴趣的点。 ref 可能包含对象的 SHA-1 名称或另一个 ref 的名称(后者称为“符号 ref”)。以 refs/head/
开头的 refs 包含正在开发的分支的最新 commit(或“head”)的 SHA-1 名称。感兴趣的标签的 SHA-1 名称存储在 refs/tags/
下。名为 HEAD
的符号 ref 包含当前检出的分支的名称。
索引文件使用所有路径的列表进行初始化,对于每个路径,还包括一个 blob 对象和一组属性。 blob 对象代表当前分支头部的文件内容。这些属性(上次修改时间、大小等)取自工作树中相应的文件。可以通过比较这些属性来找到工作树的后续更改。可以使用新内容更新索引,并且可以从存储在索引中的内容创建新的 commits。
索引还能够为给定的路径名存储多个条目(称为“阶段”)。当合并正在进行时,这些阶段用于保存文件的各种未合并版本。
安全性
某些配置选项和 hook 文件可能会导致 Git 运行任意 shell 命令。由于配置和 hooks 不使用 git clone
复制,因此克隆具有不受信任内容的远程存储库、使用 git log
检查它们等通常是安全的。
但是,当 .git
目录(或围绕它的工作树)本身来自不受信任的源时,在 .git
目录(或围绕它的工作树)中运行 Git 命令是不安全的。其配置和 hooks 中的命令以通常的方式执行。
默认情况下,当存储库由运行命令的用户以外的其他人拥有时,Git 将拒绝运行。请参阅 git-config[1] 中 safe.directory
的条目。虽然这可以帮助您在多用户环境中进行保护,但请注意,您也可以获取由您拥有的不受信任的存储库(例如,如果您从不受信任的源中提取 zip 文件或 tarball)。在这种情况下,您需要首先“清理”不受信任的存储库。
如果你有一个不受信任的 .git
目录,你应该首先使用 git clone --no-local
命令克隆它,以获得一个干净的副本。Git 确实限制了 upload-pack
将运行的选项和钩子的集合,upload-pack
处理克隆或拉取的服务器端,但要注意攻击 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] 的输出可以向您显示项目特定部分的作者。
报告错误
将错误报告给 Git 邮件列表 <git@vger.kernel.org>,该邮件列表是开发和维护的主要场所。 您无需订阅该列表即可在那里发送消息。 请在 https://lore.kernel.org/git 上的列表存档中查看以前的错误报告和其他讨论。
与安全相关的问题应私下披露给 Git 安全邮件列表 <git-security@googlegroups.com>。
GIT
属于 git[1] 套件的一部分