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
หลังจากนี้คอมไพล์เริ่มทำงานอย่างถูกต้อง
git config --global user.name "Your Name Here"