go отримати результати в 'термінальних запитах відключено' для помилки github private repo


187

Я створив приватний приклад repo / myprivaterepo, використовуючи інтерфейс Github у своєму браузері.

Потім я зайшов у свій каталог go (на робочому столі) і клонував його:

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

Все йде нормально. Створив файл-планувальник.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на своєму ноутбуку?
JimB

1
Дякую. Клон git працював. Тоді йти працювати. Яка угода? Чи потрібно мені кожного разу «приправляти насос» або я щось неправильно конфігурував?
tomcam

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

@alexvasi: це працює лише в тому випадку, якщо він спершу клонує репо за Ssh, оскільки він буде запитувати, https://github.com/якщо шлях імпорту не існує. Процес git повинен мати можливість запросити ім’я користувача / пароль, тому в конфігурації ноутбука повинно бути щось інше - різні оболонки, різні .gitconfig, змінну env тощо.
JimB

Все це мені допомогло, але я не впевнений, як відзначити відповідь та / або вирішити. Ось що я маю досі.
tomcam

Відповіді:


173

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, додав прапор до моєї відповіді на основі ваших відгуків.
Wylliam Judd

5
Це найкраще рішення ІМО. Більш безпечно і менше зусиль (один раз налаштування) використовувати SSH ключі для auth замість імені користувача / пароля
bodecker

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.

По-друге, для мене увімкнено 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як зазначено вище, для більш постійного рішення


15

Він скаржиться, тому що його потрібно використовувати 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

У мене була така ж проблема у Windows "помилка: не вдалося виконати скрипт підказок (код виходу 1) фатально: не вдалося прочитати ім'я користувача для" https://github.com ": Немає помилки", намагаючись увійти до github через діалогове вікно входу. Коли я скасував діалогове вікно, git попросив мене ввійти та пароль у командному рядку, і він працював чудово.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.