git: & # 39; credential-cache& # 39;不是git命令吗

我遵循这些指令的字母,包括关于密码缓存的部分。看起来指令是错误的,因为每次我git push origin master都会得到这个错误:

git: 'credential-cache' is not a git command. See 'get --help'.

... 这时我必须输入我的用户名和密码。这样做之后,我再次看到相同的错误消息,后面是git push的输出。

下面是我的.gitconfig文件的内容:

[user]
name = myusername
email = myusername@myemaildomain.com
[credential]
helper = cache

要清楚,在我安装Git并运行Git Bash后,下面是我输入的内容:

git config --global user.name "myusername"
git config --global user.email "myusername@myemaildomain.com"
git config --global credential.helper cache

请帮助。这太令人沮丧了!

270353 次浏览

我找到的一个博客:

这个[git-credential-cache]在Windows系统中不起作用,因为git-credential-cache通过Unix套接字进行通信。

Git for Windows

由于msysgit已经被Windows的Git所取代,使用Git for Windows现在是最简单的选择。某些版本的Git for Windows安装程序(例如2.7.4)在安装过程中有一个复选框来启用Git凭据管理器。以下是截图:

截图of Git For Windows 2.7.4 install wizard .

还在使用msysgit吗?适用于msysgit 1.8.1及以上版本

wincred helper是在msysgit 1.8.1中添加的。使用方法如下:

git config --global credential.helper wincred

对于1.8.1以上版本的msysgit

首先,下载git-credential-winstore并将其安装到git bin目录中。

接下来,确保包含git.cmd的目录在Path环境变量中。它的默认目录是64位系统上的C:\Program Files (x86)\Git\cmd或32位系统上的C:\Program Files\Git\cmd。测试这一点的一个简单方法是启动命令提示符并键入git。如果您没有得到git命令列表,那么它没有正确设置。

最后,启动命令提示符并输入:

git config --global credential.helper winstore

或者你可以手动编辑你的.gitconfig文件:

[credential]
helper = winstore

一旦你完成了这些,你就可以通过Windows凭据管理器来管理你的git凭据,你可以通过Windows控制面板拉出凭据管理器。

为了其他人对这个问题的理解,我在Ubuntu中也有同样的问题(即我的密码没有缓存,尽管已经设置了正确的选项,并得到错误git: 'credential-cache' is not a git command.),直到我发现此特性仅在Git 1.7.9及以上版本中可用

Ubuntu的旧版本(Natty;我是一个顽固的Gnome 2用户)回购中的版本是git版本1.7.4.1。我使用以下PPA进行升级: https://launchpad.net/~git-core/+archive/ppa < / p >

现在有一个更简单的方法来设置Git密码缓存,在Windows上双击一个小exe。该程序仍然基于投票最多的答案所提到的git-credential-winstore,尽管该项目已从GitHub移动到http://gitcredentialstore.codeplex.com/

你可以从这篇博客文章中下载exe(和Mac的二进制文件):https://github.com/blog/1104-credential-caching-for-wrist-friendly-git-usage

为了其他人有这个问题-我降落在这里,因为我试图得到可爱的我如何设置一个新的github存储库,但每设置页面凭据帮助不工作,除非你克隆一个存储库。

提示:凭据帮助器仅在克隆HTTPS存储库URL时有效。如果使用SSH存储库URL,则使用SSH密钥进行身份验证。本指南提供生成和使用SSH密钥对的帮助。

我在windows7上使用AptanaStudio3时遇到了这个问题。帮助我:

git config --global credential.helper wincred

看起来git现在附带了Windows (msysgit)上的wincred:

git config --global credential.helper wincred
< p > 参考: https://github.com/msysgit/git/commit/e2770979fec968a25ac21e34f9082bc17a71a780 < / p >

对于git版本>=1.7.10(使用git --version检查),使用以下方法(来自参考):

窗口:

git config --global credential.helper wincred

麦克:

git config --global credential.helper osxkeychain
  1. 运行git config --global credential.helper wincred
  2. 转到:CONTROL PANEL\CREDENTIAL MANAGER\WINDOWS CREDENTIAL\GENERIC CREDENTIAL
  3. Internet or network address: add中单击“添加证书” git:https:// {username} .github.com
    User: {name}
    Password:{密码}< / >

