Git 中文参考(一)(3)

简介: Git 中文参考(一)

Git 中文参考(一)(2)https://developer.aliyun.com/article/1565871


讨论

有关以下内容的更多详细信息,请参见用户手册和 gitcore-tutorial [7] 的 Git 概念章节。

Git 项目通常包含一个工作目录,顶层有一个“.git”子目录。 .git 目录包含一个表示项目完整历史记录的压缩对象数据库,一个将该历史记录链接到工作树的当前内容的“索引”文件,以及指向该历史记录的指针,如标记和分公司负责人

对象数据库包含三种主要类型的对象:blob,用于保存文件数据;树,指向 blob 和其他树来构建目录层次结构;和提交,每个引用一个树和一些父提交。

相当于其他系统称为“变更集”或“版本”的提交代表项目历史中的一个步骤,每个父项代表紧接在前的步骤。具有多个父项的提交代表独立开发线的合并。

所有对象都由其内容的 SHA-1 哈希命名,通常写为 40 个十六进制数字的字符串。这些名称是全球唯一的。通过签署该提交,可以保证导致提交的整个历史记录。为此目的提供第四对象类型,标签。

首次创建时,对象存储在单个文件中,但为了提高效率,以后可以将它们一起压缩为“包文件”。

名为 refs 的命名指针标记历史中的有趣点。 ref 可以包含对象的 SHA-1 名称或另一个 ref 的名称。名称以ref/head/开头的引用包含正在开发的分支的最新提交(或“头部”)的 SHA-1 名称。感兴趣的标签的 SHA-1 名称存储在ref/tags/下。名为HEAD的特殊引用包含当前签出分支的名称。

索引文件使用所有路径的列表进行初始化,并为每个路径初始化 blob 对象和一组属性。 blob  对象表示当前分支头部的文件内容。属性(上次修改时间,大小等)取自工作树中的相应文件。通过比较这些属性可以找到对工作树的后续更改。可以用新内容更新索引,并且可以从存储在索引中的内容创建新提交。

索引还能够存储给定路径名的多个条目(称为“阶段”)。这些阶段用于在合并进行时保存文件的各种未合并版本。

进一步的文件

请参阅“说明”部分中的参考资料以开始使用 Git。以下可能是首次使用者所需的详细信息。

用户手册和 gitcore-tutorial [7] 的 Git 概念章节都提供了对底层 Git 架构的介绍。

有关推荐工作流程的概述,请参见 gitworkflows [7]

有关一些有用的示例,另请参见 howto 文档。

内部结构记录在 Git API 文档中。

从 CVS 迁移的用户可能还想阅读 gitcvs-migration [7]

作者

Git 由 Linus Torvalds 创办,目前由 Junio C Hamano 维护。许多贡献来自 Git 邮件列表< git@vger.kernel.org >。 www.openhub.net/p/git/contributors/summary 为您提供了更完整的贡献者列表。

如果你自己克隆了 git.git,那么 git-shortlog [1]git-blame [1] 的输出可以向你展示项目特定部分的作者。

报告错误

将错误报告给 Git 邮件列表< git@vger.kernel.org >主要完成开发和维护的地方。您无需订阅列表即可在其中发送消息。有关以前的错误报告和其他讨论,请参阅 public-inbox.org/git 的列表存档。

与安全相关的问题应私下披露给 Git Security 邮件列表< git-security@googlegroups.com >。

也可以看看

gittutorial [7]gittutorial-2 [7]giteveryday [7]gitcvs-migration [7]gitglossary [7]gitcore-tutorial [7]gitcli [7] , Git 用户手册, gitworkflows [7 ]

GIT

部分 git [1] 套件

git-config

原文: git-scm.com/docs/git-config

贡献者:honglyua

名称

git-config - 获取并设置存储库或全局选项

概要

