ร้ายแรง: ไม่สามารถอ่านชื่อผู้ใช้สำหรับ 'https://github.com': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


99

ฉันมีปัญหาต่อไปนี้เมื่อฉันพยายามดึงโค้ดโดยใช้ git Bash บน Windows:

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

ฉันได้ลองใช้โซลูชันที่ยอมรับแล้วที่นี่:

... แต่ปัญหายังคงอยู่ หลังจากเพิ่ม / ลบจุดเริ่มต้นฉันยังคงได้รับข้อผิดพลาดเดียวกัน


คุณกำหนดชื่อผู้ใช้หรือไม่ git config --global user.name "Your Name Here"
Raul Andres

ฉันลองแล้ว แต่มันไม่ได้อ้างถึงชื่อผู้ใช้ git ของฉันฉันคิดว่ามันทำให้เกิดปัญหากับชื่อผู้ใช้ของที่เก็บ git ที่ฉันเรียกที่นี่
noobie-php

คำตอบ:


70

ทำตามขั้นตอนเพื่อตั้งค่าคีย์ SSH ที่นี่: https://help.github.com/articles/generating-ssh-keys

หรือ

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

3
ตัวเลือกที่ 2 ใช้ไม่ได้เพราะฉันได้เพิ่ม 'origin github' แล้ว ฉันลบต้นทาง [git remote remove origin] แล้วเขียนสิ่งที่อยู่ในคำตอบด้วยชื่อผู้ใช้และรหัสผ่านของฉันและมันก็ใช้ได้ดี
P_Rein

10
แทนที่จะลบและเพิ่มต้นทางใหม่คุณสามารถเปลี่ยน URL ได้โดยใช้git remote set-url origin https://{username}:{password}@github.com/...
คริส

10
โซลูชัน @Chris ใช้งานได้ แต่จะจัดเก็บรหัสผ่านบัญชี github ของผู้ใช้และปล่อยให้อ่านได้โดยพิมพ์git remote -v
Jefferson Silva

ตัวเลือกของคริสใช้ได้ผลกับฉัน! ฉันติดตามผลของเจฟเฟอร์สันซิลวาและมันก็ใช้ได้ดี ยังคงมีerror: cannot spawn sh: No such file or directoryข้อความ ...
TheSciGuy

14

ฉันประสบปัญหาเดียวกันแน่นอน ปัญหานี้เกิดขึ้นเมื่อฉันโคลนโดยใช้ HTTPS URL แล้วพยายามพุชการเปลี่ยนแปลงโดยใช้ Git Bash บน Windows โดยใช้:

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

อย่างไรก็ตามเมื่อฉันใช้ SSH URL เพื่อโคลนปัญหานี้ไม่เกิดขึ้น:

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

3
โอเค แต่ทำไมสิ่งนี้ถึงเกิดขึ้น?
Gili

เนื่องจากข้อผิดพลาดใน msysgit: github.com/msysgit/msysgit/issues/153
Fayaz

ฉันได้รับข้อความนี้ภายในคอนเทนเนอร์ Docker ที่ทำงานบน gitlab รูปฐานคือpython:3.7-slim. ดังนั้นจึงไม่เกี่ยวข้องกับ Windows
Martin Thoma

ในกรณีของฉันมันเป็นการ repo องค์กรโดยใช้ ssh: //git.gartner.com
Ankush

11

สำหรับฉันไม่มีอะไรทำงานจากที่แนะนำข้างต้นฉันใช้git pullจาก jenkins shell script และดูเหมือนว่าจะใช้ชื่อผู้ใช้ผิด ฉันใช้เวลาหลายปีก่อนที่ฉันจะพบวิธีแก้ไขโดยไม่ต้องเปลี่ยนไปใช้ 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

11

โปรดทราบว่าหากคุณได้รับข้อผิดพลาดนี้แทน:

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

จากนั้นคุณต้องอัปเดต Git เป็นเวอร์ชัน2.16หรือใหม่กว่า


7

ฉันพบคำตอบของฉันที่นี่ :

แก้ไข~/.gitconfigและเพิ่มสิ่งต่อไปนี้:

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

แม้ว่าจะแก้ปัญหาที่แตกต่างกัน แต่รหัสข้อผิดพลาดก็เหมือนกัน ...


6

หากคุณต้องการใช้ 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

ข้อผิดพลาดนี้อาจเกิดขึ้นได้เมื่อพยายามโคลน URL HTTP ที่ไม่ถูกต้อง ตัวอย่างเช่นนี่เป็นข้อผิดพลาดที่ฉันได้รับเมื่อพยายามโคลน URL ของ GitHub ที่มีอักขระไม่กี่ตัว:

$ 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

ดังนั้นแทนที่จะมีข้อผิดพลาดที่เป็นประโยชน์ที่บอกว่าไม่มี repo ดังกล่าวใน 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 ฉันใช้ Terminal.app บน Mac)
GitShell เป็นเครื่องมือ GitHub อย่างเป็นทางการสามารถดาวน์โหลดได้จากhttps://windows.github.com/

หวังว่านี่จะช่วยทุกคนที่มีปัญหาเดียวกัน


