2012-06-29 10 views
41

すべての設定ファイルが置かれているディレクトリを指すシェル変数があります。変数がexport RC=$HOME/rcで作成されたと仮定しましょう。私は構成ディレクトリにグローバル無視ファイルを持っています:~/rc/globalgitignoregit configのシェル変数展開

私の質問は、.gitconfigファイルのRC変数をどのように拡張できますか?

私はすでに次のことを試してみました:

  • excludesfile = $RC/globalgitignore

  • excludesfile = !$RC/globalgitignore

  • excludesfile = !echo $RC/globalgitignore

  • excludesfile = !$(echo $RC/globalgitignore)

これらのソリューションはどれも動作しません。

フルパス:excludesfile = ~/rc/globalgitignoreを入力した場合の唯一の方法ですが、rcディレクトリを別の場所に移動するとパスを変更する必要があります。

答えて

32

できません。 git-config(1)は、環境変数の拡張をサポートしていますが、型変換およびパス拡張限られない:

型指定子は、Gitの設定は、変数(単数または複数)であることを確実にするために、--int又は--boolのいずれかとすることができます(intの場合は単純10進数、boolの場合は "true"または "false"の文字列)に変換するか、--path、のパス拡張を行う(以下の--pathを参照) 。 タイプ指定子が指定されていない場合、チェックまたは変換は値に対して実行されません。

--path状態のドキュメント:

--path

のgit-config設定$ HOMEの値に〜をリードする展開し、〜ユーザー指定のホームディレクトリになりますユーザー。このオプションは値を設定するときには効果がありません(ただし、コマンドラインからgit config bla〜/を使用すると、シェルが拡張を行うことができます)。

「拡張」という用語は、git-config(1)の別のコンテキストでは表示されません。だから、どのようにそのような機能がどこにも書かれていないとすれば、あなたはどのようにしてそれをすべきかという考えを得ましたか?

環境変数を展開するには、自分でGit設定ファイルを事前に処理する必要があります。つまり、テンプレートファイルを作成し、スクリプトを使用して変数を展開してから$HOMEディレクトリにファイルをコピーしてください。

ドットファイル管理については、すべての人が何をすればよいのですか。ディレクトリに入れて、$HOMEからこのディレクトリにシンボリックリンクを追加してください。

+0

以前、私は私のホームディレクトリに 'rc'ディレクトリからすべての設定ファイルをリンク。これらのリンクを省略するために、私は 'RC'変数を作成し、私のプログラムのほとんどはそれを使用しています。 ところで、 '〜'が展開され、git config alias ...を使うと、シェルコマンドと変数展開を使うことができます。 – SvenK

+3

@SvenK: 'git-config(1)'を読んでください: 'git-config(1)'が '〜'を展開するということは、変数の拡張やシェルコマンドさえもサポートしています。 '〜'は '--path'型指定子*で値が検索された場合にのみ、' git-config'によって*扱われます*。これは 'git-config'でサポートされている*唯一の種類の拡張です。私は 'git-config(1)'の関連するセクションを含めるように答えを更新しました – lunaryorn

+2

これは私のシステム全体に対して私のhttp [s]?_ proxy環境変数を指定するだけでは不都合です。何らかの理由で私のgitconfigで指定する必要があります。自宅や小規模な開発拠点で働いていない人や、働いている場所に応じて異なるネットワークに座っている人にとっては、かなり面倒です。 –

15

変数拡張を有効にするために私の設定でbashスクリプトを使用します。ちょうどあなたがあなたの.bashrcに必要な変数をエクスポートし、スクリプトでそれを使用する:

私の〜/ .bashrcのでは:私の〜/ .gitconfigで

export TESTVARIABLE="hello" 

:で

[alias] 
    test = !bash -c '"echo \"Value: $TESTVARIABLE\";"' 

を私のbashプロンプト:

bash> git test 
    Value: hello 

のTh他の方法では、シェルのrcにgit configコマンドを追加することです。例えば、私は私の.bashrcにしてあります。

git config --global user.name "[email protected]$HOSTNAME" 

は、私はすべての私のマシンで同じ構成であり、これを追加することによって、私は別のマシンからのコミットを区別することができます。あなたは同じことを行うと、あなたのシェルのrcに追加することができます。

export RC="$HOME/rc" 
git config --global core.excludesfile "$RC/globalgitignore" 
+1

gospes:電子メールフィールドのために提案した最初の方法を試しました。アイデア? – tivoni

+8

@tivoni @gospesの例は、 ''! ''の中にあるので、 ''!という文字列に等しい結果の電子メール(コミット情報に表示されています) gitエイリアスグループ –