git-credential-manager 上手

Last updated on 2022-03-16, Wed, 03:19 PM

View English Version

动机

自己有使用多个 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://username@github.com/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 设置限定在某些特定的目录中。

大功告成,一劳永逸。

Ref


git-credential-manager 上手
https://blog.h3a.moe/src/d07537/
Author
H3arn
Posted on
2022-03-04, Fri, 12:19 AM
Updated on
2022-03-16, Wed, 03:19 PM
Licensed under