无法读取“ https://GitHub.com”的用户名: 没有这样的文件或目录

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

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

我已经试图执行这里提出的公认的解决办法:

然而,问题仍然存在。

在添加/删除原点之后,我仍然得到相同的错误。

可以就这个问题提出建议吗?

谢谢!

425367 次浏览

这是存储在系统凭据缓存中的凭据的问题。您可能已经将配置变量“ credential.helper”设置为 wincred 或 winstore,但它无法清除该变量。如果您启动控制面板并启动凭据管理器 applet,那么在通用凭据部分中查找标记为 git:https://github.com的项目。如果删除了这些内容,那么下次将重新创建这些内容,但是凭据助手实用程序将要求您提供新的凭据。

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

或者

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

更新: 如果你得到了 “致命: 远程起源已经存在”,那么你必须使用 set-url:

git remote set-url origin https://{username}:{password}@github.com/{username}/project.git

简短的回答:

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 的官方工具,可以从 < a href = “ https://windows.GitHub.com/”rel = “ nofollow norefrer”> https://windows.GitHub.com/下载

我也面临着同样的问题。这个问题发生在我使用 HTTPS URL克隆一个回购,然后试图推动更改(在 Linux/Mac 上使用 Shell 或在 Windows 上使用 Git Bash)时:

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

然而,当我使用 SSH URL进行克隆时,这个问题并没有发生:

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

如果您已经使用 HTTPS克隆了回购协议,并且不想重做所有事情,您可以使用 set-url将原始 URL 更改为 SSH URL:

git remote set-url origin git@github.com:{username}/{repo}.git

注意: 我的 GitHub 帐户有 添加 SSH 密钥。如果不设置 SSH 密钥,这个方法也不会工作。

如果您希望继续使用 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'

这对我有用!

像下面这样替换你的远程网址:

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

我通过安装一个新版本的 Git 修复了这个问题。我安装的版本是来自 https://git-scm.com的2.10.2。请看这里的最后一个帖子: https://www.bountysource.com/issues/31602800-git-fails-to-authenticate-access-to-private-repository-over-https

使用新的 Git Bash,凭证管理器窗口将弹出,您可以输入您的用户名和密码,并且它可以正常工作!

当试图克隆无效的 HTTPURL 时,也可能发生此错误。例如,当我试图克隆一个少了几个字符的 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

所以不是一个有用的错误说,没有这样的回购在该网址,它给了我,让我在一个徒劳的追逐,直到我终于意识到,网址是不正确的。

这是在 git 2.7.4版本中实现的。

