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

时间:2014-03-03 13:04:03

标签: git github git-pull git-bash

当我尝试使用Windows上的GIT Bash拉取代码时出现以下问题

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

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

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

21 个答案:

答案 0 :(得分:43)

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

OR

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

答案 1 :(得分:10)

如果您收到此错误:

  

致命:无法读取“https://github.com”的用户名:无错误

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

答案 2 :(得分:9)

我遇到了同样的问题。当我使用HTTPS URL克隆然后尝试使用Git Bash在Windows上使用以下命令推送更改时出现此问题:

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

但是,当我使用SSH URL进行克隆时,没有出现此问题:

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

答案 3 :(得分: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/

下载

希望这对遇到同样问题的人有所帮助。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

就我而言,我必须在 github 下设置 personal access token

1_ 设置 -> 开发者设置

2_ 并启用 SSO。

也许这可以帮助被困在那里的人。

答案 6 :(得分:1)

我通过安装更新​​版本的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,会弹出凭据管理器窗口,您可以输入您的用户名和密码,它可以正常工作!

答案 7 :(得分:1)

尝试克隆无效的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

所以没有一个有用的错误,说该网址上没有这样的回购,它给了我这个,让我进行了一次疯狂的追逐,直到我终于意识到这个网址不正确。

这是使用git版本2.7.4。

我在这里张贴这个,因为它发生在我一个月前和刚刚再次发生在我身上,再次发送给我同样的疯狂追逐。 >:(

答案 8 :(得分:1)

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

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

答案 9 :(得分: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切换到了该用户,所以我退出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开始正常工作

答案 10 :(得分:1)

我找到了答案here

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

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

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

答案 11 :(得分:0)

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

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

job2: 使用命令 git fetch --tags 获取标签。作业失败,错误相同

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

失败原因:当job发生变化时,命令运行环境也发生了变化,即使repository存在,但需要提供github凭据才能获取标签。

解决方案:在获取 job2 中的标签之前添加此命令

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

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

答案 12 :(得分:0)

仔细检查仓库 URL,如果仓库不存在,Github 会提示你登录。

我猜这可能是为了检查它是否是您可以访问的私人存储库。可能会使枚举私人回购变得更加困难。但这都是猜想。 /耸肩

答案 13 :(得分:0)

之前,当我没有被授予访问存储库的权限时,我还向gitlab添加了SSH pubkey。在这一点上,我可以访问存储库并运行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密钥,并在终端提示中填写用户名和密码。一切都很好!

答案 14 :(得分:0)

对我来说,以上建议无济于事,我使用了jenkins shell脚本中的git pull,显然它使用了错误的用户名。我花了很长时间才找到无需切换到SSH的方法来修复它。

在用户文件夹中,创建.gitconfig文件(如果尚未创建),并将凭据设置为以下格式:https://user:pass@example.com,更多info。在您的.gitconfig文件链接到这些凭据之后,对于我来说是:

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

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

答案 15 :(得分:0)

致命:无法读取“ https://github.com”的用户名:没有错误

我只是用git克隆

$ git clone -v http://github.com/username/repo-name.git
Cloning into 'repo-name'...
Username for 'https://github.com': 
Password for 'https://github.com': 

现在可以了。

答案 16 :(得分:0)

尝试使用普通的Windows Shell,例如CMD。

答案 17 :(得分:0)

替换您的远程网址:

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

答案 18 :(得分:0)

如果您想继续使用https而不是ssh,并出于安全原因避免输入您的用户名和密码。

您也可以尝试Github OAuth token,然后就可以了 git config remote.origin.url 'https://{token}@github.com/{username}/{project}.git' 要么 git remote add origin 'https://{token}@github.com/{username}/{project}.git'

这对我有用!

答案 19 :(得分:-1)

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

提示&gt;&gt;&gt;&#39; https://github.com&#39;

的用户名

所以,我用

更改了我的原始网址
     <LinearLayout
        android:layout_alignParentBottom="true"
        android:id="@+id/layout_message"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true">
    <EditText
            android:id="@+id/textBody"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:minHeight="48dp"
            android:hint="@string/send_text"
            android:maxLines="5"
            android:textSize="16sp"
            android:layout_height="wrap_content"/>

    <ImageView
         ....
         ....

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

答案 20 :(得分:-3)

对我有用的是将Git存储库的访问权限从私有更改为公共。