Git 中文参考(二)(1)

简介: Git 中文参考(二)

名称

git-help - 显示有关 Git 的帮助信息

概要

git help [-a|--all [--[no-]verbose]] [-g|--guide]
     [-i|--info|-m|--man|-w|--web] [COMMAND|GUIDE]

描述

如果没有选项,也没有给出 COMMAND 或 GUIDE,则 git 命令的概要和最常用的 Git 命令列表将打印在标准输出上。

如果给出选项--all-a,则所有可用命令都将打印在标准输出上。

如果给出选项--guide-g,则标准输出上也会打印有用的 Git 指南列表。

如果给出了命令或指南,则会显示该命令或指南的手册页。默认情况下, man 程序用于此目的,但这可以被其他选项或配置变量覆盖。

如果给出了别名,git 会在标准输出上显示别名的定义。要获取别名命令的手册页,请使用git COMMAND --help

请注意,git --help ...git help ...相同,因为前者在内部转换为后者。

要显示 git [1] 手册页,请使用git help git

可以使用 git help helpgit help --help显示此页面

选项

-a 
--all 

在标准输出上打印所有可用命令。此选项会覆盖任何给定的命令或指南名称。

--verbose 

--all打印描述一起使用时,用于所有已识别的命令。这是默认值

-c 
--config 

列出所有可用的配置变量。这是 git-config [1] 中列表的简短摘要。

-g 
--guides 

在标准输出上打印有用指南列表。此选项会覆盖任何给定的命令或指南名称。

-i 
--info 

info 格式显示命令的手册页。 info 程序将用于此目的。

-m 
--man 

man 格式显示命令的手册页。此选项可用于覆盖help.format配置变量中设置的值。

默认情况下, man 程序将用于显示手册页,但man.viewer配置变量可用于选择其他显示程序(见下文)。

-w 
--web 

Web (HTML)格式显示命令的手册页。 Web 浏览器将用于此目的。

如果未设置前者,可以使用配置变量help.browserweb.browser指定 Web 浏览器。如果没有设置这些配置变量, git web{litdd}browse 帮助程序脚本(由 git help 调用)将选择合适的默认值。有关详细信息,请参阅 git-web {litdd}浏览[1]

配置变量

help.format

如果未传递命令行选项,则将检查help.format配置变量。此变量支持以下值;他们使 git help 的行为与其对应的命令行选项相同:

  • “man”对应于 -m | --man
  • “info”对应 -i | --info
  • “web”或“html”对应于 -w | --web

help.browser,web.browser 和 browser..path

如果选择 web 格式(通过命令行选项或配置变量),也将检查help.browserweb.browserbrowser.<tool>.path。参见上面 OPTIONS 部分的 -w | --webgit-web {litdd}浏览[1]

man.viewer

如果选择 man 格式,将检查man.viewer配置变量。目前支持以下值:

  • “man”:像往常一样使用 man 程序,
  • “woman”:使用 emacsclient 在 emacs 中启动“woman”模式(这只适用于 emacsclient 版本 22),
  • “konqueror”:使用 kfmclient 在新的 konqueror 标签中打开手册页(参见下面的 _ 关于 konqueror_ 的注释)。

如果存在相应的man..cmd配置条目(参见下文),则可以使用其他工具的值。

可以为man.viewer配置变量赋予多个值。将按配置文件中列出的顺序尝试相应的程序。

例如,这个配置:

[man]
    viewer = konqueror
    viewer = woman

将首先尝试使用 konqueror。但这可能会失败(例如,如果没有设置 DISPLAY),那么将尝试 emacs 的 woman 模式。

如果一切都失败,或者没有配置查看器,将尝试在GIT_MAN_VIEWER环境变量中指定的查看器。如果那也失败了,无论如何都会尝试 man 程序。

man..path

您可以通过设置配置变量man..path显式提供首选人员查看器的完整路径。例如,您可以通过设置 man.konqueror.path 来配置 konqueror 的绝对路径。否则, git help 假定该工具在 PATH 中可用。

man..cmd

man.viewer配置变量指定的 man 查看器不在支持的那个中时,将查找相应的man..cmd配置变量。如果此变量存在,则指定的工具将被视为自定义命令,并且将使用 shell eval 运行命令,并将手册页作为参数传递。

关于 konqueror 的注意事项

