29

Github 経由で、複数の異なるコンピューターとサーバーで同じ「ドット ファイル」のセットを使用しています。私の直接管理下にある Mac と Linux のボックスには、Sublime Text 2 がインストールされており、選択した git マージおよびコミット エディターとして設定されています。ただし、リモート (つまり、私の直接の制御下にない) サーバーでは、vim の使用を選択します。

.gitconfigそれらのリモートサーバーのために秒を作成して維持したくありません。このようなことをする方法はありますか:

[core]
    if [[ $IS_REMOTE -eq 1 ]]; then
        editor = "vim"
    else
        editor = "subl -n -w"
    fi

ホスト名に基づいて $IS_REMOTE を設定した場所はどこですか?

4

7 に答える 7

19

いいえ、Git config はチェックまたは条件ステートメントをサポートしていません。ただし、基になるシェルはおそらくそうなので、次のようなものを使用できます。

[core]
    editor = "if [[ $IS_REMOTE -eq 1 ]]; then ED='vim'; else ED='subl -n -w'; fi; $ED"


それよりも複雑なことをする必要がある場合は、もちろん、次のようにシェル コードをスクリプトに入れることができます。

[core]
    editor = "my_edi_script.sh"

次のようなものをmy_edit_script.sh含む:

#!/bin/bash
if [[ $IS_REMOTE -eq 1 ]]; then
    ED="vim"
else
    ED="subl -n -w"
fi

$ED some argument or other

編集my_edit_script.shもちろん、$ PATHにある必要があります:)

于 2013-02-07T15:41:00.747 に答える
11

v1.7.9[include]で git-config によって学習されたセクションでは、ほとんどの方法を理解できます。

ランタイム条件を記述できませんが共有セクションとenv 固有~/.gitconfigのセクションなど、いくつかの部分にリファクタリングするためのフレームワークが提供されます。その後、関連する env 固有の構成ファイルのようなものをシンボリック リンクし、 fromを含めることができます。~/.gitconfig.local~/.gitconfig.local~/.gitconfig

シンボリックリンクの部分は、ドットファイルの init スクリプトの一部としてスクリプト化して自動的に実行できます。

コマンドラインから、次の方法でインクルード パスを追加できます。

git config --global include.path '~/.gitconfig.local'

上記の引用符を特に使用して、シェルが~絶対パスに展開されないようにします。

これにより、次のセクションが に追加されます~/.gitconfig

[include]
    path = ~/.gitconfig.local

一般的な形式を示すgit-scm bookのスニペットを次に示します。

[include]
    path = /path/to/foo.inc ; include by absolute path
    path = foo ; expand "foo" relative to the current file
    path = ~/foo ; expand "foo" in your $HOME directory
于 2014-12-11T03:03:05.457 に答える
2

これはできないと思いますが、ファイルを維持する代わりに、.gitconfigファイルを生成するスクリプトを維持するのはどう.gitconfigですか? そうすれば、変数だけでなく、コマンドの出力などに基づいて、好きなことを行うことができます...

お気に入り:

#!/bin/sh
if [ "$#" -eq 0 ]
then
    IS_REMOTE=
else
    case "$1" in
        remote)
            IS_REMOTE=1
            ;;
        local)
            IS_REMOTE=
            ;;
        *)
            echo "value $1 not supported" >&2
            ;;
    esac
fi

# config for both remote and local
git config --global color.ui true
git config --global alias.top '!pwd -L'

# config for remote
if [ "$IS_REMOTE" ]
then
    git config --global core.editor vim
    ...
else
    git config --global core.editor 'subl -n -w'
    ...
fi

したがって、パラメーターなしで、または「local」パラメーターを使用してスクリプトを呼び出すと、.gitconfigファイルに構成が生成されますが、「remote」パラメーターを渡すと、他の構成が生成されます。

于 2013-02-07T15:38:33.647 に答える
1

環境変数をテストしたり、プログラムで .gitconfig を変更したりすることは不可能であり、2 つの .gitconfig ファイルを作成するスクリプトを作成するのは、本当にやりたいことよりも多くの作業のように感じられるため、2 つの .gitconfig ファイルを作成するだけです。ファイル。Sublime Text 2 をエディターとしてセットアップでき、マージ ツールと差分ツールを制御できるマシンでは、「プライマリ」gitconfig をシンボリック リンクのターゲットとして使用します。オプションとして ST2 がないマシンでは、「セカンダリ」gitconfig ファイルを使用します。

于 2013-02-08T04:43:49.380 に答える