fatal: nie można odczytać nazwy użytkownika dla „https://github.com”: nie ma takiego pliku lub katalogu

99

Mam następujący problem, gdy próbuję pobrać kod za pomocą git Bash w systemie Windows:

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

Próbowałem już wdrożyć przyjęte tutaj rozwiązanie:

... ale problem nadal występuje. Po dodaniu / usunięciu pochodzenia nadal pojawia się ten sam błąd.

noobie-php
źródło
Czy skonfigurowałeś nazwę użytkownika? git config --global user.name "Your Name Here"
Raul Andres
Próbowałem już tego, ale nie odnosi się to do mojej nazwy użytkownika git, myślę, że powoduje to problem z nazwą użytkownika repozytorium git, do którego tu dzwonię.
noobie-php

Odpowiedzi:

70

Postępuj zgodnie z instrukcjami, aby skonfigurować klucze SSH tutaj: https://help.github.com/articles/generating-ssh-keys

LUB

git remote add origin https://{username}:{password}@github.com/{username}/project.git
Tony Zampogna
źródło
3
Druga opcja nie zadziałała, ponieważ dodałem już „origin github”. Usunąłem źródło [git remote remove origin], a następnie napisałem, co jest w odpowiedzi, wraz z moją nazwą użytkownika i hasłem i działało dobrze.
P_Rein
10
zamiast usuwać i ponownie dodawać źródło, możesz po prostu zmienić adres URL za pomocągit remote set-url origin https://{username}:{password}@github.com/...
Chris
10
Rozwiązanie @Chris działa, ale przechowuje hasło do konta github użytkownika i pozwala je odczytać po prostu wpisującgit remote -v
Jefferson Silva,
Opcja Chrisa zadziałała dla mnie! Poszedłem za tym z Jeffersonem Silvą i zadziałało dobrze. Nadal mam error: cannot spawn sh: No such file or directorywiadomość ...
TheSciGuy
14

Miałem dokładnie ten sam problem. Ten problem wystąpił, gdy sklonowałem przy użyciu adresu URL HTTPS, a następnie próbowałem wypchnąć zmiany za pomocą Git Bash w systemie Windows przy użyciu:

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

Jednak gdy użyłem adresu URL SSH do sklonowania, ten problem nie wystąpił:

git clone [email protected]:{username}/{repo}.git
Fayaz
źródło
3
OK, ale dlaczego tak się dzieje?
Gili
Z powodu błędu w msysgit
Fayaz
Otrzymuję tę wiadomość w kontenerze Docker działającym na gitlab. Obraz podstawowy to python:3.7-slim. Więc to nie jest związane z Windows.
Martin Thoma
W moim przypadku było to repozytorium organizacji korzystające z ssh: //git.gartner.com
Ankush.
11

Dla mnie nic nie działało z sugerowanych powyżej, używam git pullskryptu powłoki jenkinsa i najwyraźniej bierze złą nazwę użytkownika. Spędziłem wieki, zanim znalazłem sposób, aby to naprawić bez przełączania się na SSH.

W folderze użytkownika utwórz plik .gitconfig (jeśli jeszcze go nie masz) i umieść swoje poświadczenia w następującym formacie:, https://user:[email protected]więcej informacji . Po linku do pliku .gitconfig do tych poświadczeń, w moim przypadku było to:

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

Teraz git zawsze będzie używał tych poświadczeń bez względu na wszystko. Mam nadzieję, że to komuś pomoże, tak jak pomogło mi.

Katia
źródło
dla mnie to tylko pracował, kiedy kładę [credential] helper = store --file /..../.git-credentialssię .git/configw moim katalogu roboczym
Kirill Oficerov
11

Zwróć uwagę, że jeśli zamiast tego otrzymujesz ten błąd:

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

Następnie musisz zaktualizować swój Git do wersji 2.16lub nowszej.

Rosdi Kasim
źródło
7

