github private repoの「ターミナルプロンプトが無効です」エラーの結果を取得する


187

ブラウザーからGithub UIを使用して、プライベートリポジトリのexamplesite / myprivaterepoを作成しました。

次に、(デスクトップの)goディレクトリに移動して、それを複製しました。

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

ここまでは順調ですね。ファイルscheduler.goを作成し、リポジトリに追加してプッシュしました。

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

Everythngは大丈夫です。しかし、クリーンなラップトップに行ってリポジトリのクローンを作成しようとすると、エラーが発生しました。

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

@alexvasi:https://github.com/インポートパスが存在しない場合にリクエストするため、彼が最初にsshを介して自分でリポジトリを複製する場合にのみ機能します。gitプロセスはユーザー名/パスワードの入力を要求できるはずなので、ラップトップの構成には何か異なるものがあるはずです-異なるシェル、異なる.gitconfig、env変数など
JimB

これらすべてが私を助けてくれましたが、回答済みまたは解決済みとしてマークする方法がわかりません。これが私が今まで持っているものです。
tomcam 2015

回答:


174

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を使用でき、これは機能します。

編集:slatunjeの--add提案に従ってフラグを追加しました。


12
既存の設定を上書きしないように、-addフラグを追加することをお勧めします。例:git config --global --add url."git@github.com:".insteadOf "https://github.com/"
slatunje

slatunjeに感謝、あなたのフィードバックに基づいて私の答えにフラグを追加しました。
Wylliam Judd

5
これがIMOの最良のソリューションです。ユーザー名/パスワードの代わりに認証にSSH鍵を使用する方が、より安全で労力がかかりません(一度設定したら)
bodecker

1
Windowsではこれを行わないでください。私はエラーで終わったgit@github.com: Permission denied (publickey). fatal: Could not read from remote repository.
Shital Shah、2018

1
Linuxでも動作します。あなたがグローバルにSSHを使用している場合は誰のために働く必要があります
Chiptus

39

1番目- go getコマンドラインでの認証を拒否します。したがって、gitに資格情報をキャッシュする必要があります。私はosxを使用しているため、osxkeychain資格情報ヘルパーを使用できます。

2nd私にとっては、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自分自身の既存のリポジトリの1つ(実際にはパブリックです)を実行し、のプロンプトが表示さusernameれ、GitHubユーザー名を入力してから、生成されたトークンpassword-複製されたリポジトリを削除し、go getコマンドを再実行しましたが、すべて順調でした-ありがとう!(OSXもここにあります)
Eric Dorsey

3
トークンのスコープをプライベートリポジトリの「読み取り」のみに制限できるので、これは本当に素晴らしいので、たとえそれが何らかの形で野生の画像に侵入したとしても、コードを読み取ることができるだけで、それに物をプッシュすることはできません。トークンを本当に簡単に取り消す。まだ自動有効期限が組み込まれているかどうかは思い出せません。
dragon788

16

あなたがgo get本当に速く仕事をしたいなら、そしてあなたの仕事と一緒に移動したいなら...

エクスポートするだけ GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

これで、シェルセッションの残りの部分でユーザー/パスの入力を求められます。より恒久的な解決策として、これを上記のように.profile設定するかgit、上記のように設定します。


16

ssh代わりに使用する必要があるため文句を言いhttpsますが、あなたのgitはまだhttpsで設定されています。したがって、基本的には、他のユーザーが前述したように、プロンプトを有効にするか、のssh代わりにgitを使用するように構成する必要がありますhttps。次のコマンドを実行してこれを行う簡単な方法:

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

または、マシンですでにを使用sshgitている場合は、安全に編集~/.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/
  • パスワードプロンプトを無効にしておく場合は、パスワードをキャッシュする必要があります。Mac、Windows、またはLinuxでgithubパスワードをキャッシュする方法の詳細については、このページにアクセスしてください

  • githubアカウントにsshを追加する方法の詳細については、このページにアクセスしてください

また、より重要なこととして、これが会社またはあなた自身のプライベートリポジトリである場合、そのようなリポジトリのプロキシまたはチェックサムデータベースの使用をスキップして、公開されないようにする必要があります。

これを行うにはGOPRIVATE、goコマンドがプライベート(パブリックには使用不可)と見なすモジュールを制御する環境変数を設定する必要があるため、プロキシまたはチェックサムデータベースを使用しないでください。

変数は、path.Matchモジュールパスプレフィックスのパターンのコンマ区切りリスト(Goの同じ構文)です。例えば、

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

または

go env -w GOPRIVATE=github.com/mycompany/*

最後に言及することを忘れないでください。それでもgo get、認証してフェッチするように構成できhttpsます。必要なのは、次の行を追加することだけです。$HOME/.netrc

machine github.com login USERNAME password APIKEY
  • GitHubアカウントの場合、パスワードは個人用アクセストークンにすることができます。
  • これを行う方法の詳細については、Go FAQページを確認してください。

これがコミュニティに役立ち、他の人が説明された問題をすばやく解決する時間を節約できることを願っています。さらにサポートやヘルプが必要な場合は、コメントを残してください。


GOPRIVATEgo env -w GOPRIVATE=github.com/mycompany/*)が私のために働いた唯一のものです。私はそれを自分の見出しの下に置くか、それ自体の答えにさえ入れて、もう少し強調することをお勧めします。
Bernhard Barker

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はコマンドラインでログインとパスワードを要求し、問題なく動作しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.