当在man.viewer配置变量中指定 konqueror 时,我们启动 kfmclient 以尝试在新选项卡中打开已打开的 konqueror 的手册页(如果可能)。

为了保持一致性,如果将 man.konqueror.path 设置为 A_PATH_TO/konqueror,我们也会尝试这样的技巧。这意味着我们将尝试启动 A_PATH_TO/kfmclient

如果你真的想使用 konqueror ,那么你可以使用如下内容:

[man]
    viewer = konq
  [man "konq"]
    cmd = A_PATH_TO/konqueror

关于 git config --global 的注意事项

请注意,可能应使用--global标志设置所有这些配置变量,例如:

$ git config --global help.format web
$ git config --global web.browser firefox

因为它们可能比特定于存储库更具用户特性。有关此内容的详细信息,请参阅 git-config [1]

GIT

部分 git [1] 套件

git-init

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

贡献者:honglyua

名称

git-init - 创建一个空的 Git 存储库或重新初始化现有存储库

概要

git init [-q | --quiet] [--bare] [--template=<template_directory>]
    [--separate-git-dir <git dir>]
    [--shared[=<permissions>]] [directory]

描述

此命令创建一个空的 Git 存储库 - 基本上是一个.git目录,其中包含objectsrefs/headsrefs/tags和模板文件的子目录。还创建了引用主分支 HEAD 的初始HEAD文件。

如果设置了$GIT_DIR环境变量,则它指定要使用的路径而不是./.git作为存储库的基础。

如果通过$GIT_OBJECT_DIRECTORY环境变量指定了对象存储目录,则在下面创建 sha1 目录 - 否则使用默认的$GIT_DIR/objects目录。

在现有存储库中运行 git init 是安全的。它不会覆盖已存在的东西。重新运行 git init 的主要原因是获取新添加的模板(或者如果给出了–separate-git-dir,则将存储库移动到另一个地方)。

选项

-q 
--quiet 

仅打印错误和警告消息;所有其他输出都将被抑制。

--bare 

创建一个裸存储库。如果未设置GIT_DIR环境,则将其设置为当前工作目录。

--template=<template_directory> 

指定将使用模板的目录。 (参见下面的“模板目录”部分。)

--separate-git-dir=<git dir> 

不是将存储库初始化为$GIT_DIR./.git/的目录,而是在其中创建包含实际存储库路径的文本文件。此文件充当与文件系统无关的 Git 符号链接到存储库。

如果这是重新初始化,则存储库将移动到指定的路径。

--shared[=(false|true|umask|group|all|world|everybody|0xxx)] 

指定要在多个用户之间共享 Git 存储库。这允许属于同一组的用户进入该存储库。指定时,将设置配置变量“core.sharedRepository”,以便使用请求的权限创建$GIT_DIR下的文件和目录。未指定时,Git 将使用 umask(2)报告的权限。

该选项可以具有以下值,如果没有给出值,则默认为 group

umask (or false) 

使用 umask(2)报告的权限。未指定--shared时,使用默认值。

group (or true) 

使存储库可写,(和 g + sx,因为 git group 可能不是所有用户的主要组)。这用于放宽其他安全的 umask(2)值的权限。请注意,umask 仍然适用于其他权限位(例如,如果 umask 是 0022 ,则使用 group 将不会删除其他(非组)用户的读取权限)。有关如何准确指定存储库权限的信息,请参见 0xxx

all (or world or everybody) 

group 相同,但使所有用户都可以读取存储库。

0xxx 

0xxx 是一个八进制数,每个文件都有模式 0xxx0xxx 将覆盖用户的 umask(2)值(并且不仅松开 groupall 的权限)。 0640 将创建一个可读取组的存储库,但不能写入组或其他人可访问的存储库。 0660 将创建一个对当前用户和组可读写的 repo,但其他人无法访问。

默认情况下,配置标志receive.denyNonFastForwards在共享存储库中启用,因此您无法强制执行非快进推送。

如果您提供 _ 目录 _,则命令在其中运行。如果此目录不存在,则将创建该目录。

模板目录

模板目录中名称不以点开头的文件和目录将在创建后复制到$GIT_DIR

模板目录将是以下之一(按顺序):

  • 使用--template选项给出的参数;
  • $GIT_TEMPLATE_DIR环境变量的内容;
  • init.templateDir配置变量;要么
  • 默认模板目录:/usr/share/git-core/templates

