przejdź do wyników w błędzie „wyłączone monity terminala” dla prywatnego repozytorium github

187

Utworzyłem prywatne przykłady repozytorium / myprivaterepo przy użyciu interfejsu użytkownika Github z mojej przeglądarki.

Potem poszedłem do mojego katalogu go (na pulpicie) i sklonowałem go:

$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo

Na razie w porządku. Utworzono plik scheduler.go, dodano do repozytorium i przekazano.

$ vim scheduler.go
$ git add scheduler.go
$ git commit
$ git push

Wszystko w porządku. Ale kiedy poszedłem do czystego laptopa i próbowałem sklonować repozytorium, dostałem błąd:

# Now on laptop, which doesn't yet know about the repo
$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo
# At this point it should ask for my user ID and password ,right? But it doesn't.
# Instead, this error occurs:
cd .; git clone https://github.com/examplesite/myprivaterepo /Users/tom/go/src/github.com/examplesite/myprivaterepo
Cloning into '/Users/tom/go/src/github.com/examplesite/myprivaterepo'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled
package github.com/examplesite/myprivaterepo: exit status 128

Dlaczego mój laptop nienawidzi mojego własnego repozytorium i jak mogę go zaakceptować? Dzięki.

tomcam
źródło
10
To nie jest gobłąd, gitzwraca „monity terminala wyłączone”. Czy umiesz działać git clone https://github.com/examplesite/myprivaterepona swoim laptopie?
JimB
1
Dziękuję Ci. Klon git zadziałał. A potem idź. O co chodzi? Czy za każdym razem muszę „tak pompować” pompę, czy też coś źle skonfigurowałem?
tomcam
1
@tomcam, możesz dodać klucze ssh do konta github i idź get będzie działać od samego początku, patrz help.github.com/articles/generating-ssh-keys
alex vasi
@alexvasi: to działa tylko wtedy, gdy sam sklonuje repo przez ssh, ponieważ będzie żądał, https://github.com/jeśli ścieżka importu nie istnieje. Proces git powinien móc pytać o nazwę użytkownika / hasło, więc musi być coś innego w konfiguracji laptopa - inna powłoka, inna .gitconfig, zmienna env itp.
JimB
Wszystko to pomogło mi, ale nie jestem pewien, jak oznaczyć jako odebrane i / lub rozwiązane. Oto co mam do tej pory.
tomcam

Odpowiedzi:

173

go get domyślnie wyłącza „monit terminala”. Można to zmienić, ustawiając zmienną środowiskową git:

env GIT_TERMINAL_PROMPT=1 go get github.com/examplesite/myprivaterepo
Morze Shafreeck
źródło
307

Uważam to za niezwykle pomocne i rozwiązało mój problem. To polecenie pozwoli Twojemu 2FA zrobić to samo (i pozwoli ci uniknąć kłopotów z wprowadzeniem nazwy użytkownika i hasła):

git config --global --add url."[email protected]:".insteadOf "https://github.com/"

Źródło: http://albertech.blogspot.com/2016/11/fix-git-error-could-not-read-username.html

Jeśli nie używasz 2FA, możesz nadal korzystać z SSH i to zadziała.

Edycja: dodano --addflagę zgodnie z sugestią slatunje .

Wylliam Judd
źródło
12
Polecam dodanie flagi --add , aby nie zastępować istniejących ustawień. Na przykład:git config --global --add url."[email protected]:".insteadOf "https://github.com/"
slatunje
Dzięki slatunje, dodałem flagę do mojej odpowiedzi na podstawie Twojej opinii.
Wylliam Judd,
5
To najlepsze rozwiązanie IMO. Bezpieczniej i mniej wysiłku (po instalacji) jest używanie kluczy SSH do uwierzytelniania zamiast nazwy użytkownika / hasła
bodecker
1
Nie rób tego w systemie Windows. Skończyło się na błędzie [email protected]: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah
1
działa również w systemie Linux. powinien działać dla wszystkich, jeśli używasz ssh globalnie
Chiptus
39

1. - go getodmówi uwierzytelnienia w wierszu polecenia. Więc musisz buforować poświadczenia w git. Ponieważ używam osx, mogę używać pomocnika poświadczeń osxkeychain.

2. Dla mnie mam 2FA włączone i dlatego nie mogę użyć mojego hasła do autoryzacji. Zamiast tego musiałem wygenerować osobisty token dostępu do użycia zamiast hasła.

  1. Instalator osxkeychain pomocnika poświadczeń https://help.github.com/articles/caching-your-github-password-in-git/
  2. Jeśli używasz TFA zamiast hasła, wygeneruj osobisty token dostępu z zakresem repozytorium https://github.com/settings/tokens
  3. git sklonował prywatne repozytorium, aby buforowało hasło git clone https://github.com/user/private_repo i użyło twojej nazwy użytkownika github.com dla nazwy użytkownika i wygenerowanego osobistego tokena dostępu dla hasła.
  4. Usunięto właśnie sklonowane repozytorium i ponownie przetestuj, aby upewnić się, że kredyty zostały zapisane w pamięci podręcznej - git clone https://github.com/user/private_repoi tym razem nie poprosono o kredyty.

    1. go get będzie działać z każdym repozytorium, do którego może uzyskać dostęp osobisty token. Może być konieczne powtórzenie kroków z innymi kontami / tokenami, ponieważ uprawnienia są różne.