我通过从特定项目的配置中删除credential部分来修复这个问题:

  • 只是键入:git config -e
  • 在编辑器中,我删除了整个section [credential] helper = cache

这就消除了恼人的信息:

git: 'credential-cache' is not a git command. See 'git --help'.

我知道我有点晚了,但我遇到了完全相同的问题 在我的git配置中,我有两个条目凭据

在我的。gitconfig文件中

[credential]
helper = cached
[credentials]
helper = wincred

解决方案:更改我的.gitconfig文件的设置如下

[credential]
helper = wincred
[credentials]
helper = wincred

类似的错误是'credential-wincred' is not a git command

那些公认的、流行的答案现在已经过时了。

wincred用于git-credential-winstore项目,也就是不再维护

它被由微软开源维护的Git-Credential-Manager-for-Windows取代。

从上面的链接下载zip文件,并提取内容到

\cygwin\usr\libexec\git-core

(或\cygwin64\usr\libexec\git-core)

然后启用它(通过设置全局.gitconfig) -执行:

git config --global credential.helper manager

如何使用

不需要进一步配置。

当需要凭据时,它[自动]工作。

例如,当推送到Azure DevOps时,它会打开一个窗口并初始化oauth2流以获取您的令牌。

裁判:

我们的Azure DevOps存储库在域名更改后也遇到了同样的问题,即从@xy.com更改为@xyz.com。为了解决这个问题,我们生成了一个新的个人访问令牌,具有以下权限:

Code: read &写 包装:读< / p >

然后我们打开Windows凭据管理器,添加一个新的通用Windows凭据,详细信息如下:

因特网或网络地址: "git:{projectname}@dev.azure.com/{projectname}" -或者你应该在这里使用你的git存储库名称 用户名: "Personal Access Token"
. 用户名: "Personal Access Token"
. 用户名: "Personal Access Token 密码:< /强> {生成的个人访问令牌}

后来我们所有的git操作都恢复正常了。希望这能帮助到其他人!

在mac上执行以下命令:

git config --global credential.helper osxkeychain

我最初的答案对我自己来说也不是很有用,所以我进一步研究了一下,发现了一个破解方法(尽管有点复杂)。

所以,我在MSYS2下使用git,我想使用credential-cache,只是暂时记住我的密码(我还没有看到这样的用例与wincred或其他适用于windows的方法)。

基本上,这需要在https://github.com/git/git/blob/55144cc/builtin/credential-cache--daemon.c#L239中进行修改——而不是在这一行中进行die-ing,我们想继续。

因此,首先,我们想要在MSYS2下构建git

  • 问题1:你不能在MSYS2下构建正确的https://github.com/git/git,链接阶段将失败与“;Src /git/cache.h:1262: undefined reference to ' win32_has_dos_drive_prefix'"类似的信息

因此,我们需要构建MSYS2中使用的实际git。首先,检查版本:

$ git --version
git version 2.33.0
$ pacman -Ss git | grep installed # msys/git 2.33.0-1 (VCS) [installed]

然后,根据https://www.msys2.org/wiki/Creating-Packages/,我们可以这样做:

$ git clone "https://github.com/msys2/MSYS2-packages"
$ cd MSYS2-packages/
$ cd git
$ makepkg -sCLf
==> Making package: git 2.33.0-1 (Thu, Sep 23, 2021 12:47:33 PM)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Installing missing dependencies...
...
make[1]: Entering directory '/c/src/MSYS2-packages/git/src/git-2.33.0'
make[1]: 'GIT-VERSION-FILE' is up to date.
make[1]: Leaving directory '/c/src/MSYS2-packages/git/src/git-2.33.0'
sed -e '1s|#!.*/sh|#!/bin/sh|' git-subtree.sh >git-subtree
chmod +x git-subtree
make: Leaving directory '/c/src/MSYS2-packages/git/src/git-2.33.0/contrib/subtree'
==> Starting check()...

注意:

  • 这个构建过程首先在ASCIIDOC/XMLTO部分中结束,在我的机器上需要半个小时
  • 然后它结束在*** prove ***部分,这需要更长的时间,但可以用Ctrl-C中断,并且构建的可执行文件将不会被擦除。

