Перейти получить результаты в «Терминал подсказок отключен» ошибка для github частного репо


187

Я создал частный репозиторий examplesite / myprivaterepo, используя пользовательский интерфейс Github из моего браузера.

Затем я пошел в каталог go (на рабочем столе) и клонировал его:

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

Все идет нормально. Создал файл scheduler.go, добавил в репо и нажал.

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

Все в порядке. Но когда я подошел к чистому ноутбуку и попытался клонировать репо, я получил ошибку:

# 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

Почему мой ноутбук ненавидит мое собственное репо и как я могу заставить его принять его судьбу? Спасибо.


10
Это не goошибка, gitона возвращает «терминал отключен». Можете ли вы работать git clone https://github.com/examplesite/myprivaterepoна своем ноутбуке?
ДжимБ

1
Спасибо. Мерзавец клон работал. Тогда иди работай. В чем дело? Должен ли я каждый раз «заправлять насос», или я что-то неправильно настроил?
Tomcam

1
@tomcam, вы можете добавить ssh-ключи в учетную запись github и начать работать с самого начала, смотрите help.github.com/articles/generating-ssh-keys
alex

@alexvasi: это работает, только если он сначала клонирует репо поверх ssh, так как будет запрашивать, https://github.com/если путь импорта не существует. Процесс git должен иметь возможность запрашивать имя пользователя / пароль, поэтому в конфигурации ноутбука должно быть что-то другое - другая оболочка, другой .gitconfig, переменная env и т. Д.
JimB

Все это помогло мне, но я не уверен, как пометить ответ и / или решение. Вот что у меня так далеко.
Tomcam

Ответы:


175

go get отключает «подсказку терминала» по умолчанию. Это можно изменить, установив переменную окружения git:

env GIT_TERMINAL_PROMPT=1 go get github.com/examplesite/myprivaterepo

307

Я нашел это чрезвычайно полезным, и это решило мою проблему. Эта команда позволит вашему 2FA сделать свое дело (и избавит вас от необходимости ввода имени пользователя и пароля):

git config --global --add url."git@github.com:".insteadOf "https://github.com/"

Источник: http://albertech.blogspot.com/2016/11/fix-git-error-could-not-read-username.html

Если вы не используете 2FA, вы все равно можете использовать SSH, и это будет работать.

Изменить: добавлен --addфлаг, как предложено slatunje .


12
Я рекомендую добавить флаг --add, чтобы вы не перезаписывали существующие настройки, которые у вас могут быть. Например:git config --global --add url."git@github.com:".insteadOf "https://github.com/"
slatunje

Спасибо slatunje, добавил флажок в мой ответ на основе ваших отзывов.
Уильям Джадд

5
Это лучшее решение ИМО. Более безопасно и
требует

1
Не делай этого в Windows. Я закончил с ошибкой git@github.com: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah

1
работает и для Linux. должно работать для всех, если вы используете ssh globaly
Chiptus

39

1-й - go getоткажется аутентифицироваться в командной строке. Так что вам нужно кэшировать учетные данные в git. Поскольку я использую osx, я могу использовать помощник учетных данных osxkeychain.

2-й Для меня, я включил 2FA и, следовательно, не мог использовать мой пароль для авторизации. Вместо этого мне пришлось сгенерировать личный токен доступа вместо пароля.

  1. настройка помощника по учетным данным osxkeychain https://help.github.com/articles/caching-your-github-password-in-git/
  2. Если вместо пароля используется TFA, создайте личный токен доступа с областью репо https://github.com/settings/tokens.
  3. git клонирует частное хранилище, чтобы он кешировал пароль, git clone https://github.com/user/private_repo и использовал ваше имя пользователя github.com для имени пользователя и сгенерированный токен личного доступа для пароля.
  4. Удалил только что клонированный репо и проведите повторное тестирование, чтобы убедиться, что кредиты были кэшированы - git clone https://github.com/user/private_repoи на этот раз кредиты не запрашивались.

    1. go get будет работать с любыми репозиториями, к которым может получить доступ токен личного доступа. Возможно, вам придется повторить шаги с другими учетными записями / токенами, поскольку разрешения различаются.