Znalazłem swoją odpowiedź tutaj :

edytuj ~/.gitconfigi dodaj:

[url "[email protected]:"]
 insteadOf = https://github.com/

Chociaż rozwiązuje inny problem, kod błędu jest taki sam ...

Louis Parkin
źródło
6

Jeśli chcesz nadal używać protokołu HTTPS zamiast ssh i ze względów bezpieczeństwa unikaj wpisywania nazwy użytkownika i hasła.

Możesz także wypróbować token Github OAuth , a następnie możesz to zrobić git config remote.origin.url 'https://{token}@github.com/{username}/{project}.git' lub git remote add origin 'https://{token}@github.com/{username}/{project}.git'

To działa dla mnie!

spiralmoon
źródło
4

Ten błąd może również wystąpić podczas próby sklonowania nieprawidłowego adresu URL HTTP. Na przykład jest to błąd, który otrzymałem podczas próby sklonowania adresu URL GitHub, który miał kilka znaków odstępu:

$ 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/'

Jednak faktycznie wydarzyło się to w Emacsie, więc błąd w Emacsie wyglądał następująco:

fatal: could not read Username for ’https://github.com’: No such device or address

Więc zamiast pomocnego błędu mówiącego, że nie ma takiego repozytorium pod tym adresem URL, dało mi to, wysyłając mnie na dziką gęś, aż w końcu zdałem sobie sprawę, że adres URL jest nieprawidłowy.

Dotyczy to git w wersji 2.7.4.

