当未设置时,git 如何确定 HOME 的值?

当未设置时,git 如何确定 HOME 的值?

搜索“git default home directory”很容易就会得到一些第三方的说法,即用户文件夹C:\Users\<account>就是所述目录。

实际上,这通常成立:拿一台没有 Git 的 Windows PC,从任何来源安装 Git,在全局配置中设置一个变量 =>C:\Users\<account>\.gitconfig由 Git 创建和读取。

现在,这是我第二次在这里有一个系统,其中这条路径错误地更改为H:\.gitconfig并转回 - H:是只能通过 Cisco AnyConnect VPN 访问的网络驱动器。

定义 HOME 会覆盖此行为,但是

尽管我认为这个问题一定存在,但我找不到有关此事的官方文献。

我可以排除的原因:

可能相关也可能不相关:

  • 到目前为止,我只看到过这种与 Cisco AnyConnect VPN(而不是其他 VPN 客户端)和名为 H: 的网络驱动器(而不是其他网络驱动器号)的交互。
  • git --version当前出现此问题的机器上的版本是 2.40.0.windows.1。(我不再能访问旧版本,但我认为它大约是 2.24.x.windows.y。)
  • Git 的所有使用都是通过 cmd 进行的。
  • 受影响机器的各自 IT 部门声称没有任何配置(例如组策略),这可以解释(也就是导致)这种行为。(事实上,除了 git 之外,似乎没有程序会自动将文件放到 H: - 只有我手动放在那里的文件每当我敢于在错误的时间使用 Git 时,就会创建残留文件 .gitconfig、.lesshst、.viminfo。)
  • 我的同事声称他们的机器上不会发生这种情况,尽管名义上它们的配置应该相同。
  • 其他人已经报告了他们的全局 .gitconfig 位于网络驱动器上,但没有一个人指出四处走走。发生这种情况的众所周知/预期/正常的方式是 USERPROFILE 和所有指向网络驱动器并尝试离线使用程序只会产生硬错误(没有自动回退到其他路径)。

答案1

说明了如何确定路径,例如在官方文档

默认情况下,git config将从多个文件读取配置选项:

$(prefix)/etc/gitconfig
系统范围的配置文件。

$XDG_CONFIG_HOME/git/config
~/.gitconfig
用户特定的配置文件。当XDG_CONFIG_HOME环境变量未设置或为空时,$HOME/.config/用作$XDG_CONFIG_HOME

这些也被称为“全局”配置文件。如果两个文件都存在,则按照上面给出的顺序读取这两个文件。

$GIT_DIR/config
存储库特定的配置文件。

$GIT_DIR/config.worktree
extensions.worktreeConfig这是可选的,并且仅当 中存在 时才会搜索 $GIT_DIR/config

您还可以在运行任何 git 命令时使用该-c选项提供其他配置参数。请参阅git了解详情。

将从所有可用的文件中读取选项。如果全局或系统范围的配置文件丢失或无法读取,则将忽略它们。如果存储库配置文件丢失或无法读取,git config将以非零错误代码退出。如果文件无法读取,则会生成错误消息,但如果文件丢失,则不会生成错误消息。

文件按上述顺序读取,最后找到的值优先于先前读取的值。当获取多个值时,将使用所有文件中某个键的所有值。

默认情况下,选项仅写入存储库特定的配置文件。请注意,这也会影响 --replace-all和等选项--unsetgit config 每次只能更改一个文件

您可以通过使用选项指定文件路径,或使用 、 或 指定配置--file范围来限制读取或写入哪些配置源。有关更多信息,请参阅--system--global--local--worktree选项多于。

例如,管理员可以使用$XDG_CONFIG_HOMEenv 来覆盖它。从您列出的文件名来看,这里的情况似乎并非如此。

GIT_CONFIG_GLOBAL环境列出的这里也可用于覆盖用户位置:

GIT_CONFIG_GLOBAL
GIT_CONFIG_SYSTEM
从给定文件中获取配置,而不是从全局或系统级配置文件中获取配置。如果设置了,则不会读取GIT_CONFIG_SYSTEM在构建时定义的系统配置文件(通常为)。同样,如果设置了, 则不会读取和。可以设置为跳过读取相应级别的配置文件。/etc/gitconfigGIT_CONFIG_GLOBAL$HOME/.gitconfig$XDG_CONFIG_HOME/git/config/dev/null

它甚至可以是一个定制的 git build,用于修改这个文件也许还有其他人以不同的方式读取配置。

相关内容