git config [<file-option>] [--type=<type>] [--show-origin] [-z|--null] name [value [value_regex]]
git config [<file-option>] [--type=<type>] --add name value
git config [<file-option>] [--type=<type>] --replace-all name value [value_regex]
git config [<file-option>] [--type=<type>] [--show-origin] [-z|--null] --get name [value_regex]
git config [<file-option>] [--type=<type>] [--show-origin] [-z|--null] --get-all name [value_regex]
git config [<file-option>] [--type=<type>] [--show-origin] [-z|--null] [--name-only] --get-regexp name_regex [value_regex]
git config [<file-option>] [--type=<type>] [-z|--null] --get-urlmatch name URL
git config [<file-option>] --unset name [value_regex]
git config [<file-option>] --unset-all name [value_regex]
git config [<file-option>] --rename-section old_name new_name
git config [<file-option>] --remove-section name
git config [<file-option>] [--show-origin] [-z|--null] [--name-only] -l | --list
git config [<file-option>] --get-color name [default]
git config [<file-option>] --get-colorbool name [stdout-is-tty]
git config [<file-option>] -e | --edit

描述

您可以使用此命令查询/设置/替换/取消设置选项。该名称实际上是由一个点分隔的配置项名和键名组成,即name 相当于.,执行git config .后,该配置项设置的值将被输出。

可以使用--add为某个配置项添加多个值。如果要更新或取消某个配置项,而这个配置项存在多个值时,你需要给出值后缀的正则表达式value_regex。它只更新或取消与正则表达式匹配的设置值。如果你想处理那些与正则表达式不匹配的设置行,只需在前面添加一个感叹号(另见示例)。

--type=选项是为了保证以给定的 type 去规范化输入和输出 git config 中配置项的值。如果没有给出--type=,则不执行规范化。调用者可以使用--no-type取消设置里已有的--type说明符。

读取时,默认情况下会从系统,全局和存储库本地配置文件中读取值,并且可以使用选项--system--global--local--worktree--file 来告诉命令读取哪里的配置文件(参见 FILES )。

写入时,默认情况下会将新值写入存储库本地配置文件,并且可以使用选项--system--global--worktree--file 来告诉命令写入该位置(可以使用--local但这是默认选项)。

出错时,此命令将失败,并以非零状态码退出。一些退出状态码有:

  • 部分或键无效(ret = 1),
  • 没有提供配置选项或名称(ret = 2),
  • 配置文件无效(ret = 3),
  • 配置文件无法写入(ret = 4),
  • 你试图取消一个不存在的选项(ret = 5),
  • 您在尝试取消设置/设置配置选项时,该配置项拥有多行配置(ret = 5),或
  • 您在尝试使用无效的正则表达式(ret = 6)。

成功时,该命令返回退出状态码 0。

选项

--replace-all 

默认行为是最多替换一行。它将会替换与键匹配的所有行(以及有可选的 value_regex)。

--add 

在不更改任何现有值的情况下向选项添加新行。这与在--replace-all中以 ^ $ 作为 value_regex 的值相同。

--get 

获取给定键的值(可选择通过与值匹配的正则表达式进行过滤)。如果未找到对应键值,则返回错误状态码 1;如果找到多个键值对,则返回最后一个值。

--get-all 

与 get 类似,但返回所有键值对的值。

--get-regexp 

与–get-all 类似,输出所有与正则表达式匹配的键值对,并输出键名和对应值。正则表达式匹配目前区分大小写,并且针对键的规范化版本完成,其中段和变量名称是小写的,但子段名称不是。

--get-urlmatch name URL 

如果给出了一个由两部分组成的配置项名称 section.key,则返回与最匹配的值(如果不存在此配置名,则 section.key 的值用作回退)。如果仅将输入 section,则返回所有与 section 匹配的键值对。如果未找到值,则返回错误代码 1。

--global 

对于写入选项:写入全局配置文件~/.gitconfig,而不是存储库配置文件.git/config。如果全局配置文件不存在而$XDG_CONFIG_HOME/git/config文件存在,则写入$XDG_CONFIG_HOME/git/config文件。

