Git
英語 ▾ トピック ▾ 最新バージョン ▾ gitcredentials は 2.42.0 で最後に更新されました

名前

gitcredentials - Git にユーザー名とパスワードを提供する

概要

git config credential.https://example.com.username myusername
git config credential.helper "$helper $options"

説明

Git は、操作を実行するためにユーザーから資格情報を要求することがあります。たとえば、HTTP を介してリモートリポジトリにアクセスするために、ユーザー名とパスワードの入力を求める場合があります。一部のリモートでは、パスワードとしてパーソナルアクセストークンまたは OAuth アクセストークンを受け入れます。このマニュアルでは、Git がこれらの資格情報を要求するために使用するメカニズムと、これらの資格情報を繰り返し入力するのを回避するためのいくつかの機能について説明します。

資格情報の要求

資格情報ヘルパーが定義されていない場合、Git はユーザーにユーザー名とパスワードを要求するために、次の方法を試みます。

  1. GIT_ASKPASS 環境変数が設定されている場合、変数で指定されたプログラムが呼び出されます。適切なプロンプトがコマンドラインでプログラムに提供され、ユーザーの入力は標準出力から読み取られます。

  2. それ以外の場合、core.askPass 構成変数が設定されている場合、上記のようにその値が使用されます。

  3. それ以外の場合、SSH_ASKPASS 環境変数が設定されている場合、上記のようにその値が使用されます。

  4. それ以外の場合、ターミナルにユーザーが促されます。

繰り返しを回避する

同じ資格情報を何度も入力するのは面倒です。Git はこの煩わしさを軽減するための2つの方法を提供します。

  1. 特定の認証コンテキストに対してユーザー名を静的に構成する。

  2. パスワードをキャッシュまたは保存したり、システムパスワードウォレットまたはキーチェーンとやり取りしたりするための資格情報ヘルパー。

最初の方法はシンプルで、パスワードを安全に保存できるストレージがない場合に適しています。これは通常、構成に追加することで設定されます。

[credential "https://example.com"]
	username = me

一方、資格情報ヘルパーは、Git がユーザー名とパスワードの両方を要求できる外部プログラムです。これらは通常、OSまたはその他のプログラムによって提供される安全なストレージとインターフェースします。あるいは、資格情報を生成するヘルパーは、何らかのAPIを介して特定のサーバーの資格情報を生成する場合もあります。

ヘルパーを使用するには、最初に使用するヘルパーを選択する必要があります。Git は現在、次のヘルパーを含んでいます。

cache

短時間、メモリに資格情報をキャッシュします。詳細は git-credential-cache[1] を参照してください。

store

ディスクに資格情報を無期限に保存します。詳細は git-credential-store[1] を参照してください。

サードパーティのヘルパーがインストールされている場合もあります。git help -a の出力で credential-* を検索し、個々のヘルパーのドキュメントを参照してください。ヘルパーを選択したら、credential.helper 変数にその名前を配置して、Git にそのヘルパーを使用するように指示できます。

  1. ヘルパーを見つける。

    $ git help -a | grep credential-
    credential-foo
  2. 説明を読む。

    $ git help credential-foo
  3. Git に使用させる。

    $ git config --global credential.helper foo

使用可能なヘルパー

コミュニティは、https://git.dokyumento.jp/doc/credential-helpers に Git 資格情報ヘルパーの包括的なリストを維持しています。

OAuth

パスワードまたはパーソナルアクセストークンを入力する代わりに、OAuth 資格情報ヘルパーを使用できます。最初の認証では、ホストへのブラウザウィンドウが開きます。後続の認証はバックグラウンドで行われます。多くの一般的な Git ホストは OAuth をサポートしています。

資格情報コンテキスト

Git は、各資格情報に URL で定義されたコンテキストがあると見なします。このコンテキストは、コンテキスト固有の構成を検索するために使用され、安全なストレージのインデックスとして使用できるヘルパーに渡されます。

たとえば、https://example.com/foo.git にアクセスするとします。Git が構成ファイル内でこのコンテキストに一致するセクションがあるかどうかを確認するとき、コンテキストが構成ファイルのパターンのより具体的なサブセットである場合、Git はその2つを一致するものと見なします。たとえば、構成ファイルに以下がある場合

[credential "https://example.com"]
	username = foo

プロトコルが同じで、ホストが同じで、「パターン」URL はパスコンポーネントをまったく気にしません。ただし、このコンテキストは

[credential "https://kernel.org"]
	username = foo

ホスト名が異なるため一致しません。また、foo.example.comとも一致しません。Git は、2つのホストが同じドメインの一部であるかどうかを考慮せずに、ホスト名を正確に比較します。同様に、http://example.com の構成エントリは一致しません。Git はプロトコルを正確に比較します。ただし、http.<URL>.* オプションのように、ドメイン名やその他の正規表現を用いることができます。

「パターン」URL にパスコンポーネントが含まれている場合、これも正確に一致する必要があります。コンテキスト https://example.com/bar/baz.git は、https://example.com/bar/baz.git の構成エントリ(https://example.com の構成エントリにも一致する)と一致しますが、https://example.com/bar の構成エントリとは一致しません。

構成オプション

資格情報コンテキストのオプションは、credential.*(すべての資格情報に適用されます)または credential.<URL>.*(ここで <URL> は上記のようにコンテキストと一致します)のいずれかで構成できます。