2

ฉันแก้ไขสิ่งนี้โดยการติดตั้ง Git เวอร์ชันที่ใหม่กว่า รุ่นที่ผมติดตั้ง 2.10.2 จากhttps://git-scm.com ดูโพสต์ล่าสุดที่นี่: https://www.bountysource.com/issues/31602800-git-fails-to-authenticate-access-to-private-repository-over-https

ด้วย Git Bash ที่ใหม่กว่าหน้าต่างตัวจัดการข้อมูลรับรองจะปรากฏขึ้นและคุณสามารถป้อนชื่อผู้ใช้และรหัสผ่านของคุณและใช้งานได้!


1

นี่เป็นปัญหาเกี่ยวกับข้อมูลประจำตัวที่คุณจัดเก็บไว้ในแคชข้อมูลรับรองของระบบ คุณอาจตั้งค่าตัวแปร config 'credential.helper' เป็น wincred หรือ winstore และไม่สามารถล้างข้อมูลได้ หากคุณเริ่มแผงควบคุมและเปิดแอพเพล็ตตัวจัดการข้อมูลรับรองให้มองหารายการในส่วนข้อมูลรับรองทั่วไปที่มีป้ายกำกับ "git: https://github.com " หากคุณลบสิ่งเหล่านี้สิ่งเหล่านี้จะถูกสร้างขึ้นใหม่ในครั้งต่อไป แต่ยูทิลิตี้ตัวช่วยข้อมูลรับรองจะขอข้อมูลรับรองใหม่จากคุณ


คุณหมายถึงเครื่องมืออะไรฉันกำลังใช้ Bash สำหรับ windows
noobie-php

ใช่ - ลองดูในแอพเพล็ต Credential Manager Control Panel ถ้ามีอะไรที่มีตามที่กล่าวไว้แล้วตรวจสอบการตั้งค่าของคุณ git config --global -l | grep credential- หากมีผลลัพธ์ออกมานั่นจะเป็นยูทิลิตี้ที่พยายามป้อนข้อมูลรับรองที่เก็บไว้ของคุณไปยังเซิร์ฟเวอร์เมื่อคุณพุช
patthoyts

1
Mate ฉันคิดว่านี้ไม่ได้ปัญหาผมขออธิบายอาจจะคุณจะได้รับสิ่งที่ฉันพยายามที่จะพูดซึ่งจะเชื่อมโยงไปยังลิงค์คอมไพล์ซื้อคืนนี้จะทำปัญหา I dont คิดว่าชื่อผู้ใช้ของตัวเองจะทำให้ปัญหาที่นี่ เท่าที่ฉันทราบ Credential manger ช่วยในการจัดการข้อมูลประจำตัวส่วนบุคคลไม่ใช่ข้อมูลประจำตัวของที่เก็บ 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

1
โพสต์อื่น ๆ ทั้งหมดระบุว่าใส่รหัสผ่านในรีโมต url ซึ่งจะถูกจัดเก็บข้อความธรรมดาไว้ในดิสก์ - ความปลอดภัย no no จำเป็นต้องใช้เฉพาะชื่อผู้ใช้เท่านั้นที่เก็บข้อมูลรับรองจะขอชื่อผู้ใช้ / รหัสผ่าน github ของคุณจากนั้นจัดเก็บอย่างปลอดภัยเพื่อใช้โดยอัตโนมัติ
แบ้

1

TL; DR: ตรวจสอบว่าคุณสามารถอ่าน / เขียน/dev/ttyได้หรือไม่ หากไม่มีและคุณเคยsuเปิดเชลล์ให้ตรวจสอบว่าคุณใช้ถูกต้องหรือไม่

ฉันประสบปัญหาเดียวกัน แต่บน Linux และฉันพบปัญหา ฉันไม่มีข้อมูลประจำตัวของฉันที่เก็บไว้ดังนั้นฉันจึงป้อนข้อมูลเหล่านี้เมื่อแจ้ง:

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

วิธีที่ git จัดการกับการเชื่อมต่อ http ใช้/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

หลังจากนี้คอมไพล์เริ่มทำงานอย่างถูกต้อง


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'
}

0

ลองใช้โซลูชัน CreativeMagic ปัญหาข้อมูลรับรองได้รับการยืนยัน:

แจ้ง >>> ชื่อผู้ใช้สำหรับ ' https://github.com '

ดังนั้นฉันจึงเปลี่ยน url ต้นทางของฉันด้วย

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

และ

git push --set-upstream origin master


0

ก่อนหน้านี้เมื่อฉันไม่ได้รับอนุญาตให้เข้าถึง repo ฉันได้เพิ่ม pubkey SSH ลงใน gitlab ด้วย เมื่อถึงจุดที่ฉันสามารถเข้าถึง repo และเรียกใช้ go mod vendor ปัญหาเดียวกับที่คุณเกิดขึ้น (อาจเป็นเพราะแคช)

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 และเทอร์มินัลพร้อมท์ให้กรอกชื่อผู้ใช้และรหัสผ่าน ทุกอย่างเรียบร้อยดี!


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.