1
У меня есть 2FA, и это сработало для меня - сгенерировал токен (с полными привилегиями), сделал git cloneодно из моих собственных репозиториев (на самом деле оно публично), мне было предложено usernameввести мое имя пользователя GitHub, а затем вставить в сгенерированный токен для password- удалил клонированный репозиторий, затем повторно выполнил go getкоманду и все было хорошо - спасибо! (OSX здесь также)
Эрик Дорси

3
Это также действительно здорово, потому что вы можете ограничить область действия токена только «чтением» только для частных репозиториев, поэтому даже если он каким-то образом попадет в образ в дикой природе, они могут только читать ваш код, а не помещать в него какие-либо вещи, и вы можете отозвать токен очень легко. Я не могу вспомнить, есть ли у них встроенное истечение срока действия.
dragon788

16

Если вы просто хотите go getработать очень быстро и двигаться вместе со своей работой ...

Просто экспорт GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

Теперь вам будет предложено указать пользователя / пароль для оставшейся части сеанса оболочки. Поместите это в ваш .profileили настройку, gitкак указано выше, для более постоянного решения.


16

Он жалуется, потому что его нужно использовать sshвместо, httpsно ваш Git по-прежнему настроен с https. так что в основном, как уже упоминалось ранее, вам нужно либо включить приглашения, либо настроить использовать git sshвместо https. простой способ сделать это, выполнив следующее:

git config --global --add url."git@github.com:".insteadOf "https://github.com/"

или, если вы уже используете sshс gitна вашем компьютере, вы можете безопасно редактировать ~/.gitconfigи добавить следующую строку в самом низу

Примечание: это охватывает все SVC, контроль версий исходного кода, который зависит от того, что именно вы используете, github, gitlab, bitbucket)

# Enforce SSH
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
        insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
  insteadOf = https://bitbucket.org/
  • Если вы хотите, чтобы пароли были отключены, вам необходимо кэшировать пароль. Для получения дополнительной информации о том, как кэшировать ваш пароль на GitHub на Mac, Windows или Linux, посетите эту страницу .

  • Для получения дополнительной информации о том, как добавить ssh в свою учетную запись github, посетите эту страницу .

Кроме того, что более важно, если это частный репозиторий для компании или для вас самого, вам может потребоваться пропустить использование базы данных прокси или контрольной суммы для таких репозиториев, чтобы избежать их публичного раскрытия.

Для этого вам нужно установить GOPRIVATEпеременную среды, которая управляет тем, какие модули команда go считает закрытыми (недоступными публично) и поэтому НЕ должна использовать базу данных прокси или контрольной суммы.

Переменная представляет собой разделенный запятыми список шаблонов (тот же синтаксис Go path.Match) префиксов пути модуля. Например,

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

Или

go env -w GOPRIVATE=github.com/mycompany/*
  • Для получения дополнительной информации о том, как решить проблемы проверки контрольной суммы частных пакетов / модулей, пожалуйста, прочитайте эту статью .
  • Для получения дополнительной информации о модулях go 13 и новых улучшениях, пожалуйста, ознакомьтесь с примечаниями к выпуску модулей Go 1.13 .

И последнее, что не стоит забывать упомянуть, вы все равно можете настроить go getаутентификацию и выборку https, все, что вам нужно сделать, это добавить следующую строку в$HOME/.netrc

machine github.com login USERNAME password APIKEY

Я надеюсь, что это помогает сообществу и экономит время других для быстрого решения описанных проблем. Пожалуйста, не стесняйтесь оставлять комментарии, если вам нужна дополнительная поддержка или помощь.


GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) это единственное, что сработало для меня. Я мог бы предложить поместить это под своим собственным заголовком или даже в своем собственном ответе, чтобы подчеркнуть это немного больше.
Бернхард Баркер

1

Если вы сконфигурируете свой gitconfig с этой опцией, у вас позже будет проблема клонировать другие репозитории GitHub

git config --global --add url. "Git@github.com". Instead, "https://github.com/"

Вместо этого я рекомендую вам использовать эту опцию

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

и не забудьте сгенерировать токен доступа из вашего личного репозитория. Когда будет предложено ввести пароль, просто вставьте токен доступа. Счастливый клон :)


0

У меня была та же проблема с окнами: «ошибка: не удалось выполнить скрипт приглашения (код выхода 1). Неустранимый: не удалось прочитать имя пользователя для« https://github.com »: нет ошибки» при попытке войти в github через диалог входа в систему. Когда я отменил диалог, git попросил меня ввести логин и пароль в командной строке, и все заработало нормально.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.