次のオプションはいずれかの場所で利用できます。

helper

外部資格情報ヘルパーの名前とその関連オプション。ヘルパー名が絶対パスではない場合、文字列 git credential- が前に付けられます。結果の文字列はシェルによって実行されます(したがって、たとえば、これを foo --option=bar に設定すると、シェルを介して git credential-foo --option=bar が実行されます。使用方法の例については、特定のヘルパーのマニュアルを参照してください)。

credential.helper 構成変数のインスタンスが複数ある場合、各ヘルパーは順番に試され、ユーザー名、パスワード、または何も提供しない場合があります。Git がユーザー名と有効期限切れではないパスワードの両方を入手したら、それ以上のヘルパーは試されません。

credential.helper が空文字列に設定されている場合、これはヘルパーリストを空にリセットします(したがって、優先順位の低い構成ファイルによって設定されたヘルパーを、空文字列ヘルパーを構成してから、必要なヘルパーセットを構成することで上書きできます)。

username

URL に指定されていない場合のデフォルトのユーザー名。

useHttpPath

デフォルトでは、Git は http URL の「パス」コンポーネントを外部ヘルパーで一致させる価値があると見なしません。つまり、https://example.com/foo.git に保存された資格情報は、https://example.com/bar.git でも使用されます。これらの場合を区別する必要がある場合は、このオプションを true に設定します。

カスタムヘルパー

資格情報を保持するシステムとインターフェースする独自のヘルパーを作成できます。

資格情報ヘルパーは、Git によって実行されるプログラムであり、長期ストレージから資格情報を取得または保存します(「長期」とは、単一の Git プロセスよりも長い期間を意味します。たとえば、資格情報は数分間メモリに保存されるか、ディスクに無期限に保存される場合があります)。

各ヘルパーは、構成変数 credential.helper(およびその他、git-config[1] を参照)で単一の文字列で指定されます。文字列は、次のルールを使用して、実行するコマンドに変換されます。

  1. ヘルパー文字列が「!」で始まる場合、シェル スニペットと見なされ、「!」の後のすべてがコマンドになります。

  2. それ以外の場合、ヘルパー文字列が絶対パスで始まる場合、ヘルパー文字列がそのままコマンドになります。

  3. それ以外の場合、文字列「git credential-」がヘルパー文字列の前に付けられ、結果がコマンドになります。

結果のコマンドに「操作」引数が追加され(詳細は後述)、シェルによって実行されます。

いくつかの例を示します。

# run "git credential-foo"
[credential]
	helper = foo

# same as above, but pass an argument to the helper
[credential]
	helper = "foo --bar=baz"

# the arguments are parsed by the shell, so use shell
# quoting if necessary
[credential]
	helper = "foo --bar='whitespace arg'"

# you can also use an absolute path, which will not use the git wrapper
[credential]
	helper = "/path/to/my/helper --with-arguments"

# or you can specify your own shell snippet
[credential "https://example.com"]
	username = your_user
	helper = "!f() { test \"$1\" = get && echo \"password=$(cat $HOME/.secret)\"; }; f"

一般的に、上記のルール(3)はユーザーが指定する最も簡単な方法です。資格情報ヘルパーの作者は、プログラムに「git-credential-$NAME」という名前を付け、インストール中に$PATH または $GIT_EXEC_PATH に配置することで、ユーザーが git config credential.helper $NAME で有効にできるようにする必要があります。

ヘルパーが実行されると、コマンドラインに「操作」引数が1つ追加されます。これは次のいずれかです。

get

一致する資格情報が存在する場合は、それを返します。

store

該当する場合は、資格情報を保存します。

erase

一致する資格情報が存在する場合は、ヘルパーのストレージから削除します。

資格情報の詳細は、ヘルパーの stdin ストリームで提供されます。正確な形式は、git credential 内部コマンドの入力/出力形式と同じです(詳細な仕様については、git-credential[1] の「入力/出力形式」セクションを参照してください)。

get 操作の場合、ヘルパーは標準出力に属性のリストを同じ形式で出力する必要があります(一般的な属性については、git-credential[1] を参照)。ヘルパーは、部分集合を出力したり、提供できる有用な情報がない場合は値をまったく出力しなかったりしても構いません。提供された属性は、Git の認証サブシステムですでに認識されている属性を上書きします。認識されない属性は、黙って破棄されます。

すべての属性を上書きすることは可能ですが、動作の良いヘルパーは、ユーザー名とパスワード以外の属性については上書きを控えるべきです。

ヘルパーが値が true または 1quit 属性を出力した場合、それ以降のヘルパーは参照されず、ユーザーにもプロンプトが表示されません(認証情報が提供されていない場合、操作は失敗します)。

同様に、ユーザー名とパスワードの両方が提供されると、それ以降のヘルパーは参照されなくなります。

store または erase 操作の場合、ヘルパーの出力は無視されます。

ヘルパーが要求された操作を実行できなかった場合、または潜在的な問題をユーザーに通知する必要がある場合は、標準エラー出力に書き込むことができます。

要求された操作をサポートしていない場合(例:読み取り専用のストアまたはジェネレーター)、要求を黙って無視する必要があります。

ヘルパーが他の操作を受け取った場合、要求を黙って無視する必要があります。これにより、将来の操作を追加する余地が生まれます(古いヘルパーは新しい要求を無視します)。

GIT

git[1] スイートの一部

scroll-to-top