对于读取选项:只读取~/.gitconfig$XDG_CONFIG_HOME/git/config文件中的配置,而不是所有可用文件中的。

另见 FILES 。

--system 

对于写入选项:写入系统路径下的配置文件$(prefix)/etc/gitconfig,而不是存储库配置文件.git/config

对于读取选项:只读取系统路径下的配置文件$(prefix)/etc/gitconfig中的配置,而不是所有可用文件中的。

另见 FILES 。

--local 

对于写入选项:写入存储库配置文件.git/config中。这是默认行为。

对于读取选项:只读取存储库配置文件.git/config中的配置,而不是所有可用文件中的。

另见 FILES 。

--worktree 

--local类似,但如果extensions.worktreeConfig存在,则读取或写入.git/config.worktree中。如果不存在,它与--local效果相同。

-f config-file 
--file config-file 

使用给定的配置文件,而不是 GIT_CONFIG 指定的配置文件。

--blob blob 

--file类似,但给定是 blob 路径而不是文件路径。例如。您可以使用 master:.gitmodules,从 master 分支中的文件.gitmodules中读取配置值。有关拼写 blob 名称的更完整列表,请参阅 gitrevisions [7] 中的“指定修订”部分。

--remove-section 

从配置文件中删除给定的配置项。

--rename-section 

将给定 section 重命名为新名称。

--unset 

从配置文件中删除与键匹配的行。

--unset-all 

从配置文件中删除与键匹配的所有行。

-l
--list 

列出配置文件中设置的所有配置项及其值。

--type <type> 

git config 在给定的类型约束下,将确保任何输入或输出有效,并将以的规范形式规范化输出值。

有效包括:

  • bool :将值规范化为“true”或“false”。
  • int :将值规范化为简单的十进制数。 kmg 的可选后缀将使该值在输入时乘以 1024,1048576 或 1073741824。
  • bool-or-int :根据 boolint 进行标准化,如上所述。
  • path :通过以规范化的形式,在值前添加前缀~来指向用户的根目录$HOME~user。设置值时,此说明符无效(但您可以使用命令行中的git config section.variable ~/让 shell 执行扩展。)
  • expiry-date:通过以规范化的形式,将固定或相对固定的日期字符串转换为时间戳。设置值时,此说明符无效。
  • color :获取值时,通过转换为 ANSI 颜色转义序列进行规范化。设置值时,将执行完整性检查以确保给定值可以作为 ANSI 颜色进行规范化,但它按原样编写。
--bool
--int 
--bool-or-int 
--path 
--expiry-date 

选择类型说明符的历史选项。而不是--type(见上文)。

--no-type 

取消设置先前设置的类型说明符(如果先前已设置)。此选项请求 git config 不规范化检索到的变量。没有--type=----no-type也不会受影响。

-z 
--null 

对于输出值或键名时,始终使用空字符(而不是换行符)作为结束字符串。使用换行符作为键和值之间的分隔符。这允许准确地解析输出而不会混淆,例如包含换行符的值。

--name-only 

仅输出--list--get-regexp的配置变量名称。

--show-origin 

增加输出内容:origin 的类型(文件,标准输入,blob,命令行)和 origin 的指向(配置文件路径,ref 或 blob id,如果适用)

--get-colorbool name [stdout-is-tty] 

找到name的颜色设置(例如color.diff)并输出“true”或“false”。 stdout-is-tty可以为“true”或“false”,并在配置显示为“auto”时予以考虑。如果缺少stdout-is-tty,则检查命令本身的标准输出,如果要使用颜色则退出状态 0,否则退出状态 1。当name的颜色未设置时,该命令使用color.ui作为后备。

--get-color name [default] 

找到为name配置的颜色(例如color.diff.new)并将其作为 ANSI 颜色转义序列输出到标准输出。如果没有name未配置颜色,则会使用可选的default参数。

--type=color [--default=]优于--get-color

-e 
--edit 

打开编辑器,修改指定的配置文件; --system--global或存储库(默认)。

--[no-]includes 

