致命:无法读取“ https://github.com”的用户名:无此文件或目录


95

当我尝试在Windows上使用git Bash提取代码时遇到以下问题:

fatal: could not read Username for 'https://github.com': No such file or directory

我已经尝试实现此处提供的可接受的解决方案:

...但是问题仍然存在。添加/删除原点后,我仍然遇到相同的错误。


您配置了用户名吗?git config --global user.name "Your Name Here"
劳尔·安德烈斯

我已经尝试过了,但是它不是指我的git用户名,我认为这给我在这里调用的git存储库的用户名带来了问题。
noobie-php

我想知道是否可以通过改用SSH来解决?albertech.blogspot.com/2016/11/…–
jar

Answers:


68

请按照以下步骤在此处设置SSH密钥:https : //help.github.com/articles/generating-ssh-keys

要么

git remote add origin https://{username}:{password}@github.com/{username}/project.git

3
第二个选项不起作用,因为我已经添加了“ origin github”。我删除了原点[git remote remove origin],然后用我的用户名和密码写了答案中的内容,并且工作正常。
P_Rein

9
除了删除和重新添加来源之外,您还可以使用git remote set-url origin https://{username}:{password}@github.com/...
Chris

10
@Chris解决方案可以工作,但是它存储了用户的github帐户密码,只需键入即可读取它git remote -v
Jefferson Silva

克里斯的选择对我有用!我跟着杰佛逊·席尔瓦(Jefferson Silva)跟进,效果很好。仍有error: cannot spawn sh: No such file or directory消息...
TheSciGuy,

14

我面临着完全相同的问题。当我使用HTTPS URL克隆然后尝试在Windows上使用Git Bash推送更改时,会发生此问题:

git clone https://github.com/{username}/{repo}.git

但是,当我使用SSH URL进行克隆时,并未发生此问题:

git clone git@github.com:{username}/{repo}.git

3
好的,但是为什么会这样呢?
吉利2016年

:由于msysgit一个错误的github.com/msysgit/msysgit/issues/153
Fayaz

我在gitlab上运行的Docker容器中收到此消息。基本映像是python:3.7-slim。因此,它与Windows不相关。
马丁·托马

就我而言,这是使用ssh://git.gartner.com的组织回购
Ankush

11

请注意,如果出现此错误,请执行以下操作:

fatal: could not read Username for 'https://github.com': No error

然后,您需要将Git更新到版本2.16或更高版本。


10

对我而言,以上建议均无济于事,我git pull在jenkins shell脚本中使用,显然它使用了错误的用户名。我花了很长时间才找到一种无需切换到SSH即可解决该问题的方法。

在您用户的文件夹中,创建.gitconfig文件(如果您还没有的话),并将您的凭据设置为以下格式:https://user:pass@example.com,更多信息。在您的.gitconfig文件链接到这些凭据之后,在我看来,它是:

[credential] helper = store --file /Users/admin/.git-credentials

现在git无论如何都将始终使用这些凭据。我希望它能帮助某人,就像它帮助了我一样。


对我来说,只有当我把工作[credential] helper = store --file /..../.git-credentials.git/config我的工作目录
基里尔Oficerov

5

我在这里找到了答案:

编辑~/.gitconfig并添加以下内容:

[url "git@github.com:"]
 insteadOf = https://github.com/

尽管它解决了一个不同的问题,但错误代码是相同的...


4

如果要继续使用https而不是ssh,并且出于安全原因,请避免键入用户名和密码。

您也可以尝试Github上的OAuth令牌,那么你可以做 git config remote.origin.url 'https://{token}@github.com/{username}/{project}.git'git remote add origin 'https://{token}@github.com/{username}/{project}.git'

这对我有用!


4

尝试克隆无效的HTTP URL时也会发生此错误。例如,这是我在尝试克隆距离几个字符的GitHub URL时遇到的错误:

$ git clone -v http://github.com/username/repo-name.git
Cloning into 'repo-name'...
Username for 'https://github.com': 
Password for 'https://github.com': 
remote: Repository not found.
fatal: Authentication failed for 'https://github.com/username/repo-name.git/'

但是,它实际上发生在Emacs内部,因此Emacs中的错误如下所示:

fatal: could not read Username for ’https://github.com’: No such device or address

因此,与其说一个有用的错误,不是那个URL上没有这样的仓库,不如说是,给了我一个疯狂的追赶,直到我终于意识到URL不正确。

这是git版本2.7.4。

我将其发布在这里是因为它在一个月前(又一次又一次)发生在我身上,再次将我送往追赶相同的野鹅。> :(


3

简短答案:

git init
git add README.md
git commit -m "first commit"


git remote add origin https://github.com/{USER_NAME}/{REPOSITORY_NAME}.git
git push --set-upstream origin master

如果它不是新的存储库,请忽略前三行。

较长的说明:

只是遇到了同样的问题,上述答案中的任何一个都不对我有帮助,所以我决定发布适用于我的解决方案。

几点注意事项:

  • SSH密钥已生成
  • SSH密钥已添加到github,仍然出现此错误。
  • 我在GitHub上为此项目创建了一个新存储库,并按照说明的步骤进行操作

作为命令行工具,我使用了GitShell(对于Windows,我使用了Mac上的Terminal.app)。
GitShell是官方的GitHub工具,可以从https://windows.github.com/下载

希望这对有相同问题的任何人有所帮助。



1

这是您在系统凭据缓存中存储的凭据存在的问题。您可能已将配置变量'credential.helper'设置为wincred或winstore,但无法清除它。如果启动控制面板并启动Credential Manager小程序,请在通用凭据部分中查找标有“ git:https : //github.com ”的项目。如果删除它们,则下次将重新创建,但是凭据帮助器实用程序将要求您提供新的凭据。


您指的是什么工具,我目前在Windows上使用Bash
noobie-php 2014年

是的-因此,请查看Credential Manager控制面板小程序。如前所述,如果没有任何内容,请检查您的config- git config --global -l | grep credential。如果有任何输出,则该实用程序将在您推送时尝试将您存储的凭据提供给服务器。
patthoyts 2014年

1
队友我觉得这个心不是问题让我来解释一下,可能你会得到什么,我想说,git remote add origin https://github.com/username/Hello-World.gitusername到这个混帐回购协议链路制造麻烦被栓,我不认为我自己的用户名在这里制造麻烦。据我所知,凭证管理器有助于管理个人凭证,而不是存储库的凭证。
noobie-php

1

像这样替换您的远程URL:

git remote set-url origin https://<username>@github.com/<username>/<repo>.git

所有其他帖子都表明将密码放在远程URL中,然后将其以纯文本格式存储在磁盘上-安全性否。仅需要用户名,凭据存储区将请求您的github用户名/密码,然后安全地存储它以供自动使用。

1

TL; DR:检查是否可以读写/dev/tty。如果否,并且您曾经su打开过外壳,请检查是否正确使用了它。

我遇到了同样的问题,但是在Linux上,我已经找到了问题。我没有存储我的凭据,所以我总是在提示时输入它们:

Username for 'https://github.com': foo
Password for 'https://foo@github.com': 

git处理http(s)连接的方式正在使用中,/usr/lib/git-core/git-remote-https 您可以在此处查看strace:

stat("/usr/lib/git-core/git-remote-https", {st_mode=S_IFREG|0755, st_size=1366784, ...}) = 0
pipe([9, 10])                           = 0
rt_sigprocmask(SIG_SETMASK, ~[RTMIN RT_1], [], 8) = 0
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f65398bb350) = 18177
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
close(10)                               = 0
read(9, "", 8)                          = 0
close(9)                                = 0
close(5)                                = 0
close(8)                                = 0
dup(7)                                  = 5
fcntl(5, F_GETFL)                       = 0 (flags O_RDONLY)
write(6, "capabilities\n", 13)          = 13
fstat(5, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
read(5, "fetch\noption\npush\ncheck-connecti"..., 4096) = 38
write(6, "option progress true\n", 21)  = 21
read(5, "ok\n", 4096)                   = 3
write(6, "option verbosity 1\n", 19)    = 19
read(5, "ok\n", 4096)                   = 3
stat(".git/packed-refs", {st_mode=S_IFREG|0664, st_size=675, ...}) = 0
lstat(".git/objects/10/52401742a2e9a3e8bf068b115c3818180bf19e", {st_mode=S_IFREG|0444, st_size=179, ...}) = 0
lstat(".git/objects/4e/35fa16cf8f2676600f56e9ba78cf730adc706e", {st_mode=S_IFREG|0444, st_size=178, ...}) = 0
dup(7)                                  = 8
fcntl(8, F_GETFL)                       = 0 (flags O_RDONLY)
close(8)                                = 0
write(6, "list for-push\n", 14)         = 14
read(5, fatal: could not read Username for 'https://github.com': No such device or address
"", 4096)                       = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=18177, si_uid=1000, si_status=128, si_utime=6, si_stime=2} ---
exit_group(128)                         = ?
+++ exited with 128 +++

