Gitconfig 凭据 OS 检查

Gitconfig credential OS check

我有我的点文件设置,我确实有一个 .gitconfig。问题出在我的 OSX 机器上,希望助手是 osxkeychain,但对于我的 linux 机器,我想要 cache --timeout 3600。有没有办法在 gitconfig 文件中进行 OS 检测?可能是这样的:

[credential os=apple]
    helper = osxkeychain
[credential os=linux]
    helper = cache --timeout 3600

你可以定义一个conditional include in your global .gitconfig file, since Git 2.13.

但它现在仅适用于您存储库的路径。

因此,如果您可以在两台不同机器上的两个不同路径中设置存储库,则可以根据这些路径关联一个全局设置,其中包括相关的帮助程序。

; include for all repositories inside /path/to/group/osx
[includeIf "gitdir:/path/to/group/osx"]
    helper = osxkeychain
; include for all repositories inside /path/to/group/linux
[includeIf "gitdir:/path/to/group/linux"]
    helper = cache --timeout 3600

另一种方法是设置 (因为 Git 2.23),但这与 OS 的概念(分支 "linux",分支"OSx":没有太大意义)

无法在 Git 配置中进行 OS 配置。但是,有两种可能的方法。

一个是利用每个用户有两个配置文件 ~/.gitconfig~/.config/git/config 这一事实(尽管如果您设置了 $XDG_CONFIG_HOME,后者可能会有所不同).我将常用配置存储在前者中,将任何自定义的每台机器配置(不受 Git 管理)存储在后者中,例如凭证助手和签名子密钥。如果您使用 Git.

管理它,则可以在您的点文件中有一个脚本将适当的文件复制到后者中

另一种选择是将凭证助手指定为 shell 命令,这当然具有 shell 的所有功能。所以你可以这样做:

[credential]
    helper = "!f() { if [ \"$(uname -s)\" = Linux ]; then git credential-cache --timeout 3600 \"$@\"; else git credential-osxkeychain \"$@\"; fi; };f"

这将根据您 运行 使用的 OS 调用适当的助手。