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

问:

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

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

答1:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

从 Git 1.7.9(2012 年发布)开始,Git 中有一个简洁的机制可以避免在 HTTP / HTTPS 上一直输入密码,称为 credential helpers。

您可以只使用以下凭证助手之一:

git config --global credential.helper cache

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

# Cache for 1 hour
git config --global credential.helper "cache --timeout=3600"

# Cache for 1 day
git config --global credential.helper "cache --timeout=86400"

# Cache for 1 week
git config --global credential.helper "cache --timeout=604800"

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

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 上)

软呢帽

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

不要以纯文本形式存储您的密码。从 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 上不起作用:stackoverflow.com/questions/11693074/… 在 Windows 上使用 gitcredentialstore 会很开心

有什么办法可以将此超时设置为无穷大?

答2:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

您还可以让 Git 使用 git-credential-store 永久存储您的凭据,如下所示:

git config credential.helper store

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

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

git config --unset credential.helper

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

git config --global credential.helper store

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

在 Windows 上,您可以下载一个帮助实用程序,用于将 GIT 密码的加密版本存储在 Windows Creditial Store 中,请参阅 confluence.atlassian.com/display/STASH/…

我发现我必须指定 --global 否则它会尝试将设置存储在当前存储库中:git config --global credential.helper store

为什么要做缓存而不是永久存储?共享电脑什么的?

@BrianGordon 我在 Windows 上使用 GIT 1.9.5,而 --global 标志是多余的。即使没有此标志,凭据文件也会在 %USER_HOME% 目录中创建。

如果不以纯文本形式存储,它受到什么保护?你的密码?当您连接到 git 时,它是否不需要询问您的管理员密码?不用输入密码来获取另一个密码是不是有点奇怪?

答3:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

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。

请参阅 Luis Marsano (``) 的 commit 786ef50、commit f07eeed(2018 年 5 月 12 日)。 (由 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 命令行界面(使用最新的 gpg4win-vanilla-2.XY-betaZZ.exe),并使用 GPG 安装目录完成 PATH:set PATH=%PATH%:C:\path \to\gpg 复制 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 # 或 gpg --gen-key

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

相信那把钥匙

在 %PATH% 内的目录中安装凭据帮助程序脚本: cd c:\a\fodler\in\your\path curl -oc:\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 调用。)

在明文机器 a_server.corp.com 登录 a_login 密码 a_password 协议 https 机器 a_server2.corp.com 登录 a_login2 密码 a_password2 协议 https 中制作 _netrc 文件

(不要忘记“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:在 repo 之外工作 签字人:Denton Liu 目前,git-credential-netrc 不能在 git 存储库之外工作。它失败并出现以下错误:致命:不是 git 存储库:。在 /usr/share/perl5/Git.pm 第 214 行。不过,没有真正的理由需要在存储库中。凭证助手也应该能够在存储库之外正常工作。调用 config() 的非自我版本,以便 git-credential-netrc 不再需要在存储库中运行。

Jeff King (peff) 补充说:

我假设您使用的是 gpg 加密的 netrc(如果没有,您可能应该只使用 credential-store)。对于“只读”密码访问,我发现 pass 与 config 这样的组合更好一些:[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' is not a 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 能够调用“credential-netrc”。

好吧,_netrc 在 Windows 7 PC 上对我不起作用,但 .netrc 在 --netrc 参数传递给它的情况下适用于 youtube-dl。

@VonC 当前 URL 似乎是 https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl (七年后管道😉)

@GwynethLlewelyn 谢谢。我已经相应地编辑了答案。如果您看到任何其他过时的信息,请不要犹豫,自行编辑。

答4:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

使用凭证存储。

对于 OS X 和 Linux 上的 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 上运行之前,您需要执行以下步骤:stackoverflow.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。

答5:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

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

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

您可以使用 git remote set-url 更改 URL

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

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

用户名/密码可能需要编码,请参阅 stackoverflow.com/a/34611311/3906760

答6:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

你可以使用

git config credential.helper store

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

就是这样,如本页所述:

git-credential-store

对于 Windows 2.7.3(2016 年 3 月)的 Git:github.com/git-for-windows/git/releases?after=v2.8.4.windows.1,将改为 git config credential.helper manager

答7:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

对我来说,我需要先下载帮助程序并不是很明显!我在 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

答8:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

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

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

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

它会起作用,您必须在电子邮件 ID 中使用 %40 转义 @

如果我们在电子邮件 ID 中有一个“+”怎么办?我尝试了同样的逃避,但推送说“找不到回购”

有 %2B 而不是 +

以明文形式存储密码且易于访问的密码可能不是最佳解决方案。

答9:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

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

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

这可能取决于 Git 用于 HTTPS 传输的网络库。

确保也chmod 0600 ~/.netrc。

只想在此处留下指向 Ubuntu netrc manpage 的链接。我需要为另一个用户(/home/git/.netrc)创建它,然后将所有权更改为该用户。

答10:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

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

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

对于 Cygwin 用户(或已经使用官方 Git for Windows 的用户),您可能更喜欢手动安装。从 releases page 下载 zip 包。解压缩包,然后运行 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。

答11:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

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

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

当你推送时它仍然会要求输入密码,但在你获取时不会,至少对于开源项目来说是这样。

原文链接:https://www.huntsbot.com/qa/R36K/is-there-a-way-to-cache-https-credentials-for-pushing-commits?lang=zh_CN&from=csdn

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值