所以我尝试直接调用它:

echo "list for-push" | strace /usr/lib/git-core/git-remote-https my

结果:

poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
recvfrom(3, "\27\3\3\1\32", 5, 0, NULL, NULL) = 5
recvfrom(3, "\307|4Q\21\306\334\244o\237-\230\255\336\25\215D\257\227\274\r\330\314U\5\17\217T\274\262M\223"..., 282, 0, NULL, NULL) = 282
openat(AT_FDCWD, "/dev/tty", O_RDONLY)  = -1 ENXIO (No such device or address)
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=2995, ...}) = 0
read(4, "# Locale name alias data base.\n#"..., 4096) = 2995
read(4, "", 4096)                       = 0
close(4)                                = 0
openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "fatal: could not read Username f"..., 83fatal: could not read Username for 'https://github.com': No such device or address
) = 83
exit_group(128)                         = ?
+++ exited with 128 +++

在这里来到我这里:

openat(AT_FDCWD, "/dev/tty", O_RDONLY)  = -1 ENXIO (No such device or address)
...
write(2, "fatal: could not read Username f"..., 83fatal: could not read Username for 'https://github.com': No such device or address
) = 83

git-remote-https尝试通过读取凭据,/dev/tty所以我测试了它是否有效:

$ echo ahoj > /dev/tty
bash: /dev/tty: No such device or address

但是在另一个终端:

# echo ahoj > /dev/tty
ahoj

我知道我使用切换到了该用户,su所以我退出了外壳以查看操作方法,然后发现我使用了命令,su danman -因此我再次对其进行了测试:

~# su danman -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
/root$ echo ahoj > /dev/tty
bash: /dev/tty: No such device or address

我可能忽略了该消息并继续工作,但这就是原因。当我使用正确的开关时,su - danman一切正常:

~# su - danman
danman@speedy:~$ echo ahoj > /dev/tty
ahoj

之后,git开始正常工作


1

对于在Jenkins管道中遇到此错误的用户,可以使用SSH代理插件进行修复。然后将git命令包装成这样:

sshagent(['my-ssh-key']) {
    git remote set-url origin git@github.com:username/reponame.git
    sh 'git push origin branch_name'
}


0

早些时候,当我没有被授予访问存储库的权限时,我还把SSH pubkey添加到了gitlab中。在这一点上,我可以访问存储库并运行go mod供应商,这与您遇到的问题相同。(可能是由于缓存)

go mod vendor

go: errors parsing go.mod:
/Users/macos/Documents/sample/go.mod:22: git ls-remote -q https://git.aaa.team/core/some_repo.git in /Users/macos/go/pkg/mod/cache/vcs/a94d20a18fd56245f5d0f9f1601688930cad7046e55dd453b82e959b12d78369: exit status 128:
    fatal: could not read Username for 'https://git.aaa.team': terminal prompts disabled

经过一段时间的尝试,我决定删除SSH密钥,并在终端提示中填写用户名和密码。一切都很好!


0

我在IntelliJ IDE中遇到了同样的问题,对我来说,以上建议均无济于事。对我有用的是将Git存储库的访问权限从私有更改为公共。


-1

尝试使用CreativeMagic解决方案时,将确认凭据问题:

提示>>>' https://github.com '的用户名

所以,我用

git remote set-url --add origin http://github.com/user/repo

git push --set-upstream origin master

1
那就是为什么我永远都不会帮助别人的原因
Tuxun
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.