有没有办法缓存 https 凭据以推送提交?

Posted

技术标签:

【中文标题】有没有办法缓存 https 凭据以推送提交?【英文标题】:Is there a way to cache https credentials for pushing commits? 【发布时间】:2011-07-17 14:47:35 【问题描述】:

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

有没有办法缓存凭据,而不是每次都验证git push

【问题讨论】:

另见superuser.com/questions/199507/… 您现在可以使用凭证助手来加密包含您的凭证的_netrc 文件。见my answer below。我发现git-credential-winstore.exe(内存缓存)在 Windows 上有点问题。 另见Git push requires username and password和Git keeps prompting me for password。 git-credential-winstore 最适合 Windows。什么毛病?设置 ssh 是首选选项,虽然我已经做过好几次了,但它更容易出错,有时当您必须连接到多个主机时,简单的方法不起作用。 “SSH 证书”我假设您的意思是“SSH 私钥”。 【参考方案1】:

使用 Git 1.7.9 及更高版本

自 Git 1.7.9(2012 年 1 月下旬发布)以来,Git 中有一个简洁的机制可以避免在 HTTP / HTTPS 上一直输入密码,称为 credential helpers。 (感谢dazonic 在下面的 cmets 中指出这个新功能。)

使用 Git 1.7.9 或更高版本,您只需使用以下凭证助手之一:

git config --global credential.helper cache

credential.helper cache value 告诉 Git 将您的密码缓存在内存中特定数量的 分钟。默认为 15 分钟,您可以设置更长的超时时间:

git config --global credential.helper "cache --timeout=3600"

将缓存设置为 1 小时,或者:

git config --global credential.helper "cache --timeout=86400"

1 天。如果需要,您还可以永久存储您的凭据,请参阅下面的其他答案。

GitHub 的帮助 also suggests,如果您在 Mac OS X 上并使用 Homebrew 安装 Git,您可以使用本机 Mac OS X 密钥库:

git config --global credential.helper osxkeychain

对于 Windows,有一个名为 Git Credential Manager for Windows 或 wincred in msysgit 的助手。

git config --global credential.helper wincred # obsolete

Git for Windows 2.7.3+(2016 年 3 月):

git config --global credential.helper manager

对于 Linux,您将使用(2011 年)gnome-keyring(或其他密钥环实现,例如 KWallet)。

现在(2020 年),那将是(在 Linux 上)

Fedora

sudo dnf install git-credential-libsecret
git config --global credential.helper /usr/libexec/git-core/git-credential-libsecret

Ubuntu

sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

使用 1.7.9 之前的 Git 版本

对于 1.7.9 之前的 Git 版本,这个更安全的选项不可用,您需要更改您的 origin 远程使用的 URL 以以这种方式包含密码:

https://you:password@github.com/you/example.git

...换句话说,:password 在用户名之后和@ 之前。

你可以为你的origin远程设置一个新的URL:

git config remote.origin.url https://you:password@github.com/you/example.git

确保您使用https,并且您应该知道,如果您这样做,您的 GitHub 密码将以明文形式存储在您的.git 目录中,这显然是不可取的。

任何 Git 版本(嗯,从 0.99 版开始)

另一种方法是将您的用户名和密码放在您的~/.netrc 文件中,尽管与将密码保存在远程 URL 中一样,这意味着您的密码将以纯文本形式存储在磁盘上,因此更少安全且不推荐。但是,如果您想采用这种方法,请将以下行添加到您的 ~/.netrc

machine <hostname> login <username> password <password>

... 将&lt;hostname&gt; 替换为服务器的主机名,将&lt;username&gt;&lt;password&gt; 替换为您的用户名和密码。还要记住对该文件设置限制性文件系统权限:

chmod 600 ~/.netrc

请注意,在 Windows 上,此文件应称为 _netrc,您可能需要定义 %HOME% 环境变量 - 更多详细信息请参阅:

Git - How to use .netrc file on Windows to save user and password

【讨论】:

不要以纯文本形式存储您的密码。从 Git 1.7.9 开始,您可以使用凭证助手。 git config --global credential.helper osxkeychain 在 OS X 上。对于其他操作系统,请参阅 help.github.com/articles/set-up-git FWIW,osx 钥匙串的东西是基本 GIT 源代码的一部分,它不是 Brew 或 MacPorts 或任何本月风味的专有组件。而且您甚至不需要从头开始构建 git - 只需 cd contrib/credential/osxkeychain/ 并运行 make。 通过两因素身份验证,您必须使用 github 所说的 Person Access Token。事实上,您应该始终使用一个,因为与密码不同,您可以控制它提供的访问权限。只需替换 url 中的密码,最终得到https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git。它使存储在磁盘上的纯文本密码几乎可以安全使用。 git config --global credential.helper cache 在 Windows 上不起作用:***.com/questions/11693074/… 在 Windows 上使用 gitcredentialstore 会很开心 有什么方法可以将此超时设置为无穷大?【参考方案2】:

TLDR;在 Git 1.8.3+ 中使用加密的 netrc 文件

在 Windows 上可以使用 ~/.netrc (Unix) 或 %HOME%/_netrc(注意 _)为 Git 存储库 HTTPS URL 保存密码。

但是:该文件将以纯文本形式存储您的密码。

解决方案:使用GPG (GNU Privacy Guard)加密该文件,并让Git在每次需要密码时对其进行解密(对于push/pull/fetch/clone操作) .


注意:使用 Git 2.18(2018 年第二季度),您现在可以自定义用于解密加密的 .netrc 文件的 GPG。

见commit 786ef50、commit f07eeed(2018 年 5 月 12 日)Luis Marsano (``)。(由 Junio C Hamano -- gitster -- 合并到 commit 017b7c5,2018 年 5 月 30 日)

git-credential-netrc:接受gpg 选项

git-credential-netrc 被硬编码为使用“gpg”解密,无论 gpg.program 选项。 这是像 Debian 这样的发行版上的一个问题,它把现代 GnuPG 称为别的东西,比如'gpg2'


Windows 分步说明

使用 Windows:

(Git 在其发行版中有一个gpg.exe,但使用完整的 GPG 安装包括一个 gpg-agent.exe,它将记住与您的 GPG 密钥关联的密码。)

安装gpg4Win Lite,最小的gnupg命令行界面(取most recent gpg4win-vanilla-2.X.Y-betaZZ.exe),并用GPG安装目录完成你的PATH:

set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe

(注意'copy'命令:Git 将需要一个 Bash 脚本来执行命令'gpg'。由于gpg4win-vanilla-2 带有gpg2.exe,因此您需要复制它。)

创建或导入 GPG 密钥并信任它:

gpgp --import aKey
# or
gpg --gen-key

(确保为该密钥输入密码。)

Trust that key

在您的%PATH% 内的目录中安装凭据帮助程序脚本:

cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl

(注意:脚本在 Git 2.25.x/2.26 中重命名,见下文)

(是的,这是一个 Bash 脚本,但它可以在 Windows 上运行,因为它会被 Git 调用。)

以明文形式制作 _netrc 文件

machine a_server.corp.com
login a_login
password a_password
protocol https

machine a_server2.corp.com
login a_login2
password a_password2
protocol https

(不要忘记“protocol”部分:“http”或“https”,具体取决于您将使用的 URL。)

加密该文件:

gpg -e -r a_recipient _netrc

(您现在可以删除_netrc 文件,只保留_netrc.gpg 加密文件。)

使用该加密文件:

git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"

(注意 '/': C:\path\to... 根本不起作用。)(您可以首先使用 -v -d 来查看发生了什么。)

从现在开始,任何使用需要身份验证的 HTTP(S) URL 的 Git 命令都将解密该 _netrc.gpg 文件并使用与您正在联系的服务器关联的登录名/密码。 第一次,GPG 会要求您提供 GPG 密钥的密码来解密文件。 其他时候,由第一次 GPG 调用自动启动的 gpg-agent 将为您提供该密码。

这样,您可以在一个文件中记住几个 URL/登录名/密码,并将其存储在您的磁盘上加密。 我发现它比“缓存”助手更方便,您需要记住并为每个远程服务输入(每个会话一次)不同的密码,以便将所述密码缓存在内存中。