现在我们想在源代码中做一个hack;注意:

  • 如果我们在源代码中做一个hack,我们做想要使用makepkg -sCLf,因为这将擦除源目录(连同所有构建的.exe工件),然后在构建之前重构它

因此,我们使用sed创建hack,然后构建:

$ sed -i 's/die(_(permissions_advice), dir);/fprintf(stderr, "Permissions on cached credentials socket directory %s are too loose, but HACK: going on\\n", dir);/' ./src/git-2.33.0/builtin/credential-cache--daemon.c
$ (cd src/git-2.33.0/; make)
CC builtin/credential-cache--daemon.o
LINK git.exe
...
SUBDIR templates

在这一点上,请注意,黑客最终至少在三个可执行文件中结束,这可以通过以下方式确认:

$ grep -ao ....HACK........ ./src/git-2.33.0/git-credential-cache--daemon.exe
$ grep -ao ....HACK........ ./src/git-2.33.0/git-credential-cache.exe
$ grep -ao ....HACK........ ./src/git-2.33.0/git.exe

... 我只能把这三个都换掉后才能让它工作:

# backup the original files:


$ mv /usr/lib/git-core/git-credential-cache--daemon.exe /usr/lib/git-core/__git-credential-cache--daemon_orig.exe
$ mv -v /usr/lib/git-core/git-credential-cache.exe /usr/lib/git-core/__git-credential-cache__orig.exe
$ mv -v /usr/bin/git.exe /usr/bin/__git_orig.exe
$ mv -v /usr/lib/git-core/git.exe /usr/lib/git-core/__git_orig.exe


# copy over the hacked files:


cp -v ./src/git-2.33.0/git-credential-cache--daemon.exe /usr/lib/git-core/
cp -v ./src/git-2.33.0/git-credential-cache.exe /usr/lib/git-core/
cp -v ./src/git-2.33.0/git.exe /usr/bin/
cp -v ./src/git-2.33.0/git.exe /usr/lib/git-core/

在这一点上,credential-cache开始工作也为我在MSYS2(缓存密码有限的时间);它只是在启动时转储了被黑的行:

$ git pull
Password for 'https://user@git.mysite.com':
Permissions on cached credentials socket directory /home/user/.cache/git/credential are too loose, but HACK: going on
Already up to date.


# second pull, password is cached
$ git pull
Already up to date.

有点棘手,但似乎有用。

PS:一个棘手的事情是,我最初将die替换为printfstdout,但这一直失败;事实证明,stdout是用于进程间通信的,为了使其成功,显然有一些东西在stdout上回答ok\0,这是三个字节;所以解决方案是将通知打印到stderr


(原来的答案):

虽然没有完全回应这个问题,但这是我能找到的最合适的问题,作为回答:

我在Windows 10的MSYS2下使用git,目前有这个版本:

$ git --version
git version 2.32.0

我通常只想让git缓存我的密码一段有限的时间(可能10分钟左右),然后忘记它;我还没有看到wincred或其他windows特定的凭据管理器与该用例的使用。

话虽如此,但对我来说,这是一种“简单的解决方法”。基本上,证书管理器第一次运行是没问题的。只有在以后的使用中,我才能得到:

$ git push
Password for 'http://user@githost.example.com':
fatal: The permissions on your socket directory are too loose; other
users may be able to read your cached credentials. Consider running:


chmod 0700 /home/user/.cache/git/credential
fatal: cache daemon did not start:
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
...

因此,基本上,修复是删除credential目录-此后,凭据缓存管理器就像第一次一样运行,并在有限的时间内缓存密码-正如我想要的那样:

$ rm -rf ~/.cache/git/credential




# note below, the very first pull still asks for a password:


$ git pull
Password for 'http://user@githost.example.com':
Already up to date.


# ... but the second pull does not, it uses credentials cache


$ git pull
Already up to date.

对我来说足够好了,我猜:)

编辑:不太好,我有过这样的经历,如果你尝试拉另一个标签,错误返回。

< p > 10月。2022 for Git 2.38.1+:
GCM no core < / p >

warning: git-credential-manager-core被重命名为git-credential-manager
warning:参见https://aka.ms/gcm/rename获取更多信息

Git for Windows (2.38.1.windows。2022年10月1日)

 git config credential.helper