我把这个贴在这里是因为这件事一个月前发生在我身上,刚刚又发生了一次,让我又一次徒劳无功。 > :(

请注意,如果您得到的是这个错误:

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

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

尝试使用一个普通的 Windows shell,比如 CMD。

对于我来说,没有什么工作从上面建议,我使用的 git pull命令从 Jenkins Shell 脚本,显然它采取了错误的用户名。我花了很长时间才找到不切换到 SSH 的方法来修复它。

在用户的文件夹中创建。Gitconfig 文件(如果您还没有这个文件) ,并将您的凭据放在以下格式中: https://user:pass@example.com,more 信息。在你的。Gitconfig 文件链接到这些凭证,在我的例子中是:

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

现在 Git 无论如何都会使用这些凭证。我希望它能帮助别人,就像它帮助我一样。

我找到了答案:

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

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

虽然它解决了一个不同的问题,错误代码是相同的..。

DR: 检查是否可以读/写 /dev/tty。如果没有,并且您已经使用 su打开了 shell,请检查您是否正确地使用了它。

我也面临着同样的问题,但是在 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切换到了这个用户,所以我退出 shell 查看如何使用,并发现我使用了命令 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 开始正常工作

对于那些在 Jenkins 管道中得到这个错误的人,可以通过使用 SSH 代理插件来修复。然后将您的 git 命令包装在下面这样的内容中:

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

早些时候,当我没有获得访问回购协议的权限时,我还在 gitlab 中添加了 SSH pubkey。在这一点上,我可以访问回购和运行去现代化供应商,同样的问题发生。(可能是因为缓存)

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 密钥和终端提示符填写用户名和密码。那就没事了!

对我来说,有效的方法是将 Git 存储库的访问权限从私有更改为公共。

仔细检查存储库 URL,如果回购不存在,Github 将提示您登录。

我猜这可能是为了检查你是否能接触到私人回购。可能是为了更难列举私人回购协议。但这都是猜测。耸耸肩

在我的例子中,我必须在 GitHub 下设置“个人访问令牌”:

  1. 设置-> 开发人员设置

  2. 并启用 SSO。

我使用的是 GitHub actions,其中的 jobs被配置为完成一项任务。这个解决方案适用于 git 命令执行环境发生变化的所有 CI (Jenkins,Travis,Circle)。

job1: 使用 github 操作 actions/checkout@v2使用个人访问令牌(PAT)检查存储库,成功完成作业并克隆存储库。

job2: 使用命令 git fetch --tags获取标记。由于同样的错误,作业失败

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

失败原因: 当作业发生更改时,命令运行环境也发生了更改,尽管存在存储库,但需要提供 github 凭据来获取标记。

解决方案: 在获取 job2中的标记之前添加这个命令

git config remote.origin.url 'https://$\{\{ your_personal_access_token }}@github.com/$\{\{ github.repository }}'

注意: $\{\{ expression }}是 github 操作 yaml syntex,用于发现环境变量/运行表达式。

[SSH] executing...
fatal: could not read Username for 'https://github.com': No such device or address


[SSH] completed
[SSH] exit-status: 1


Build step 'Execute shell script on remote host using ssh' marked build as failure
Finished: FAILURE

索尔:- 如果存储库是私有的,并且它属于另一个人或组织,并且您是该存储库的贡献者,那么您可以从 Jenkins job 运行 git 命令,它不会提示您输入用户名和密码。

Https://abc0:abc1@github.com/abc2/abc3.git

我在 ssh 监狱(jailkit)遇到了这个问题,那里没有 /dev/tty。我用 jk _ cp 添加了这个设备文件,错误消失了。

我什么都试过了,没用。

然而,当我试图通过 git config --system --list调试时,我得到了 fatal: unable to read config file '/etc/gitconfig': No such file or directory

所以我做了下面这些,

sudo ln -s $HOME/.gitconfig /etc/gitconfig

瞧,成功了。

看看下面

Android Studio-> Preferences-> Version Control-> Git-> Use Credential Helper Android Studio-> 参数设置-> 版本控制-> Git-> 使用凭据帮助器

  1. 从 Android Studio 终端执行 git pull

    例子: test@test:~/StudioProjects/dummy-project-android$ git pull

  2. 添加用户名

    例子: test@test:~/StudioProjects/dummy-project-android$ "username"

  3. 添加用户密码

    Password for 'https://dummy-project-android@git.com':"password"

在那之后,我们可以执行剩下的操作

我通过清除无效缓存得到了答案,然后清除构建帮助了我。

  1. 选择 ’档案 > 无效缓存/重新启动’,然后单击 ‘ InvalidandRestart’ 按钮。
  2. 选择 Build > Clean Project 建造 > 清理项目,然后选择 < strong > Build > Rebuild 项目 .

对于出现这个错误的人来说,原因很简单: 您正试图从尚未设置本地 git 访问的回购中提取。对我来说,当我把一个公共回购改为私有回购时,我得到了这个错误。我现在很清楚,公共回购不需要授权,但私人回购需要授权。

希望这有助于澄清错误发生的原因以及导致错误发生的一个潜在触发因素。

这里有一个可行的简单技巧

Android 工作室-> 设置-> 版本控制-> git-> 使用凭据助手

玩得开心

如果你的回购是 二等兵那么

而不是这种格式

https://github.com/username/<project_name>.git

使用此格式

git@github.username/<project_name>.git

您可以在 SSH选项下获得正确的 URL

转到您的 Github 回购-> 点击 密码-> 选择 SSH-> 复制你的回购网址

希望这个能帮上忙。