在 Git 2.26(2020 年第一季度)中,用于使用 .netrc 的示例凭证帮助程序已更新为开箱即用。见patch/discussion。

参见Denton Liu (Denton-L)commit 6579d93、commit 1c78c78(2019 年 12 月 20 日)。(由 Junio C Hamano -- gitster -- 合并于 commit 1fd27f8,2019 年 12 月 25 日)

contrib/credential/netrc: 使 PERL_PATH 可配置

签字人:Denton Liu

git-credential-netrc 中 Perl 解释器的 shebang 路径是硬编码的。 但是,某些用户可能会将其放置在不同的位置,因此必须手动编辑脚本。

在脚本中添加 .perl 前缀以将其表示为模板并忽略生成的版本。 扩充Makefile,使其从git-credential-netrc.perl 生成git-credential-netrc,就像其他Perl 脚本一样。

Makefile 配方被无耻地从contrib/mw-to-git/Makefile 窃取。

还有:

在 2.26(2020 年第一季度)中,用于使用 .netrc 的示例凭据帮助程序已更新为开箱即用。

参见Denton Liu (Denton-L)commit 6579d93、commit 1c78c78(2019 年 12 月 20 日)。(由 Junio C Hamano -- gitster -- 合并于 commit 1fd27f8,2019 年 12 月 25 日)

contrib/credential/netrc: 在仓库外工作

签字人:Denton Liu

目前,git-credential-netrc 不能在 git 存储库之外工作。它失败并出现以下错误:

fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.

不过,没有真正的理由需要在存储库中。凭证助手也应该能够在存储库之外正常工作。

调用config() 的非自身版本,以便git-credential-netrc 不再需要在存储库中运行。

Jeff King (peff) 补充:

我假设您使用的是 gpg 加密的 netrc(如果不是,您可能应该 只需使用credential-store)。 对于“只读”密码访问,我发现 pass 与这样的配置组合更好一点:

[credential "https://github.com"]
  username = peff
  helper = "!f()  test $1 = get && echo password=`pass github/oauth`; ; f"

【讨论】:

在 linux 上尝试同样的事情 .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" ..我得到 "git : 'credential-netrc' 不是 git 命令。请参阅 'git --help'" @sunny 这就是curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc 的用途:您需要将git-credential-netrc 复制到路径中的任何位置($PATH),以便 git 能够调用 '@987654409 @'。 好吧,_netrcWindows 7 PC 上对我不起作用,但.netrc 对youtube-dl 起作用,并传递了--netrc 参数。 @VonC 当前的 URL 似乎是 https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(七年后的管道?) @GwynethLlewelyn 谢谢。我已经相应地编辑了答案。如果您看到任何其他过时的信息,请不要犹豫,自行编辑。【参考方案3】:

如果您使用 osxkeychain 并且令牌已过期并想要更新它,请按照以下步骤操作:

在终端中运行,然后按两次回车。

git credential-osxkeychain erase
 host=github.com
 protocol=https

现在应该提示您输入用户名/密码。然而,有时这似乎并不“接受”,您必须不断重新输入。

如果是这样,重新启动您的计算机。现在下次运行 git 命令并输入您的用户名/密码时,它将被保存。

【讨论】:

【参考方案4】:

我知道这不是一个安全的解决方案,但有时您只需要一个简单的解决方案 - 无需安装其他任何东西。由于 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

(或不使用 --global 仅用于一个 repo)

并且 - 瞧 - git 将使用这个用户 + 密码。

【讨论】:

我同意。确实是简单(如果不安全)的解决方案。 +1,只要你知道自己在做什么。【参考方案5】:

通常你有一个远程 URL,像这样,

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

如果你想在使用git push 时跳过用户名和密码,试试这个:

 git remote set-url origin https://username:password@gitlab.com/username/Repo.git

我刚刚将相同的 URL(包含用户详细信息,包括密码)添加到源。

注意:如果用户名是电子邮件 ID,则不起作用。

git remote -v

origin    https://username:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)

【讨论】:

【参考方案6】:

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

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

