git-credential-manager 上手
动机
自己有使用多个 git 平台,并且在其中的一个持有不止一个身份。
SSH 是不可能的,这辈子都不会用的。
于是对我而言,凭证管理成为一大难题:使用 git 自带的明文 credential store 显然过于危险,但是又不想每次都输入密码。
然后碰巧在 Haruhi 的 某次吐槽 的评论区中看到了一丝希望。
git-credential-manager
正是我想要的。
安装
请参考 这里 。
配置
对于 gitea, 建议事先指定鉴权来源为 generic
.
#.gitconfig
[credential "example.com"]
provider = generic
Windows
使用 DPAPI 来加密凭证。^1
#.gitconfig
[credential]
helper = C:/Program\\ Files\\ \\(x86\\)/Git\\ Credential\\ Manager/git-credential-manager-core.exe
credentialStore = dpapi
如果不需要全局使用,请将家目录里面的 credential.helper
恢复原状,以免带来不便。
Linux
使用 GPG / pass
加密。^2
freedesktop.org 的 API 很容易因为 keyring 配合不到位而爆炸,然后丢失凭据。
建议单独生成一个 key 用来加密。
gpg --expert --full-gen-key
初始化 pass
. 填入 Key ID 时不要有空格。
pass init <gpg-id>
随后修改 .gitconfig
.
#.gitconfig
[credential]
helper = /usr/local/bin/git-credential-manager-core
credentialStore = gpg
多用户
在 remote url 的 hostname 前面添加 username 即可。^3
如:
git clone https://[email protected]/username/repo.git
限制 .gitconfig
作用范围
这里需要用到 git 的 conditional includes 特性。
在你的 $HOME
/ %HOME%
目录下找到 .gitconfig
文件,添加
[includeIf "gitdir:/path/to/customize/"]
path = /path/to/your/config
末尾添加 /
可以当通配符,自动附加 **
, 可以对下面的所有子目录生效。
前缀 ~/
相对于家目录,而 ./
则相对于这个 .gitconfig
所在的目录。
同时,你可以嵌套多个 .gitconfig
文件。
对于重复的配置,文件层级越靠近实际 git repository 中的 .git/config
则优先级越高。
这样一来,就可以把你的 credential store 设置限定在某些特定的目录中。
大功告成,一劳永逸。