搜索“git default home directory”很容易就会得到一些第三方的说法,即用户文件夹C:\Users\<account>
就是所述目录。
实际上,这通常成立:拿一台没有 Git 的 Windows PC,从任何来源安装 Git,在全局配置中设置一个变量 =>C:\Users\<account>\.gitconfig
由 Git 创建和读取。
现在,这是我第二次在这里有一个系统,其中这条路径错误地更改为H:\.gitconfig
并转回 - H:是只能通过 Cisco AnyConnect VPN 访问的网络驱动器。
定义 HOME 会覆盖此行为,但是
- 它把不相关的事情弄乱了
- 我想了解会发生什么。
尽管我认为这个问题一定存在,但我找不到有关此事的官方文献。
我可以排除的原因:
- 它不是 USERPROFILE – 该变量永远不会改变
C:\Users\<account>
。 - 它不是一个条件配置包括。
- 没有直接设置HOME在配置文件中。
- 在我添加之前没有定义HOME环境变量。
- 它不是一个损坏的 PATH。
可能相关也可能不相关:
- 到目前为止,我只看到过这种与 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
和等选项--unset
。git config
每次只能更改一个文件。您可以通过使用选项指定文件路径,或使用 、 或 指定配置
--file
范围来限制读取或写入哪些配置源。有关更多信息,请参阅--system
--global
--local
--worktree
选项多于。
例如,管理员可以使用$XDG_CONFIG_HOME
env 来覆盖它。从您列出的文件名来看,这里的情况似乎并非如此。
GIT_CONFIG_GLOBAL
环境列出的这里也可用于覆盖用户位置:
GIT_CONFIG_GLOBAL
GIT_CONFIG_SYSTEM
从给定文件中获取配置,而不是从全局或系统级配置文件中获取配置。如果设置了,则不会读取GIT_CONFIG_SYSTEM
在构建时定义的系统配置文件(通常为)。同样,如果设置了, 则不会读取和。可以设置为跳过读取相应级别的配置文件。/etc/gitconfig
GIT_CONFIG_GLOBAL
$HOME/.gitconfig
$XDG_CONFIG_HOME/git/config
/dev/null
它甚至可以是一个定制的 git build,用于修改这个文件也许还有其他人以不同的方式读取配置。