見出し画像

Gitコマンド「git credential」

git v.2.27.0に基づく、helpの私家版和訳です。

発端は、「Sourcetree」「Xcode」でのpushに失敗を喰らってしまったので、根本的に如何に設定すべきか知りたかったので。

macOS Catalinaでは、これとは別のコマンド「git credential-osxkeychain」も使う様だけど(情報源:it-swarm.dev|「git credential-osxkeychain」に保存されている資格情報をリセットするにはどうすればよいですか?)…ちょいとよく分からん?

取り敢えず、以下、本文です。

名称

git-credential - ユーザーの資格情報を、取得および保存する

概要

git credential <fill | approve | reject>

説明

Gitには、システム固有のヘルパーから資格情報を保存および取得し、ユーザにユーザ名やパスワードを要求するための内部インターフェイスがあります。git-credentialコマンドは、このインターフェイスを、Gitと同様の方法で、資格情報を取得、保存、または要求するスクリプトに対して公開します。このスクリプト可能なインターフェイスのデザインは、内部のC APIをモデルにしています;コンセプトの背景についてはcredential.hを参照してください。

git-credentialは、コマンドラインでオプション"action"(fill、approve、rejectのいずれか)を指定し、標準入力で資格情報の記述を読み込みます(入力/出力フォーマット参照)。

アクションがfillの場合、git-credentialは、構成ファイルを読み取るか、構成済みの資格情報ヘルパーにコンタクトするか、ユーザーにプロンプトを表示するかして、属性”username”および”password"を記述に追加しようとします。資格情報の記述に含まれる属性usernameおよびpasswordは、すでに提供されている属性と一緒に標準出力に出力されます。

アクションがapproveの場合、git-credentialは、その記述を、構成された資格情報ヘルパーに送信し、ヘルパーは、後で使用するために資格情報を保存する場合があります。

アクションがrejectの場合、git-credentialは、その記述を、構成された資格情報ヘルパーに送信し、ヘルパーは、記述に一致する保存された資格情報を消去する場合があります。

アクションがapproveあるいはrejectの場合は、何も出力されません。

git credentialの典型的な使用法

git-credentialを使用するアプリケーションは、通常次のような手順でgit credentialを使用します:

Step 1:コンテキストに基づいて資格情報の記述を生成します。例えば、https://example.com/foo.gitのパスワードが必要な場合、以下のような資格情報の記述を生成できます(最後の空白行を忘れないでください;これは、アプリケーションがすべての情報フィードを終了したことを、git credentialに通知します)。

protocol=https host=example.com path=foo.git 空改行

Step 2:git-credentialに、この記述のためのユーザー名とパスワードを要求してください。これはgit credential fillを実行して、Step 1の記述を標準入力にフィードします。完全な資格情報の記述(資格情報そのもの、つまりログイン名とパスワードを含む)が、次の様に、標準出力に出力されます:

protocol=https host=example.com username=bob password=secr3t

殆どの場合、これは、入力で指定された属性が、出力で繰り返されることを意味しますが、例えば、プロトコルがHTTP(s)でcredential.useHttpPathがfalseの場合は、Gitが属性pathを削除することで、資格情報の記述を修正することもあります。

git credentialがパスワードを知っている場合、このステップでは、password=secr3tが返される前に、(ユーザーがパスワードを入力してキーチェーンのロックを解除した、或いは、キーチェーンが既にロック解除されていてインタラクションが行われなかった為)ユーザが実際には、このパスワードを入力していなかった可能性があります。

Step 3:資格情報を使用(例: Step 2のユーザー名とパスワードを使用してURLにアクセス)して、それが受け入れられるかどうかを確認します。

Step 4:パスワードの成否を報告します。資格情報が操作を正常に完了させた場合、その操作を「approve」アクションでマークして、git credentialが次の呼び出しで再利用するように指示できます。資格情報が操作中に拒否された場合、"reject "アクションを使用して、git credentialが次の呼び出しで新しいパスワードを要求するようにします。いずれの場合も、git credentialは、Step 2で取得した資格情報の記述を使用しなければなりません(Step 1で提供されたものも含まれます)。

入力/出力フォーマット

git credentialは(使用されたアクションに応じて)資格情報を標準入力/出力で読み込んだり書き込んだりします。この情報は、git credentialがログイン情報を取得するためのキー(host、protocol、path等)または、取得する実際の資格情報データ(username/password)のどちらかに対応できます。

資格情報は、名前付き属性のセットに分割され、1行には1つの属性があります。各属性は、(イコール)記号で区切られたキーと値のペアで指定され、改行文字が続きます。

キーには、「=、改行文字、NUL」以外の任意のバイトを含めることができます。値には、「改行文字、NUL」以外の任意のバイトを含めることができます。

どちらの場合も、すべてのバイトはそのまま扱われます(すなわち、クォートは行われず、改行文字やNULを含む値を送信することはできません)。属性のリストは、空行かファイル終端文字で終了します。

Gitは、以下の属性を理解します:

protocol

資格情報が使用されるプロトコル(https等)。

host

ネットワーク資格情報のリモートホスト名。これには、ポート番号が指定されている場合は、ポート番号が含まれます(「example.com:8088」等)。

path

資格情報が使用されるパス。例えば、リモートのhttpsリポジトリにアクセスする場合、これはサーバー上のリポジトリのパスになります。

username

既に持っている場合は、資格情報のユーザ名(例えば、URL、設定、ユーザ、または以前に実行されたヘルパーから)。

password

保存するように要求されている場合は、資格情報のパスワード。

url

この特別な属性がgit credentialで読み込まれると、値はURLとして解析され、その構成要素が読み込まれたかのように扱われます(例えば、url=https://example.comは、protocol=httpsとhost=example.comが提供されているかのように動作します)。これは、呼び出し元でのURLパース回避に役立ちます。

プロトコルの指定は必須であり、URLがホスト名を指定しない場合("cert:///path/to/file”等)、資格情報には値が空文字列である、属性hostが含まれることに注意してください。

URLに含まれていない要素(上の例ではユーザ名がない等)は、未設定のままになります。

この記事が気に入ったらサポートをしてみませんか?