manager


where git-credential-manager-core
c:\Program Files\Git\mingw64\bin\git-credential-manager.exe

直到2022年10月,它是manager-core

这是在GCM (Git凭证管理器):microsoft/Git-Credential-Manager/之后

Git凭据管理器(GCM)是基于net构建的安全Git凭据帮助器,可在Windows、macOS和Linux上运行。它旨在为每个主要的源代码控制托管服务和平台提供一致和安全的身份验证体验,包括多因素身份验证。

GCM支持(按字母顺序)Azure DevOps, Azure DevOps Server(以前的Team Foundation Server), Bitbucket, GitHub和GitLab。
与Git的内置凭据助手 (Windows: wincred, macOS: osxkeychain, Linux: gnome-keyring/libsecret)相比,后者仅提供用户名/密码的单因素身份验证支持

GCM替换了基于。net框架的Git凭证管理器的Windows和基于java的Git凭证管理器Mac和Linux

注意,最新版本v2.0.866 (november 2022)从可执行项中删除-core后缀(551年公关)

将主条目可执行文件从git-credential-manager-core(.exe)重命名为git-credential-manager(.exe),现在旧的GCM4W已经作为一个选项从Git for Windows项目中删除了(GCMC项目已经重命名)。

为了在一定程度上帮助迁移,可以为原始可执行文件名称"git-credential-manager-core(.exe)"创建符号链接和shim/copy-executables;对于没有更新到新版本的消费者。


在Git 2.34(2021年Q4)中,unix套接字开始被考虑用于Git for Windows:

参见提交bb390b1提交245670 c提交0 fdcfa2 (14 Sep 2021) by 卡洛·马塞洛·阿里纳斯Belón (carenas)
(由Junio C Hamano—gitster in 提交c2e7990合并,23 Sep 2021)

git-compat-util:包含windows中unix套接字的声明

署名:卡洛·马塞洛·阿里纳斯Belón

自Windows 10 1803版和Windows Server 2019版提供。

NO_UNIX_SOCKETS仍然是Windows版本的默认值,因为它们需要与Windows 7之前的版本保持向后兼容性,但允许包括头文件。

在旧的Ubuntu Linux系统上:

git config --global credential.helper store

我刚刚真的经历了这个!

  1. 下载Git Credential Manager Core并安装:https://github.com/microsoft/Git-Credential-Manager-Core#download-and-install
  2. 到GitHub上的Account Settings > Emails。你应该会看到这样的东西: 李enter image description here < / >
  3. 突出显示的电子邮件是系统生成的,以保持您的私人电子邮件私密性。现在复制它,并在下一步中使用它
  4. 配置git:
 git config --global user.name "yourusername"
git config --global user.email "1234567+yourgithubusername@users.noreply.github.com"
git config --global credential.helper cache

现在,git命令应该可以再次工作了。

小提示:我使用的是Linux Mint。YMMV

附加说明:在Debian版本的Git Credential Manager Core v 2.0.567中有错误。请在新版本发布之前安装v2.0.474

另一个有效的解决方法是:

1-进入控制面板,像这样添加github.com的凭据:

Windows Credentials for GitHub

2-进入CMD并输入这些命令:

  • a- cd %localappdata%\Atlassian\SourceTree\git_local\mingw32\bin\
  • B - git.exe配置——编辑——系统
  • c-纠正最后一行 Helper = manager
  • d-保存新的配置文件,点击CTRL+C,然后输入:wq,然后按Enter

update configuration: helper = manager

这对我来说太完美了!

在我的.gitconfig的[credential]部分中有三个不同的helper=条目,其中一个为空。删除另外两个并保留helper=wincred为我解决了这个问题。

BTW:我不知道为什么,但我没有立即找到我的.gitconfig。然后我在c:\ users \username中找到了它

当我试图使用命令“git pull”时,我也得到了类似的错误。从主分支。

Error: "git: 'credential-manager' is not a git command. See 'git --help'."

我执行下面两个命令,问题得到解决。

$ git config --global --unset credential.helper
$ git config credential.helper store

这招对我很管用:

git credential-manager-core configure

在我的案例中,这个命令解决了这个问题:

git config --global credential.helper manager-core --replace-all

使用新的网络核心凭据管理器。