我最近切换到将我的存储库同步到GitHub上的https://(由于防火墙问题),它每次都会要求输入密码。

有没有办法缓存凭据,而不是每次git推送时都进行身份验证?


当前回答

克隆存储库repo后,可以编辑repo/.git/config并添加如下配置:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

这样就不会再次要求您输入用户名和密码。

其他回答

您还可以编辑bashrc文件并在其中添加脚本。

这将在您启动Git时询问您的密码一次,然后在您注销之前记住密码。

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi

你可以使用

git config credential.helper store

当您下次使用pull或push输入密码时,它将以明文形式存储在文件.git凭据中(有点不安全,但只需将其放入受保护的文件夹中)。

如本页所述:

git凭证存储

我知道这不是一个安全的解决方案,但有时你只需要一个简单的解决方案-而不需要安装任何其他东西。由于helper=store不适合我,我创建了一个虚拟助手:

创建一个脚本并将其放在用户bin文件夹中,此处名为credfake,该脚本将提供您的用户名和密码:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

使其可执行:

chmod u+x /home/mahuser/bin/credfake

然后在git中配置它:

git config --global credential.helper /home/mahuser/bin/credfake

(或不使用--仅限一个回购协议的全局)

和-voilá-git将使用此用户+密码。

使用凭据存储。

对于OS X和Linux上的Git 2.11+,请使用Git内置的凭据存储:

git config --global credential.helper libsecret

对于Windows上的msysgit 1.7.9+:

git config --global credential.helper wincred

对于OS X上的Git 1.7.9+,请使用:

git config --global credential.helper osxkeychain

您可以使用凭据助手。

git config --global credential.helper 'cache --timeout=x'

其中x是秒数。