默认模板目录包括一些目录结构,建议“排除模式”(参见 gitignore [5] )和示例钩子文件。

默认情况下,示例钩子均已禁用。要启用其中一个示例钩子,请通过删除其.sample后缀来重命名它。

有关钩子执行的更多常规信息,请参见 githooks [5]

例子

基于存量代码,初始化一个新 git 库
$ cd /path/to/my/codebase
$ git init      (1)
$ git add .     (2)
$ git commit    (3)
  1. 创建一个/path/to/my/codebase/.git 目录。
  2. 将所有现有文件添加到索引中。
  3. 将原始状态记录为历史记录中的第一个提交。

GIT

部分 git [1] 套件

git-clone

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

贡献者:honglyua

名称

git-clone - 将存储库克隆到新目录中

概要

git clone [--template=<template_directory>]
    [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
    [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
    [--dissociate] [--separate-git-dir <git dir>]
    [--depth <depth>] [--[no-]single-branch] [--no-tags]
    [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
    [--jobs <n>] [--] <repository> [<directory>]

描述

将存储库克隆到新创建的目录中,为克隆存储库中的每个分支创建远程跟踪分支(使用git branch -r可见),并创建并检出从克隆存储库的当前活动分支的初始分支。

在克隆之后,没有参数的普通git fetch将更新所有远程跟踪分支,并且没有参数的git pull将另外将远程主分支合并到当前主分支中(如果有"–single-branch“的话,见下文)。

通过在refs/remotes/origin下创建对远程分支头的引用并初始化remote.origin.urlremote.origin.fetch配置变量来实现此默认配置。

选项

--local 
-l 

当要克隆的存储库位于本地计算机上时,此标志会绕过正常的“Git 感知”传输机制,并通过制作 HEAD 以及对象和 refs 目录下的所有内容的副本来克隆存储库。 .git/objects/目录下的文件是硬链接的,以便在可能的情况下节省空间。

如果将存储库指定为本地路径(例如,/path/to/repo),则这是默认值,而–local 本质上是无操作。如果将存储库指定为 URL,则忽略此标志(并且我们从不使用本地优化)。当给出/path/to/repo时,指定--no-local将覆盖默认值,而是使用常规 Git 传输。

--no-hardlinks 

从本地文件系统上的存储库强制克隆进程,以复制.git/objects目录下的文件,而不是使用硬链接。如果您尝试备份存储库,则可能需要这样做。

--shared 
-s 

当要克隆的存储库位于本地计算机上而不是使用硬链接时,会自动设置.git/objects/info/alternates以与源存储库共享对象。生成的存储库在没有任何自己的对象的情况下开始。

:这可能是危险的操作;不要使用它,除非你明白它的作用。如果使用此选项克隆存储库,然后在源存储库中删除分支(或使用任何其他提交未引用的 Git 命令),则某些对象可能会变为未引用(或悬空)。这些对象可以通过自动调用git gc --auto的普通 Git 操作(例如git commit)删除。 (参见 git-gc [1] 。)如果这些对象被删除并被克隆的存储库引用,那么克隆的存储库将会损坏。

请注意,在使用-s克隆的存储库中运行没有-l选项的git repack会将源存储库中的对象复制到克隆存储库中的包中,从而节省clone -s的磁盘空间节省。但是,运行git gc是安全的,它默认使用-l选项。

如果要在其源存储库中中断使用-s克隆的存储库的依赖关系,只需运行git repack -a即可将源存储库中的所有对象复制到克隆存储库中的包中。

--reference[-if-able] <repository> 

如果引用存储库位于本地计算机上,则自动设置.git/objects/info/alternates以从引用存储库获取对象。使用现有存储库作为备用存储库,将需要从克隆的存储库中复制更少的对象,从而降低网络和本地存储成本。使用--reference-if-able时,将跳过不存在的目录,并显示警告而不是中止克隆。

:参见--shared选项的注释,以及--dissociate选项。

--dissociate 

借用--reference选项指定的引用存储库中的对象,仅减少网络传输,并在通过制作必要的借用对象本地副本进行克隆后停止从它们借用。当已经从另一个存储库借用对象的存储库本地克隆时,也可以使用此选项 - 新存储库将从同一存储库中借用对象,并且此选项可用于停止借用。

--quiet 
-q 

安静地操作。未向标准错误流报告进度。

--verbose 
-v 

详细地运行。不影响将进度状态报告给标准错误流。

--progress 

除非指定了-q,否则在将标准错误流附加到终端时,默认情况下会报告进度状态。即使标准错误流未定向到终端,此标志也会强制进度状态。

--no-checkout 
-n 

克隆完成后不会检查 HEAD。

--bare 

制作一个 bare Git 存储库。也就是说,不是创建并将管理文件放在/.git中,而是将本身设为$GIT_DIR。这显然意味着-n,因为无处可查看工作树。此外,远端上的分支头直接复制到相应的本地分支头,而不将它们映射到refs/remotes/origin/。使用此选项时,既不会创建远程跟踪分支,也不会创建相关的配置变量。

--mirror 

设置源存储库的镜像。这类似--bare。与--bare相比,--mirror不仅将源的本地分支映射到目标的本地分支,它还映射所有引用(包括远程跟踪分支,注释等)并设置 refspec 配置,以便所有这些引用被目标存储库中的git remote update覆盖。

--origin <name> 
-o <name> 

不使用远程名称origin来跟踪上游存储库,而是使用

--branch <name> 
-b <name> 

而不是将新创建的 HEAD 指向克隆存储库的 HEAD 所指向的分支,而是指向分支。在非裸存储库中,这是将要检出的分支。 --branch还可以在生成的存储库中的获取 tags 和分离 HEAD。

--upload-pack <upload-pack> 
-u <upload-pack> 

给定时,通过 ssh 访问要克隆的存储库,这将指定另一端运行的命令的非默认路径。

--template=<template_directory> 

指定将使用模板的目录; (参见 git-init [1] 的“TEMPLATE DIRECTORY”部分。)

--config <key>=<value> 
-c <key>=<value> 

在新创建的存储库中设置配置变量;这在初始化存储库之后,但在获取远程历史记录或检出任何文件之前立即生效。key 的格式与 git-config [1] (例如core.eol=true)的格式相同。如果为同一个键指定了多个值,则每个值都将写入配置文件。例如,这样就可以安全地向源远程添加额外的 fetch refspec。

由于当前实现的限制,一些配置变量在初始提取和检出之后才会生效。已知未生效的配置变量为:remote..mirrorremote..tagOpt。请改用相应的--mirror--no-tags选项。

--depth <depth> 

创建一个 _ 浅 _ 克隆,其历史记录被截断为指定的提交次数。除非--no-single-branch用于获取所有分支的提示附近的历史,否则意味着--single-branch。如果要浅层克隆子模块,也要传递--shallow-submodules

--shallow-since=<date> 

在指定时间后创建具有历史记录的浅层克隆。

--shallow-exclude=<revision> 

创建具有历史记录的浅层克隆,不包括可从指定的远程分支或标记访问的提交。可以多次指定此选项。

--[no-]single-branch 

仅克隆导致单个分支尖端的历史记录,由--branch选项指定或主分支远程的HEAD指向。进一步提取到生成的存储库只会更新分支的远程跟踪分支,此选项用于初始克隆。如果在进行--single-branch克隆时远程处的 HEAD 未指向任何分支,则不会创建远程跟踪分支。

--no-tags 

不要克隆任何标签,并在配置中设置remote..tagOpt=--no-tags,确保将来的git pullgit fetch操作不会跟随任何标签。后续显式标记提取仍然有效(参见 git-fetch [1] )。

可以与--single-branch一起使用来克隆和维护一个除了单个克隆分支之外没有引用的分支。这很有用,例如维护某些存储库的默认分支的最小克隆以进行搜索索引。

--recurse-submodules[=<pathspec] 

创建克隆后,根据提供的 pathspec 初始化和克隆子模块。如果未提供 pathspec,则初始化并克隆所有子模块。对于包含多个条目的 pathspec,可以多次给出此选项。生成的克隆将submodule.active设置为提供的 pathspec,或“.” (如果没有提供 pathspec,则表示所有子模块)。

子模块使用其默认设置进行初始化和克隆。这相当于克隆完成后立即运行git submodule update --init --recursive 。如果克隆的存储库没有工作树/检出(即,如果给出--no-checkout / -n--bare--mirror中的任何一个),则忽略此选项

--[no-]shallow-submodules 

克隆的所有子模块都是浅的,深度为 1。

--separate-git-dir=<git dir> 

不要将克隆的存储库放在应该位于的位置,而是将克隆的存储库放在指定的目录中,然后创建与文件系统无关的 Git 符号链接。结果是 Git 存储库可以与工作树分开。

-j <n> 
--jobs <n> 

同时获取的子模块数。默认为submodule.fetchJobs选项。

<repository> 

要从中克隆的(可能是远程的)存储库。有关指定存储库的更多信息,请参见下面的 GIT URL 部分。

<directory> 

要克隆到的新目录的名称。如果没有明确给出目录(/path/to/repo.git/path/to/repo.githost.xz:foo/.gitfoo),则使用源存储库的“人性化”部分。仅当目录为空时才允许克隆到现有目录中。

GIT 网址

通常,URL 包含有关传输协议,远程服务器的地址以及存储库路径的信息。根据传输协议,可能缺少某些信息。

Git 支持 ssh,git,http 和 https 协议(此外,ftp 和 ftps 可用于获取,但这是低效的并且已弃用;请勿使用它)。

本机传输(即 git:// URL)不进行身份验证,应在不安全的网络上谨慎使用。

可以使用以下语法:

  • SSH:// [用户@] host.xz [:端口] /path/to/repo.git/
  • GIT 中://host.xz [:端口] /path/to/repo.git/
  • HTTP [S]://host.xz [:端口] /path/to/repo.git/
  • FTP [S]://host.xz [:端口] /path/to/repo.git/

另一种类似 scp 的语法也可以与 ssh 协议一起使用:

  • [用户@] host.xz:path/to/ repo.git /

只有在第一个冒号之前没有斜杠时才会识别此语法。这有助于区分包含冒号的本地路径。例如,本地路径foo:bar可以指定为绝对路径或./foo:bar,以避免被误解为 ssh url。

ssh 和 git 协议还支持〜用户名扩展:

  • SSH:// [用户@] host.xz [:端口] /〜[用户] /path/to/repo.git/
  • GIT 中://host.xz [:端口] /〜[用户] /path/to/repo.git/
  • [用户@] host.xz:/〜[用户] /path/to/repo.git/

对于本地也受 Git 支持的本地存储库,可以使用以下语法:

  • /path/to/repo.git/
  • 文件:///path/to/repo.git/

这两种语法大多是等价的,除了前者暗示–local 选项。

当 Git 不知道如何处理某种传输协议时,它会尝试使用 remote- 远程助手,如果存在的话。要显式请求远程帮助程序,可以使用以下语法:

  • ::

其中

可以是路径,服务器,或者由被调用的特定远程助手识别的任意类似 URL 的字符串。有关详细信息,请参阅 gitremote-helpers [1] 。  

如果存在大量具有相似名称的远程存储库,并且您希望为它们使用不同的格式(以便将您使用的 URL 重写为有效的 URL),则可以创建表单的配置部分:

[url "<actual url base>"]
    insteadOf = <other url base>

例如,有了这个:

[url "git://git.host.xz/"]
    insteadOf = host.xz:/path/to/
    insteadOf = work:

像“work:repo.git”这样的 URL 或类似“host.xz:/path/to/repo.git”的 URL 将在任何带有 URL 的上下文中被重写为“git://git.host.xz/repo.git”。

如果要为仅推送重写 URL,可以创建表单的配置部分:

[url "<actual url base>"]
    pushInsteadOf = <other url base>

例如,有了这个:

[url "ssh://example.org/"]
    pushInsteadOf = git://example.org/

像“git://example.org/path/to/repo.git”这样的网址将被重写为“ssh://example.org/path/to/repo.git”以进行推送,但是 pull 仍会使用原始网址。

例子

  • 从上游克隆:
$ git clone git://git.kernel.org/pub/scm/.../linux.git my-linux
$ cd my-linux
$ make
  • 创建一个从当前目录借用的本地克隆,而不检查:
$ git clone -l -s -n . ../copy
$ cd ../copy
$ git show-branch
  • 从现有本地目录借用时从上游克隆:
$ git clone --reference /git/linux.git \
  git://git.kernel.org/pub/scm/.../linux.git \
  my-linux
$ cd my-linux
  • 创建一个裸存储库以将更改发布到公共:
$ git clone --bare -l /home/proj/.git /pub/scm/proj.git

GIT

部分 git [1] 套件


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

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