在配置文件中查找值时,会考虑使用include.*指令。如果给出特定文件(例如,使用--file--global等),则功能默认是off。如果在搜索所有配置文件时,功能是on

--default <value> 

使用--get时,找不到请求的变量时,其行为就像是赋给该变量的值。

配置

当使用--list或可能有多个返回结果的--get-*时,会遵守pager.config列出配置。默认是使用分页的。

文件

如果未使用--file选项,则git config会从以下四个配置文件中,搜索配置选项:

$(prefix)/etc/gitconfig 

系统范围的配置文件。

$XDG_CONFIG_HOME/git/config 

特定用户的第二个配置文件。如果$XDG_CONFIG_HOME未设置或为空,将使用$HOME/.config/git/config。此文件中设置的任何单值变量都将被~/.gitconfig中的任何内容覆盖。如果您有时使用旧版本的 Git,最好不要创建此文件,因为最近添加了对此文件的支持。

~/.gitconfig 

特定用户的配置文件。也称为“全局”配置文件。

$GIT_DIR/config 

特定存储库的配置文件。

$GIT_DIR/config.worktree 

这是可选的,仅在$GIT_DIR/config中存在extensions.worktreeConfig时才会被搜索到。

如果没有给出进一步的选项,在读取所有配置选项时,将从以上所有可用的文件中读取。如果全局或系统范围的配置文件不可用,则它们将会被忽略。如果存储库配置文件不可用或不可读,git config将以非零错误状态退出。但是,在任何情况下都不会发出错误消息。

按上面给出的顺序读取配置文件中的配置,新读到的配置值将会覆盖之前读到的。当获取多个值时,将使用来自所有文件的键的所有值。

使用-c选项运行任何 git 命令时,可以覆盖单个配置参数。有关详细信息,请参阅 git[1]

所有配置选项写入时,都将默认写入到当前存储库的配置文件中。请注意,这也会影响--replace-all--unset等选项。 git config 一次只能更改一个配置文件中配置

您可以通过命令行选项或环境变量覆盖这些规则。 --global--system--worktree选项将分别限制用于全局,系统范围和每个工作树的配置文件。 GIT_CONFIG环境变量具有类似的效果,但您可以指定所需的任何文件名。

环境变量

GIT_CONFIG 

从给定文件而不是.git/config 中获取配置。使用“–global”选项将强制使用~/.gitconfig。使用“–system”选项强制使用$(前缀)/etc/gitconfig。

GIT_CONFIG_NOSYSTEM 

是否跳过从系统配置文件$(前缀)/etc/gitconfig 中读取设置。有关详细信息,请参阅git[1]

另见 FILES。

例子

给出像这样的.git / config:

#
# 给出像这样的, 
# '#' 或者 ';' 是表示注释
#
; core variables
[core]
  ; Don't trust file modes
  filemode = false
; Our diff algorithm
[diff]
  external = /usr/local/bin/diff-wrapper
  renames = true
; Proxy settings
[core]
  gitproxy=proxy-command for kernel.org
  gitproxy=default-proxy ; for all the rest
; HTTP
[http]
  sslVerify
[http "https://weak.example.com"]
  sslVerify = false
  cookieFile = /tmp/cookie.txt

你可以将 filemode 设置为 true

% git config core.filemode true

假设的代理命令条目实际上有一个后缀来识别它们适用的 URL。以下是如何将 kernel.org 的条目更改为“ssh”。

% git config core.gitproxy '"ssh" for kernel.org' 'for kernel.org$'

这确保仅替换 kernel.org 的键/值对。

要删除 diff 的重命名配置,请执行

% git config --unset diff.renames

如果要删除多个配置值中的其中一个配置(如上面的 core.gitproxy),则必须提供与该配置值匹配的正则表达式。

要查询给定键的值,请执行

% git config --get core.filemode

要么

% git config core.filemode

或者,查询多配置值中的某个配置值:

% git config --get core.gitproxy "for kernel.org$"

如果您想知道多配置值的所有值,请执行以下操作:

% git config --get-all core.gitproxy

如果你想冒点险,你可以用新的值取代所有的 core.gitproxy

% git config --replace-all core.gitproxy ssh

但是,如果您真的只想替换默认代理的行配置,即没有“for …”后缀的行,请执行以下操作:

% git config core.gitproxy ssh '! for '

要实际只匹配带有感叹号的值,您必须这样做

% git config section.key value '[!]'

要添加新代理,而不更改任何现有代理,请使用

% git config --add core.gitproxy '"proxy-command" for example.com'

在脚本中使用配置中的自定义颜色的示例:

#!/bin/sh
WS=$(git config --get-color color.diff.whitespace "blue reverse")
RESET=$(git config --get-color "" "reset")
echo "${WS}your whitespace color or blue reverse${RESET}"

对于https://weak.example.com的 URL,http.sslVerify设置为 false,而其他所有 URL 设置为true

% git config --type=bool --get-urlmatch http.sslverify https://good.example.com
true
% git config --type=bool --get-urlmatch http.sslverify https://weak.example.com
false
% git config --get-urlmatch http https://weak.example.com
http.cookieFile /tmp/cookie.txt
http.sslverify false

配置文件

Git 配置文件包含许多影响 Git 命令行为的变量。每个存储库中的文件.git/config和可选config.worktree(参见下面的extensions.worktreeConfig)用于存储该存储库的配置,$HOME/.gitconfig用于存储每用户配置,会回退.git/config文件中的配置。文件/etc/gitconfig可用于存储系统范围的默认配置。

配置变量由 Git 管道和瓷器使用。变量拆分为 sections,其中变量名称是最后一个点分隔的后面段,而 section 名称是最后一个点之前的所有内容。变量名称不区分大小写,仅允许使用字母数字字符和-,并且必须以字母字符开头。一些变量可能会出现多次;我们说那个变量是多值的。

句法

语法相当灵活和宽容;空白大多被忽略了。 号和 ; 分号表示该字符开始到行尾都是注释,空行被忽略。

配置文件由 sections 和变量组成。一个 section 以方括号中的 section 名称开头,并一直持续到下一 section 开始。section 名称不区分大小写。只允许使用字母数字字符、-.。每个变量必须属于某个 section,这意味着在第一次设置变量之前必须有一个 section。

section 可以进一步划分为小的 section。要开始小的 section,请将其名称放在双引号中,并用空格与 section 隔开,如下例所示:

[section "subsection"]

子节名称区分大小写,可以包含除换行符和空字节之外的任何字符。可以通过\"\\转义,包含双引号和反斜杠。读取时会删除其他字符前面的反斜杠;例如,\t读取为t\0读取为0,section 不能跨越多行。变量可以直接属于某个 section 或给定的子 section。你可以有[section],但是可以不必有[section "subsection"]

还有一个不推荐使用的[section.subsection]语法。使用此语法,子 section 名称将转换为小写,并且还区分大小写。这些子 section 名称遵循与 section 名称相同的限制。

所有其他行(以及节标题后面的行的其余部分)被识别为设置变量,形式为 name = value(或者只是name,通过一个短划线用来说明变量是布尔值“true”)。变量名称不区分大小写,仅允许使用字母、数字字符和-,并且必须以字母开头。

定义值的行可以通过以\结束来继续到下一行;反引号和行尾被剥离。name = 之后的空格,第一个注释字符;之后的行的剩余部分,和该行尾部的空格都会被被丢弃,除非它们用双引号括起来。值中的内部空格逐字保留。

在双引号内,使用双引号"和反斜杠\字符必须转义:对"使用\",而对\使用\\