那么您将不再被要求输入usernamepassword

【讨论】:

使用 helper = manager 为我工作(但第一次推送时我被要求提供用户名+repo)。 使用 helper=manager 我收到错误 credential-manager is not a git command 不幸的是 git 忽略了配置文件中的密码。 .git_credentials 和 credential.store 是唯一的选择。【参考方案7】:

你可以使用

git config credential.helper store

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

就是这样,如本页所述:

git-credential-store

【讨论】:

对于 Git for Windows 2.7.3(2016 年 3 月):github.com/git-for-windows/git/releases?after=v2.8.4.windows.1,改为 git config credential.helper manager【参考方案8】:

只需将登录凭据包含在 URL 中即可:

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

注意:我不推荐这种方法,但是如果你赶时间没有别的办法,你可以使用这种方法。

【讨论】:

它会起作用,您必须在电子邮件 ID 中使用 %40 转义 @ 如果我们的电子邮件 ID 中有一个“+”怎么办?我尝试了同样的逃避,但推送说“找不到回购” 有 %2B 而不是 + 以明文形式存储密码并易于访问可能不是最佳解决方案。【参考方案9】:

OAuth

您可以创建自己的personal API token (OAuth) 并像使用普通凭据一样使用它(地址:/settings/tokens)。例如:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

另一种方法是在~/.netrc(Windows 上为_netrc)中配置您的用户/密码,例如

machine github.com
login USERNAME
password PASSWORD

对于 HTTPS,添加额外的行:

protocol https

凭证助手

cache your GitHub password in Git 使用 HTTPS 时,您可以使用凭证助手告诉 Git 每次与 GitHub 对话时记住您的 GitHub 用户名和密码。

Mac:git config --global credential.helper osxkeychainosxkeychain helper 为必填项), 窗口:git config --global credential.helper wincred Linux 和其他:git config --global credential.helper cache

相关:

How to store your GitHub https password on Linux in a terminal keychain? How do I ensure Git doesn't ask me for my GitHub username and password? Configure Git clients, like GitHub for Windows, to not ask for authentication Pushing a local repo to a GitHub repo which has dual-factor authentication

【讨论】:

【参考方案10】:

您还可以编辑 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

【讨论】:

【参考方案11】:

使用凭证存储。

对于 OS XLinux 上的 Git 2.11+,use Git's built in credential store:

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: 'credential-gnome-keyring' is not a git command. See 'git --help'. 谢谢,但我得到了同样的错误。难道我做错了什么?我输入命令,没有任何反应。推送后,系统会要求我提供已成功插入的凭据,但我收到错误消息,表明它不是 git 命令。 在 libsecret 在 Linux 上运行之前,您需要执行以下步骤:***.com/a/40312117/775800 另一件事 - 如果您在 Github 上启用了 2FA,您的密码将无法使用。但是你可以在你的 Github“设置”页面上创建一个个人访问令牌,该令牌作为你的密码。 github.com/github/hub/issues/822 安全问题:Windows 凭据管理器使任何登录到您的 Windows 帐户的人都可以访问您的纯文本密码。他们需要做的就是向凭证管理器发送一个请求,例如printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get (more details here)。你应该始终使用personal access token,当然在你的 GitHub 帐户上使用 2FA。【参考方案12】:

最好使用凭据来确保安全,但您可以使用缓存将其保留一段时间:

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

您的凭据将保存 3600 秒。

【讨论】:

意思是3600秒后,我们要重新输入密码???如何永久保存它们? $ git config credential.helper 'cache --timeout=3600' error: could not lock config file .git/config: No such file or directory 这行得通:git config --global credential.helper 'cache --timeout=3600' 这是否可以在 Docker 容器中工作(基于 windowsservercore)? @NeilChowdhury 这不是真的。根据官方doc的说法,默认密码会保存15分钟。不要散布这种毫无根据的言论!【参考方案13】:

对于 Windows,您可以使用 Git Credential Manager (GCM) 插件。它目前由微软维护。好消息是它将密码保存在 Windows Credential Store 中,而不是纯文本。

