如何为不同的git仓库设置用户名和密码?


17
─[$] cat ~/.gitconfig

[user]
    name = Shirish Agarwal
    email = xxxx@xxxx.xxx
[core]
    editor = leafpad
    excludesfiles = /home/shirish/.gitignore
    gitproxy = \"ssh\" for gitorious.org
[merge]
    tool = meld
[push]
    default = simple
[color]
    ui = true
    status = auto
    branch = auto

现在,我想将我的git凭证放入github,gitlab和gitorious,以便每次不必在浏览器上查找凭证。如何做到这一点使其自动化?

我正在运行zsh

Answers:


21

使用SSH

处理git身份验证的常用方法是将其委托给SSH。通常,您在远程存储库中(例如, 在GitHub上)设置SSH公共密钥,然后在需要进行身份验证时使用它。您可以使用过程中的关键剂,无论是你的桌面环境或处理手动ssh-agentssh-add

为了避免指定用户名,您也可以在SSH中的~/.ssh/config;中配置用户名。例如我有

Host git.opendaylight.org
  User skitt

然后我可以使用克隆

git clone ssh://git.opendaylight.org:29418/aaa

(请注意,那里没有用户名)。

使用 gitcredentials

如果SSH方法不适用(例如,您正在使用通过HTTPS访问的存储库),则git确实有使用gitcredentials(通常是git-credential-store)处理凭证的方式。您可以使用指定用户名

git config credential.${remote}.username yourusername

和凭据助手使用

git config credential.helper store

(指定--global您是否要在所有地方使用此设置)。

然后,当您第一次访问存储库时,git会要求您输入密码,密码将被存储(默认为~/.git-credentials)。对存储库的后续访问将使用存储的密码,而不是询问您。


1
您能否详细说明一下credential.${remote}credential.helper。您是否可以指出一些文档,因为这是我第一次阅读它。
shirish

我在答案中链接到了手册页,那就是文档。${remote}是您要克隆的URI的协议和主机名部分,helper指向帮助程序。
斯蒂芬·基特

1
关于该主题的还有Pro Git的
史蒂芬·基特

7

对于后来发现这个问题的人-我遇到了困难,最终使它起作用

https /凭据.helper / Ubuntu

  1. 全局取消设置:
    git config --global --unset credentials.helper
  2. 本地未设置:(在每个存储库中) git config --unset credential.helper
  3. 为每个仓库创建凭证文件:(在每个仓库内)

    git config credential.helper 'store --file ~/.git_reponame_credentials'
    

并不是说这是最好的方法,也不是唯一的方法-但是经过几个令人沮丧的时间后,它对我有用。


似乎类似于斯蒂芬·基特在上面分享的内容。
shirish

2
@shirish并不是真的,第三点是我需要的-指定文件位置的选项。
马丁斯Briedis

@shirish; 同样,Kitts说明中也没有指定取消设置凭据,这对我来说是至关重要的组成部分,因为我已经在全球范围内设置了它们。
史蒂夫·J

我也遇到了困难,因为它不是所有的git repos一样。您将获得来自同一来源/商店的信息。第二个比较好,但要现实工作更令人沮丧。仍然感谢您的分享。@SteveJ
shirish
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.