Publikuję to tutaj, ponieważ zdarzyło mi się to miesiąc temu i znowu przed chwilą, wysyłając mnie ponownie na tę samą dziką gęś. > :(


źródło
3

Krótka odpowiedź:

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

Zignoruj ​​pierwsze trzy wiersze, jeśli nie jest to nowe repozytorium.

Dłuższy opis:

Po prostu miałem ten sam problem, ponieważ żadna z powyższych odpowiedzi mi nie pomogła, zdecydowałem się opublikować to rozwiązanie, które działało dla mnie.

Kilka uwag:

  • Klucz SSH został wygenerowany
  • Klucz SSH został dodany do github, nadal występuje ten błąd.
  • Utworzyłem nowe repozytorium na GitHub dla tego projektu i wykonałem opisane kroki

Jako narzędzie wiersza poleceń użyłem GitShell (dla Windows używam Terminal.app na Macu).
GitShell to oficjalne narzędzie GitHub, które można pobrać ze strony https://windows.github.com/

Mam nadzieję, że to pomoże każdemu, kto ma ten sam problem.

Kreatywna magia
źródło
1

Jest to problem z poświadczeniami przechowywanymi w pamięci podręcznej danych logowania systemu. Prawdopodobnie masz zmienną konfiguracyjną „credential.helper” ustawioną na wincred lub winstore i nie można jej wyczyścić. Jeśli uruchomisz Panel sterowania i aplet Credential Manager, poszukaj elementów w sekcji ogólnych poświadczeń oznaczonej „git: https://github.com ”. Jeśli je usuniesz, zostaną one ponownie utworzone następnym razem, ale narzędzie pomocnicze poświadczeń poprosi o podanie nowych poświadczeń.

patthoyts
źródło
o jakim narzędziu się odnosisz, obecnie używam Bash dla systemu Windows
noobie-php
tak - spójrz więc na aplet Panelu sterowania modułu Credential Manager. Jeśli nie ma tam nic, jak wspomniano, sprawdź konfigurację - git config --global -l | grep credential. Jeśli pojawi się cokolwiek, będzie to narzędzie, które próbuje przekazać przechowywane poświadczenia na serwer podczas wypychania.
patthoyts
1
Mate myślę to existing problem pozwól mi wyjaśnić, może być Ci co próbuję powiedzieć, który jest przywiązany na to git repo Link robi problemy, Nie myślę, że mój własny nazwa sprawia kłopoty. O ile wiem, Menedżer poświadczeń pomaga zarządzać osobistymi danymi uwierzytelniającymi, a nie poświadczeniami repozytorium. git remote add origin https://github.com/username/Hello-World.gitusername
noobie-php
1

Zastąp zdalny adres URL w następujący sposób:

git remote set-url origin https://<username>@github.com/<username>/<repo>.git
GrossesKinoZuerich
źródło
1
Wszystkie inne posty wskazują na umieszczenie hasła w zdalnym adresie URL, który następnie zostanie zapisany jako zwykły tekst na dysku - zabezpieczenie nr. Wymagana jest tylko nazwa użytkownika, magazyn poświadczeń poprosi o podanie nazwy użytkownika / hasła github, a następnie bezpiecznie je zapisze, aby można było z nich korzystać automatycznie.
Bae
1

TL; DR: sprawdź, czy możesz czytać / pisać /dev/tty. Jeśli nie, a używałeś sudo otwierania powłoki, sprawdź, czy użyłeś jej poprawnie.

Miałem ten sam problem, ale w systemie Linux i znalazłem problem. Nie mam zapisanych moich danych uwierzytelniających, więc zawsze wprowadzam je na żądanie:

Username for 'https://github.com': foo
Password for 'https://[email protected]': 

Sposób, w jaki git obsługuje połączenia http (s) /usr/lib/git-core/git-remote-https , można zobaczyć tutaj:

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 +++

Więc spróbowałem nazwać to bezpośrednio:

echo "list for-push" | strace /usr/lib/git-core/git-remote-https my

a wynik:

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 +++

I tu przyszło do mnie:

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-httpspróbuje odczytać poświadczenia za pośrednictwem, /dev/ttywięc przetestowałem, czy działa:

$ echo ahoj > /dev/tty
bash: /dev/tty: No such device or address

Ale w innym terminalu:

# echo ahoj > /dev/tty
ahoj

Wiedziałem, że przełączyłem się na tego użytkownika, suwięc opuściłem powłokę, aby zobaczyć, jak i dowiedziałem się, że użyłem polecenia, su danman -więc przetestowałem go ponownie:

~# 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

Prawdopodobnie zignorowałem wiadomość i kontynuowałem pracę, ale to był powód. Kiedy przełączyłem używając poprawnego, su - danmanwszystko działało dobrze:

~# su - danman
danman@speedy:~$ echo ahoj > /dev/tty
ahoj

Po tym git zaczął działać poprawnie

danman
źródło
1

Dla tych, którzy otrzymują ten błąd w potoku Jenkins, można go naprawić za pomocą wtyczki agenta SSH . Następnie zawiń swoje polecenia git w coś takiego:

sshagent(['my-ssh-key']) {
    git remote set-url origin [email protected]:username/reponame.git
    sh 'git push origin branch_name'
}
Nagev
źródło
0

próbując rozwiązania CreativeMagic, problem z poświadczeniami został potwierdzony:

podpowiedź >>> Nazwa użytkownika dla „ https://github.com

Więc zmieniłem adres URL pochodzenia z

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

i

git push --set-upstream origin master
tuxun
źródło
0

Spróbuj użyć normalnej powłoki systemu Windows, takiej jak CMD.

Vajiheh habibi
źródło
0

Wcześniej, gdy nie otrzymałem pozwolenia na dostęp do repozytorium, dodałem również klucz SSH do gitlab. W tym momencie mogłem uzyskać dostęp do repozytorium i uruchomić dostawcę modów go, ten sam problem, co twój. (może z powodu pamięci podręcznej)

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

Po chwili postanawiam usunąć klucz SSH i monity terminala o podanie nazwy użytkownika i hasła. Wszystko w porządku!

Long Tran
źródło
0

Udało mi się zmienić dostęp do repozytorium Git z prywatnego na publiczny.

Kapil Garg
źródło