将~/.gitconfig中的github.token别名映射为一个shell命令

7

我想在我的 ~/.gitconfig 文件中将 github.token 的值设置为一个 shell 命令的结果。我当前有以下内容:

[github]
  user = zmanji
  token = !echo ~/.githubtoken 2> /dev/null

然而,git config github.token 命令并不会返回 ~/.githubtoken 文件的内容,而是返回命令本身。如何才能按预期工作呢?
编辑说明:为了明确起见,我正在尝试实现这里暗示的内容:在此处

您还可以通过将变量设置为以 ! 为前缀的命令字符串来将 github.token 定义为返回 stdout 上的实际令牌的命令。


1
尝试使用 cat 而不是 echo - ZeissS
@Zameer - 我不再确信我的“cat”答案是正确的。正在测试中...(在我确定之前,我已删除了我的答案。) - TSomKes
3个回答

3

我将我的GitHub令牌存储在OS X的Keychain中,而不是存储在文件中,并通过以下方式获取它(来自我的.gitconfig片段):

[github]
  token = !security find-generic-password -gs \"GitHub API Token\" 2>&1 >/dev/null | awk '/password/ {print $2}' | tr -d \\\"

你正在运行哪个版本的git? - Zameer Manji
v1.7.1(抱歉回复晚了,我刚看到你的问题)。 - Andy Stewart

2
这里的关键在于他没有在gitconfig设置中设置token。他正在使用defunkt的hub工具。这是一个git命令的包装器,允许您拥有GITHUB_USERGITHUB_TOKEN环境变量,以覆盖本地.gitconfig文件中的设置。
然后为了使其无缝,您指向的用户在他的ZSH配置中将alias git=hub定义为别名。然后您应该能够源一个本地文件,在其中设置您的环境变量,并将您的存储库推送到公共世界上,同时保留所有私人信息。
**注意:对于OSX上的homebrew用户,您可以通过brew install hub安装该工具。

我并不是在尝试使用hub。我是在尝试让git config给我一个值,而这个值并没有被明确地存储在文件中。 - Zameer Manji
很好,看起来你只是想将github令牌的值存储在gitconfig之外,这样你就可以将其放在自己的存储库中(当我发现它时,这就是我的意图)。无论如何,祝你好运! - Geoff Lanotte
这就是它的全部。这就是为什么我希望我的gitconfig给我一个我没有存储在其中的值。这样我就可以分享整个gitconfig而不泄露公共信息。我认为像你建议的那样使用环境变量将是一种更好的长期解决方案,因为我可以在我的bash_profile或bashrc中拥有这个功能。 - Zameer Manji

0

从我可以推断出的git config man page中,只有git config alias.*有可能定义shell命令。

所以也许defunkt是在谈论一个名为token的别名。

git config alias.token '!security 2>&1 >/dev/null find-generic-password -gs github.token | ruby -e 'print $1 if STDIN.gets =~ /^password: \\\"(.*)\\\"$/''

这将用于快速获取他的GitHub token值。
然后通过经典的git config github.token xxx赋值给github.token


我的目标是让 git config github.token 在不存储在 .gitconfig 文件中的情况下返回我的令牌。似乎其他人也这样做:https://github.com/mattly/dotfiles/blob/master/gitconfig#L6。 - Zameer Manji
@Zameer,你是否尝试过使用!sh -c 'echo $GITHUB_TOKEN'而不是直接使用!echo - VonC
是的,返回的是字符串“!sh -c 'echo $GITHUB_TOKEN'”,而不是环境变量的值。 - Zameer Manji
@Zameer:恰好我也得到了同样的结果。换句话说,我不确定它是否真正起作用。 - VonC
有人能告诉我什么是 github.token 吗? 我听说过 github.user,但 github.token 有什么值呢? - Santosh Kumar
@SantoshKumar 如在 https://dev59.com/i2w05IYBdhLWcg3wnjLC#7130405 中所评论的,GitHub 不再使用(对于非 SSH 通信,即 git:// 或 https:// 协议)普通令牌,而是 OAuth 2 令牌:https://github.com/blog/1270-easier-builds-and-deployments-using-git-over-https-and-oauth:因此您的配置中不需要 github.token - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接