Git 2.31(Q1 2021)では、環境変数を介して構成変数と値のペアを使用することを検討できます(また、変数とGIT_CONFIG_PARAMETERS
値のペアをエンコードする方法を微調整して、より堅牢にします)。
Patrick Steinhardt()によるcommit d8d7715 、commit b9d147f、commit 1ff21c0、commit b342ae6、commit ce81b1d(12 Jan 2021)、およびcommit b0812b6(07 Jan 2021)を参照してください。ジェフ・キング()によるcommit f9dbb64、commit 13c4495(2021年1月12日)を
参照してください。( Junio C Hamanoによってマージされました---コミット294e949、2021年1月25日)pks-t
peff
gitster
config
:設定を渡すための新しい方法を追加--config-env
共著-作成者:Jeff King
署名者:Patrick Steinhardt
(man)を介してランタイム構成を渡すことはすでに可能ですが、値に機密情報が含まれている場合に使用することは望ましくない場合があります。
たとえば、認証トークンを含める
ように設定する場合、を介して行うと、通常はコマンド引数も表示されるなどを介してそれらの資格情報が簡単にリークされます。git -c <key>=<value>
http.extraHeader
-c
ps(1)
クレデンシャルをリークせずにこのユースケースを有効にするために、このコミットにより新しいスイッチが導入され--config-env=<key>=<envvar>
ます。
指定されたキーの値を直接渡す代わりに、ユーザーが環境変数の名前を指定できるようにします。
その変数の値は、キーの値として使用されます。
git
現在、そのマニュアルページに含まれています:
[--super-prefix=<path>] [--config-env <name>=<envvar>]
git
現在、そのマニュアルページに含まれています:
--config-env=<name>=<envvar>
のよう-c <name>=<value>
に、構成変数' <name>
'に値を指定します。ここで、<envvar>
は値を取得する環境変数の名前です。
-c
値を空の文字列に直接設定するショートカットがないのとは異なり
、代わりに環境変数自体を空の文字列に設定する必要があります。
<envvar>
環境にが存在しない場合はエラーになります。<envvar>
等号を含むsとのあいまいさを避けるために、等号を含めることはできません<name>
。
/proc/self/cmdline
これは、一時的な構成オプションをgitに渡したいが、他のプロセスがコマンドライン(eg )を読み取れるが環境(eg )は読み取れないOSでそうしている場合に便利です/proc/self/environ
。
この動作はLinuxのデフォルトですが、システムにはない場合があります。
これにより
http.extraHeader
、機密情報が値の一部である場合などの変数のセキュリティが追加される可能性がありますurl.<base>.insteadOf
が、機密情報がキーの一部である可能性がある場合などは追加されないことに注意してください。
あなたの場合、それをテストしてください:
git --config-env=core.excludesfile=RC config core.excludesfile
# or (Git 2.32+ only)
git --config-env core.excludesfile=RC config core.excludesfile
の値は次のcore.excludesfile
ようになります$RC
(ただし、親フォルダーだけでなく、完全なファイルパスを参照する必要があります)
注:Git 2.32(2021年第2四半期)以前は、 " git --config-env var=val cmd
" (man)は受け入れられませんでした(受け入れられただけ--config-env=var=val
です)。
Patrick Steinhardt()によるcommit c331551、commit 9152904(2021年4月29日)を参照してください。( Junio C Hamanoによってマージされました---コミット5f586f5、2021年5月7日)pks-t
gitster
git
--config-env
:の値に個別の引数をサポート
サインオフ-作成者:Patrick Steinhardt
レビュー者:Jeff King
そのように文書化されていませんが、トップレベルのオプションの多くは2つの構文を好み--git-dir
、--work-tree
サポートしています。オプションとその値の間の等号を受け入れ、オプションと値を2つの別個の引数としてサポートします。
最近追加された--config-env
オプションは、等号の構文のみをサポートします。
両方の構文を受け入れ、テストを追加して両方の動作を検証することにより、この不整合を緩和します。
しかし、Git 2.31にはまだまだあります:
config
:envvarペアを介して構成エントリを指定できるようにする
サインオフ-作成者:Patrick Steinhardt
現在、GIT_CONFIG_PARAMETERS
ランタイム構成データをgitプロセスに渡すために使用できる環境変数がありますが、これは内部実装の詳細であり、エンドユーザーが使用することは想定されていません。
内部使用のみであることに加えて、構成エントリを渡すこの方法には大きな欠点があります。構成キーは単一の変数にキーと値の両方を含むため、解析する必要があります。
そのため、値に含まれる潜在的に有害な文字をエスケープするのはユーザーに任されています。これは、値がサードパーティによって制御されている場合は非常に困難です。
したがって、このコミットは、この欠点を取り除く環境を介して構成エントリを追加する新しい方法を追加します。
ユーザーがGIT_CONFIG_COUNT=$n
環境変数を渡すと、Gitは環境変数のペアをGIT_CONFIG_KEY_$i
解析しGIT_CONFIG_VALUE_$i
ます。i
[0,n)
(man)でも同じことができますが、機密情報の可能性がある場合はそうしないことをお勧めします。
たとえば、認証トークンを含める
ように設定する場合、を介して行うと、通常はコマンド引数も表示されるなどを介してそれらの資格情報が簡単にリークされます。git -c <name>=<value>
http.extraHeader
-c
ps(1)
git config
現在、そのマニュアルページに含まれています:
GIT_CONFIG_COUNT
GIT_CONFIG_KEY_<n>
GIT_CONFIG_VALUE_<n>
GIT_CONFIG_COUNT
が正の数に設定されている場合、その数までのすべての環境ペア
GIT_CONFIG_KEY_<n>
がプロセスGIT_CONFIG_VALUE_<n>
のランタイム構成に追加されます。
構成ペアはゼロインデックスです。
キーまたは値が欠落している場合は、エラーとして扱われます。空GIT_CONFIG_COUNT
はと同じようGIT_CONFIG_COUNT=0
に扱われます。つまり、ペアは処理されません。
これらの環境変数は、構成ファイルの値をオーバーライドしますが、を介して渡された明示的なオプションによってオーバーライドされますgit -c
。
これは、共通の構成で複数のgitコマンドを生成したいが、スクリプトを作成する場合など、構成ファイルに依存できない場合に役立ちます。
例えば:
GIT_CONFIG_COUNT=2 \
GIT_CONFIG_KEY_0="pair.one" GIT_CONFIG_VALUE_0="foo" \
GIT_CONFIG_KEY_1="pair.two" GIT_CONFIG_VALUE_1="bar" \
git config --get-regexp "pair.*"
印刷されます:
pair.one foo
pair.two bar