3

外部コマンドが Git エイリアス経由で実行される場合、リポジトリの rood ディレクトリ (通常は .git/ がある場所) から実行されます。次の方法で確認できます。

$ cd /some/path/inside/repo
$ echo $(git -c alias.root='!pwd' root)

さて、エイリアスが実行された正確なパスを取得する方法はありますか?`


XY の問題の場合、私がやっていることは次のとおりです。シェル関数を起動するエイリアスが必要です。シェル関数は、ls-files などのいくつかの Git コマンドを実行します。呼び出されたパスでのみ機能する必要があるため、それを認識している必要があります。

パスを変更せず、呼び出された場所で正確に実行されるため、関数を実行するだけでうまく機能します。しかし、もう少しネイティブな動作が必要です。私が今持っているのは

git-add-specificname -opt -opt2 --long-option -- path1 path2

私が欲しいのは

git add-specificname -opt -opt2 --long-option -- path1 path2

Git ではパラメーターのエイリアスは許可されていないため、git add specificname...

4

1 に答える 1

8

cd ${GIT_PREFIX:-.}エイリアス を追加する必要があります。

( Git 1.7.6+ :

構成内の" " によって生成されたプロセスは、環境変数を[alias] <name> = !process調べGIT_PREFIXて、作業ツリー内のどこで元のコマンドが呼び出されたかを知ることができます。

git config:

' ' は、元の現在のディレクトリからGIT_PREFIX' ' を実行することによって返されるように設定されます。git rev-parse --show-prefix

)

が定義されていない場合GIT_PREFIX(リポジトリのルート フォルダーからエイリアスを実行しているため)、' .' に置き換えられます。

で使用されている変数を見ることができますt/t1020-subdirectory.sh

test_expect_success 'GIT_PREFIX for !alias' '
    printf "dir/" >expect &&
    (
        git config alias.test-alias-directory "!sh -c \"printf \$GIT_PREFIX\"" &&
        cd dir &&
        git test-alias-directory >../actual
    ) &&
    test_cmp expect actual
'
于 2015-07-30T11:22:22.090 に答える