From 1f6b042b26870e8e11095b20d31840d1d6150510 Mon Sep 17 00:00:00 2001 From: laily Date: Thu, 25 Jun 2026 11:04:15 +0800 Subject: [PATCH] feat: split git credential config by OS on Linux and macOS Use includeIf so Linux prefers libsecret with cache fallback, while macOS keeps osxkeychain. Co-authored-by: Cursor --- git/.gitconfig | 5 +++++ git/.gitconfig.darwin | 2 ++ git/.gitconfig.linux | 3 +++ git/git-credential-linux.sh | 25 +++++++++++++++++++++++++ script/git-init.sh | 2 ++ 5 files changed, 37 insertions(+) create mode 100644 git/.gitconfig.darwin create mode 100644 git/.gitconfig.linux create mode 100755 git/git-credential-linux.sh diff --git a/git/.gitconfig b/git/.gitconfig index 356a151..d88c7d2 100644 --- a/git/.gitconfig +++ b/git/.gitconfig @@ -122,3 +122,8 @@ smudge = git-lfs smudge -- %f [http] sslVerify = false + +[includeIf "ondarwin"] + path = ~/.dotfile/git/.gitconfig.darwin +[includeIf "onlinux"] + path = ~/.dotfile/git/.gitconfig.linux diff --git a/git/.gitconfig.darwin b/git/.gitconfig.darwin new file mode 100644 index 0000000..788266b --- /dev/null +++ b/git/.gitconfig.darwin @@ -0,0 +1,2 @@ +[credential] + helper = osxkeychain diff --git a/git/.gitconfig.linux b/git/.gitconfig.linux new file mode 100644 index 0000000..a7eddff --- /dev/null +++ b/git/.gitconfig.linux @@ -0,0 +1,3 @@ +# 凭据:优先 libsecret(见 git-credential-linux.sh),未安装则 cache + 提示 +[credential] + helper = ~/.dotfile/git/git-credential-linux.sh diff --git a/git/git-credential-linux.sh b/git/git-credential-linux.sh new file mode 100755 index 0000000..c065edb --- /dev/null +++ b/git/git-credential-linux.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Linux 凭据 helper:优先 libsecret,否则回退 cache 并提示安装 +set -euo pipefail + +warn_missing_libsecret() { + local marker="${XDG_CACHE_HOME:-$HOME/.cache}/git-credential-linux.warned" + [[ -f "$marker" ]] && return 0 + mkdir -p "$(dirname "$marker")" + touch "$marker" + cat >&2 <<'EOF' +提示: 未找到 git-credential-libsecret,当前使用内存缓存(默认 1 周过期或登出后失效)。 + +安装持久化凭据存储: + Debian/Ubuntu: sudo apt install libsecret-1-0 git-credential-libsecret + Fedora/RHEL: sudo dnf install git-credential-libsecret + Arch Linux: sudo pacman -S libsecret git +EOF +} + +if command -v git-credential-libsecret >/dev/null 2>&1; then + exec git-credential-libsecret "$@" +fi + +warn_missing_libsecret +exec git-credential-cache --timeout=604800 "$@" diff --git a/script/git-init.sh b/script/git-init.sh index b9e0e30..dee44b1 100755 --- a/script/git-init.sh +++ b/script/git-init.sh @@ -7,3 +7,5 @@ if [ -f $src ]; then fi ln -s $HOME/.dotfile/git/.gitconfig $src +chmod +x "$HOME/.dotfile/git/git-credential-linux.sh" +