识别以下转义序列(在\"\\旁边):换行符(NL)的\n,水平制表的\t(HT,TAB)和退格(BS)的\b。其他 char 转义序列(包括八进制转义序列)无效。

包括

includeincludeIf部分允许您包含来自其他来源的配置指令。这些 section 的行为相同,但includeIf的 section 如果其条件未评估为真则可以忽略;请参阅下面的“条件包含”。

您可以通过设置include.path(或includeIf.*.path)的值为另一个配置文件的文件名,来包含这个配置文件的配置。该变量将路径名作为其值,并受波形扩展的影响。这些变量可以多次给出。

文件的内容会被立刻载入配,就好像它们已在 include 伪指令的位置找到一样。如果变量的值是相对路径,则该路径被认为是相对于包含 include 伪指令的配置文件路径。请参阅下面的示例。

有条件的包括

您可以通过将includeIf..path变量设置为要包含的文件的名称来有条件地包含另一个配置文件。

条件以关键字后跟冒号开头,一些数据的格式和含义取决于关键字。支持的关键字是:

gitdir 

关键字gitdir:后面的数据用作 glob 模式。如果.git 目录的位置与模式匹配,则满足包含条件。

.git 位置可以自动发现,也可以来自$GIT_DIR环境变量。如果通过.git 文件(例如,从子模块或链接的工作树)自动发现存储库,则.git 位置将是.git 目录所在的最终位置,而不是.git 文件所在的位置。

该模式可以包含标准的通配符和另外两个可以匹配多个路径组件的**//**。有关详细信息,请参阅 gitignore[5] 。为了方便:

  • 如果模式以~/开头,则~将替换为环境变量HOME的内容。
  • 如果模式以./开头,则将其替换为包含当前配置文件的目录。
  • 如果模式不以~/.//开始,则**/将自动添加前置。例如,模式foo/bar变为**/foo/bar并与/any/path/to/foo/bar匹配。
  • 如果模式以/结束,则会自动添加**。例如,模式foo/变为foo/**。换句话说,它以递归方式匹配“foo”和内部的所有内容。
gitdir/i 

这与gitdir相同,只是匹配是不区分大小写的(例如,在不区分大小写的文件系统上)

关于通过gitdirgitdir/i进行匹配的更多注意事项:

  • $GIT_DIR中的符号链接在匹配之前未解析。
  • 符号链接和路径的 realpath 版本将在$GIT_DIR之外匹配。例如,如果~/git/mnt/storage/git的符号链接,那么gitdir:~/gitgitdir:/mnt/storage/git都会匹配。
    在 v2.13.0 中此功能的初始版本中并非如此,该版本仅匹配 realpath 版本。想要与此功能的初始版本兼容的配置需要仅指定 realpath 版本或两个版本。
  • 请注意,“…/”并不特殊,并且会按字面意思匹配,这不太可能是您想要的。


Git 中文参考(一)(4)https://developer.aliyun.com/article/1565873

相关文章
|
24天前
|
监控 程序员 开发工具
如何规范Git提交-参考阿里云开发者社区
这篇文章分享了如何规范Git提交,介绍了commit message的格式规范,并通过webhook监控机制来确保代码提交的规范性,从而提高研发效率和代码维护质量。
|
2月前
|
存储 缓存 网络安全
Git 中文参考(一)(8)
Git 中文参考(一)
26 2
|
2月前
|
存储 网络安全 开发工具
Git 中文参考(一)(7)
Git 中文参考(一)
20 2
|
2月前
|
存储 算法 Java
Git 中文参考(一)(6)
Git 中文参考(一)
24 2
|
2月前
|
存储 Shell 开发工具
Git 中文参考(一)(5)
Git 中文参考(一)
19 2
|
2月前
|
存储 开发工具 git
Git 中文参考(一)(4)
Git 中文参考(一)
19 2
|
2月前
|
存储 Shell 开发工具
Git 中文参考(一)(2)
Git 中文参考(一)
17 2
|
2月前
|
存储 人工智能 开发工具
Git 中文参考(五)(9)
Git 中文参考(五)
125 2
|
2月前
|
存储 Linux 开发工具
Git 中文参考(五)(8)
Git 中文参考(五)
15 2
|
2月前
|
存储 Shell 开发工具
Git 中文参考(五)(7)
Git 中文参考(五)
141 2