web-dev-qa-db-ja.com

git clone-資格情報を求める代わりに失敗する

自動化ツール-Webフロントエンド、CIシステムでgitリポジトリのクローンを作成すると、git cloneの呼び出しで、ユーザー名とパスワードを要求するプロンプトが表示される場合があります(たとえば、存在しないGithubリポジトリのクローンを作成する場合や、新しいノードでsshキーが不足している場合) )。

サーバープロセスがユーザー名とパスワードを提供するのを待つのではなく、どうすればgitを(できれば賢明なエラーメッセージと終了コードで)失敗させるだけですか?

15
Tin Tvrtković

Gitバージョン2.3には、環境変数GIT_TERMINAL_Promptがあり、0に設定すると、資格情報のプロンプトが無効になります。

詳細については、man git(gitバージョン2.3に更新した後)または githubのこのブログ投稿 を参照してください。

例:

  • git clone https://github.com/some/non-existing-repoはユーザー名とパスワードの入力を求めます
  • GIT_TERMINAL_Prompt=0 git clone https://github.com/some/non-existing-repoは、ユーザー名とパスワードを要求せずに失敗します
16
user243345

Gitの実行方法に応じて、端末に接続されないようにstdinまたはstdoutをリダイレクトすると、gitが詳細を求めるプロンプトを表示せず、エラーが発生します。

これにより、エラー(または少なくともログ)をWebサービスに表示することもできます。

0

Gitバージョン1.8.3.1からの作業。

git clone -c core.askPass $echo url/or/path/to/git/repo

構成 core.askPass は、資格情報の処理の制御を前述のプログラムに渡すことで機能します。ただし、$echoは出力以外には何もできないため、クローンの試行はすぐに失敗し、それぞれのbashリダイレクトが適用されます。このコードは、gitリポジトリがたまたまプライベートである場合にのみ呼び出され、特定のリポジトリの認証が失敗したことを示すエラー出力をパイプします。これは、知っているプラ​​イベートリポジトリに対してhttps://github.com/git/gitパブリックリポジトリに対してテストできます。

取り引きを甘くするために、最初にechoのようなプログラムを参照する必要さえありません。次の入力なしでgit configuration -c core.askPassを渡すだけでは、コードが資格情報の処理をオフロードするプログラムを知らないため、リポジトリがプライベートになっている場合でもエラーが発生します。これは確かにここで述べた他のものより古くて単純な方法ですが、古いバージョンのgitで同じ効果があるかどうかはわかりません。

0
Jouster500

Linuxでssh認証を使用している場合は、sshコマンドの代替を作成して、これを無効にすることができます。

「sshnoprompt.sh」というファイルを次のように作成します。

ssh -oBatchMode=yes $@

このファイルをchmod +x sshnoprompt.shで実行可能にします

次にgitを起動すると:

GIT_SSH="sshnoprompt.sh" git clone foo@dummyserver:not_a_repo

また、対話型のgitプロンプトや質問は許可されません。ユーザーに何かを尋ねることはできません。

0
Danny Staple