#!/bin/bash # 跨平台 Git 凭据 helper(不依赖 includeIf ondarwin/onlinux,兼容 Git < 2.36) # macOS: osxkeychain → store # Linux: libsecret → store set -euo pipefail warn_store_fallback() { local reason="$1" local marker="${XDG_CACHE_HOME:-$HOME/.cache}/git-credential-store.warned" [[ -f "$marker" ]] && return 0 mkdir -p "$(dirname "$marker")" touch "$marker" cat >&2 </dev/null 2>&1; then helper="$(command -v "git-credential-$name")" else return 1 fi exec "$helper" "$@" } case "$(uname -s)" in Darwin) dotfile_git_credential_exec osxkeychain "$@" || true warn_store_fallback "未找到 osxkeychain" dotfile_git_credential_exec store "$@" || true ;; Linux) dotfile_git_credential_exec libsecret "$@" || true warn_store_fallback "未找到 git-credential-libsecret" dotfile_git_credential_exec store "$@" || true ;; *) warn_store_fallback "未知系统 $(uname -s)" dotfile_git_credential_exec store "$@" || true ;; esac echo "git credential helper 不可用" >&2 exit 1