项目的releases page 上有一个安装程序。这还将安装带有内置凭据管理器的Git for Windows 的正式版。它允许 GitHub(和其他服务器)使用 two-factor authentication。并且有一个用于初始登录的图形界面。

对于 Cygwin 用户(或已经在使用官方 Git for Windows 的用户),您可能更喜欢手动安装。从releases page 下载压缩包。解压缩包,然后运行install.cmd 文件。这将安装到您的 ~/bin 文件夹中。 (确保您的 ~/bin 目录在您的 PATH 中。)然后您可以使用以下命令对其进行配置:

git config --global credential.helper manager

然后,当对任何服务器进行身份验证时,Git 将运行 git-credential-manager.exe

【讨论】:

任何登录到您帐户的人都可以轻松访问密码的明文。他们需要做的就是向凭证管理器发送请求,例如printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get (more details here)。你应该始终使用personal access token,当然在你的 GitHub 帐户上使用 2FA。【参考方案14】:

我并没有立即明白我需要先下载帮助程序!我在 Atlassian's Permanently authenticating with Git repositories 找到了 credential.helper 下载。

引用:

如果您想在 OS X 上使用带有凭据缓存的 Git,请按照以下步骤操作:

下载二进制 git-credential-osxkeychain。

运行以下命令以确保二进制文件是可执行的:

chmod a+x git-credential-osxkeychain

放到目录/usr/local/bin.

运行以下命令:

git config --global credential.helper osxkeychain

【讨论】:

【参考方案15】:

如果您不想像 Mark 所说的那样以明文形式存储密码,则可以使用不同的 GitHub URL 来获取而不是推送。在你的配置文件中,[remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

它仍然会在您推送时要求输入密码,但在您获取时不会要求输入密码,至少对于开源项目而言。

【讨论】:

【参考方案16】:

有一种简单的老式方法可以将用户凭据存储在 HTTPS URL 中:

https://user:password@github.com/...

您可以使用git remote set-url &lt;remote-repo&gt; &lt;URL&gt;更改网址

这种方法的明显缺点是您必须以纯文本形式存储密码。您仍然可以只输入用户名 (https://user@github.com/...),这至少可以为您省去一半的麻烦。

您可能更喜欢切换到 SSH 或使用 GitHub 客户端软件。

【讨论】:

用户名/密码可能需要编码,见***.com/a/34611311/3906760【参考方案17】:

这对我有用,我使用的是 Windows 10

git config --global credential.helper wincred

【讨论】:

【参考方案18】:

如果您像我一样使用two-factor authentication,情况会有所不同。由于我在其他地方没有找到好的答案,所以我会在这里贴一个,以便以后找到它。

如果您使用双因素身份验证,那么指定用户名/密码甚至不起作用 - 您会被拒绝访问。但是您可以使用应用程序访问令牌并使用 Git 的凭证助手为您缓存它。以下是相关链接:

Setting up the command-line to work with 2-factor auth(搜索标题为“命令行 Git 如何工作?”的部分) Credential caching

我不记得我在哪里看到的,但是当你被要求输入用户名时 - 这就是你粘贴应用程序访问令牌的地方。然后将密码留空。它在我的 Mac 上运行。

【讨论】:

当使用 2 路身份验证时,您使用“访问令牌”作为密码。用户名始终保持不变【参考方案19】:

作曲家文档mentions,您可以阻止它使用GitHub API,使其行为类似于git clone

如果您在 GitHub 存储库上将 no-api 键设置为 true,它将像使用任何其他 Git 存储库一样克隆该存储库,而不是使用 GitHub API。但与直接使用 git 驱动不同,composer 仍会尝试使用 GitHub 的 zip 文件。

所以该部分将如下所示:

"repositories": [
    
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    
],

请记住,API 的存在是有原因的。所以这应该是增加 github.com 负载的最后手段。

【讨论】:

不确定这个答案与原始问题有什么关系。【参考方案20】:

应使用身份验证令牌而不是帐户密码。转到 GitHub 设置/应用程序,然后创建个人访问令牌。可以像使用密码一样使用令牌。

该令牌旨在允许用户不使用帐户密码进行项目工作。仅在执行管理工作时使用密码,例如创建新令牌或撤销旧令牌。


可以使用特定于项目的部署密钥来授予对单个项目存储库的访问权限,而不是授予用户对 GitHub 帐户的完全访问权限的令牌或密码。当您仍然可以使用您的正常凭据访问其他 Git 帐户或项目时,可以在以下步骤中将 Git 项目配置为使用此不同的密钥:

    编写一个 SSH 配置文件,其中包含用于部署密钥的 HostIdentityFile,可能是 UserKnownHostsFile,也可能是 User(尽管我认为您不需要它)。 编写一个虚拟为ssh -F /path/to/your/config $* 的SSH 包装shell 脚本 在您的普通 Git 命令前添加 GIT_SSH=/path/to/your/wrapper。这里git remote(原点)必须使用git@github.com:user/project.git 格式。

【讨论】:

【参考方案21】:

我的回答来自 gitcredentials(7) Manual Page。就我而言,我的 Windows 安装中没有凭据缓存。我使用凭据存储。

使用 credential-store 后,用户名/密码存储在 [user folder]/.git-credentials 文件中。要删除用户名/密码,只需删除文件内容即可。

【讨论】:

当你的windows没有凭据缓存时,我建议使用git config --global credential.helper wincred这个永久存储密码。【参考方案22】:

在 GNU/Linux 设置中,~/.netrc 也能很好地工作:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

这可能取决于 Git 将哪些网络库用于 HTTPS 传输。

【讨论】:

确保也chmod 0600 ~/.netrc 只想在此处留下指向Ubuntu netrc manpage 的链接。我需要为另一个用户(/home/git/.netrc)创建它,然后将所有权更改为该用户。【参考方案23】:

您还可以让 Git 使用以下方式永久存储您的凭据:

git config credential.helper store

注意:虽然这很方便,但 Git 会将您的凭据以明文形式存储在 项目目录下的本地文件(.git-credentials)(参见下面的“主”目录)。如果您不喜欢这个,请删除此文件并切换到使用 缓存选项。

如果您希望 Git 在每次需要时继续询问您的凭据 连接到远程仓库,你可以运行这个命令:

git config --unset credential.helper

要将密码存储在%HOME% 目录而不是项目目录中的.git-credentials 中:使用--global 标志

git config --global credential.helper store

【讨论】:

在 Windows 上,您可以下载一个帮助实用程序来配置将 GIT 密码的加密版本存储在 Windows 信用商店中的内容,请参阅 confluence.atlassian.com/display/STASH/… 我发现我必须指定 --global 否则它会尝试将设置存储在当前存储库中:git config --global credential.helper store 为什么要做缓存而不是永久存储?共享电脑什么的? @BrianGordon 我在 Windows 上使用 GIT 1.9.5,--global 标志是多余的。即使没有此标志,凭据文件也会在 %USER_HOME% 目录中创建。 如果不是以纯文本形式存储,它受到什么保护?你的密码?当您连接到 git 时,它是否不需要询问您的管理员密码?不用输入密码来获取另一个密码是不是有点奇怪?【参考方案24】:

您可以使用凭证助手。

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

其中x 是秒数。

【讨论】:

这是秒数......一些天才将其更新为毫秒,每个人都未经检查就批准了它。如果您不知道答案,请不要误导人们。谢谢! 能不能给个链接,上面有storecache等常见的东西列出和解释的地方? 想提一下这样的事实,除非你调用另一个特定的命令来首先使用“缓存”作为管理器,否则这确实会大便?这东西太神秘了,所有这些答案都不完整,而且都不起作用。令人难以置信的沮丧。请参阅:***.com/a/24800870/88409

以上是关于有没有办法缓存 https 凭据以推送提交?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从 python 3.x 中的测试脚本隐藏登录凭据

有没有办法通过 GitHub 操作推送更改?

有没有办法在 PyQt4/5 中强制使用 QNetworkAccessManager 进行身份验证?

有没有办法让应用程序将通知更改为静默通知(不是服务器)以进行推送通知

有没有办法获得被推送的路线的上下文以在其中显示小吃店?

有没有办法预先缓存网页以使用 Android WebView 查看?