Mike Graf
źródło
1
Mam 2FA i to zadziałało dla mnie - wygenerowałem token (z pełnymi uprawnieniami prywatnymi), zrobił git clonejedno z moich istniejących repozytoriów (tak naprawdę jest publiczne), został poproszony o moje username, wpisz moją nazwę użytkownika GitHub, a następnie wstaw wygenerował token dla password- usunął sklonowane repozytorium, a następnie zmienił go getpolecenie i wszystko było dobrze - dzięki! (Tutaj także OSX)
Eric Dorsey,
3
Jest to również naprawdę świetne, ponieważ możesz ograniczyć zakres tokena tylko do „odczytu” dla prywatnych repozytoriów, więc nawet jeśli w jakiś sposób dostanie się on do obrazu na wolności, mogą tylko odczytać twój kod, a nie wpychać do niego rzeczy i możesz bardzo łatwo unieważnij token. Nie pamiętam, czy mają już wbudowane automatyczne wygasanie.
dragon788,
16

Jeśli chcesz po prostu go getpracować naprawdę szybko i poruszać się wraz ze swoją pracą ...

Po prostu eksportuj GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

Zostanie teraz wyświetlony monit o podanie użytkownika / przepustki do końca sesji powłoki. Umieść to w swoim .profilelub konfiguracji gitjak wyżej, aby uzyskać bardziej trwałe rozwiązanie.

EdH
źródło
15

Narzeka, ponieważ musi używać sshzamiast, httpsale twój git jest nadal skonfigurowany z https. więc w zasadzie, jak wspomniano wcześniej, musisz włączyć monity lub skonfigurować git, aby używał sshzamiast https. prosty sposób to zrobić, wykonując następujące czynności:

git config --global --add url."[email protected]:".insteadOf "https://github.com/"

lub jeśli już używasz sshz giturządzeniem, możesz bezpiecznie edytować ~/.gitconfigi dodać następujący wiersz na samym dole

Uwaga: Obejmuje to całą SVC, kontrolę wersji źródłowej, która zależy od tego, czego dokładnie używasz, github, gitlab, bitbucket)

# Enforce SSH
[url "ssh://[email protected]/"]
  insteadOf = https://github.com/
[url "ssh://[email protected]/"]
        insteadOf = https://gitlab.com/
[url "ssh://[email protected]/"]
  insteadOf = https://bitbucket.org/
  • Jeśli chcesz wyłączyć pompki haseł, musisz buforować hasło. Aby uzyskać więcej informacji na temat buforowania hasła do github na komputerach Mac, Windows lub Linux, odwiedź tę stronę .

  • Aby uzyskać więcej informacji na temat dodawania ssh do konta github, odwiedź tę stronę .

Co ważniejsze, jeśli jest to prywatne repozytorium dla firmy lub dla ciebie, może być konieczne pominięcie bazy danych proxy lub sumy kontrolnej dla takich repozytoriów, aby uniknąć ich publicznego ujawnienia.

Aby to zrobić, musisz ustawić GOPRIVATEzmienną środowiskową, która kontroluje moduły, które komenda go uważa za prywatne (niedostępne publicznie) i dlatego NIE powinna używać bazy danych proxy ani sumy kontrolnej.

Zmienna jest oddzieloną przecinkami listą wzorców (ta sama składnia Go path.Match) prefiksów ścieżek modułów. Na przykład,

export GOPRIVATE=*.corp.example.com,github.com/mycompany/*

Lub

go env -w GOPRIVATE=github.com/mycompany/*
  • Aby uzyskać więcej informacji na temat rozwiązywania problemów z sprawdzaniem poprawności sum kontrolnych pakietów / modułów, przeczytaj ten artykuł .
  • Aby uzyskać więcej informacji na temat modułów go 13 i nowych ulepszeń, sprawdź Moduły Go 1.13 Informacje o wersji .

Ostatnią rzeczą, o której nie można zapomnieć, wciąż można skonfigurować go getuwierzytelnianie i pobieranie https, wystarczy dodać następujący wiersz do$HOME/.netrc

machine github.com login USERNAME password APIKEY
  • W przypadku kont GitHub hasłem mogą być osobiste tokeny dostępu .
  • Aby uzyskać więcej informacji o tym, jak to zrobić, sprawdź stronę Idź FAQ .

Mam nadzieję, że pomoże to społeczności i pozwoli zaoszczędzić czas innych osób na szybkie rozwiązanie opisanych problemów. zostaw komentarz, jeśli chcesz uzyskać więcej wsparcia lub pomocy.

Muhammad Soliman
źródło
GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) jest jedyną rzeczą, która działała dla mnie. Mógłbym zasugerować umieszczenie tego pod własnym nagłówkiem lub nawet w odpowiedzi, aby podkreślić go nieco bardziej.
Bernhard Barker
1

Jeśli skonfigurujesz gitconfig za pomocą tej opcji, później wystąpi problem z klonowaniem innych repozytoriów GitHub

git config --global --add url. "[email protected]". Instead, "https://github.com/"

Zamiast tego zalecamy skorzystanie z tej opcji

echo "export GIT_TERMINAL_PROMPT=1" >> ~/.bashrc || ~/.zshrc

i nie zapomnij wygenerować tokena dostępu z prywatnego repozytorium. Po wyświetleniu monitu o podanie hasła wystarczy wkleić token dostępu. Szczęśliwy klon :)

cooljl86
źródło
0

Miałem ten sam problem w systemie Windows „błąd: nie udało się wykonać skryptu zachęty (kod wyjścia 1) krytyczny: nie można odczytać nazwy użytkownika dla„ https://github.com ”: brak błędu” podczas próby zalogowania się do github poprzez okno logowania. Kiedy anulowałem okno dialogowe, git poprosił mnie o login i hasło w wierszu poleceń i działało dobrze.

Nick Proto
źródło