当我尝试使用Windows上的GIT Bash拉取代码时出现以下问题
我已经尝试实施此处提供的已接受解决方案:
但问题仍然存在。添加/删除原点后,我仍然得到相同的错误。
fatal: could not read Username for 'https://github.com': No such file or directory
答案 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)
答案 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
如果它不是新的存储库,请忽略前三行。
更长的说明:
刚出现同样的问题,因为上述答案没有帮助我,我决定发布这个对我有用的解决方案。
几个笔记:
作为命令行工具,我使用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存储库的访问权限从私有更改为公共。