2012-01-12 8 views
12

は私がコードのpeiceで助けのための良い候補であるかもしれない誰が見て使用し、次の1-ライナーがあります。gitエイリアスとしてコマンドを実行すると、結果が異なるのはなぜですか?

git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr 

コミットの順番で著者を一覧表示し、それは、粗だが、それはOKに動作します。私はこのような、しかし、私のgitの設定に追加

[alias] 
    guru=!git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr 

git guru 

を実行するには、コマンドラインから実行に異なる結果を与えます。

[email protected](rp):~/git/apps$ git guru 
859 Author: craig <[email protected]> 
813 Author: paul <[email protected]> 
798 Author: dave <[email protected]> 

ステファンNäweは、以下のリポジトリのルートで実行するエイリアスを指摘したように、私が入ってるディレクトリでコマンドを実行、または指定する方法があります:に比べ

[email protected](rp):~/git/apps$ git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr 
710 Author: dave <[email protected]> 
415 Author: pete <[email protected]> 
402 Author: craig <[email protected]> 

シェルコマンドを使用して

+1

にこれを追加するには見えます。 – patthoyts

+0

@patthoyts、それを答えとして追加し、それはダニを得るでしょう! –

答えて

4

あなたはおそらくgit shortlog -snを代わりに使用したいと思っています。これは、問題のタスクが既に行われているためです。

gitエイリアスがすべてトップレベルで実行されるわけではありません。 git config manualに記載されているように、 "シェルコマンドはリポジトリのトップレベルディレクトリから実行されることに注意してください。必ずしも現在のディレクトリである必要はありません。したがって、シェルコマンドだけがトップレベルで実行されます。単にgitサブコマンドの別名を指定すると、現在の場所で実行されます。以下のセッションログは、このことを示しています。

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ git rev-parse --show-cdup 
../../ 

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ git config alias.cdup 'rev-parse --show-cdup' 

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ git cdup 
../../ 

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ git config alias.cdup2 '!git rev-parse --show-cdup' 

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ git cdup2 

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ 

あなたの例では、「gitの」で始まるaliasコマンドを使用しています。エイリアスとして 'git rev-parse --show-cdup'を設定しようとすると、 'gitはgitコマンドではありません'というエラーが返されますので、シェルコマンドとして実際に感嘆符が表示されていると思われます。トップレベルから走っている。

13

のgitの別名(すなわち!で始まる)作業ディレクトリのトップレベルで実行されます(.git命)。シンプルエイリアス(!なし)は、現在のディレクトリで実行されます。

+0

ステファンありがとう、これは私の元の質問に答えた、私はうまくいけば、同じ状況で他の人にもっと役立つように今すぐammedした。 –

+3

これはかなり直感的なGitの動作です。誰でも現在のディレクトリでエイリアスを実行する方法を知っていますか?または、現在のディレクトリがenv varなどで利用可能な場合、エイリアスが実行前に正しい場所に 'cd'できるようにするには? –

+0

@JimStewart上記のAndrei Neculauの答えを参照してください。それだけを行う方法が示されています:) – waldyrious

22

私がいるディレクトリでコマンドを実行する方法はありますか? は指定していますか?

はい、あります。 gitコマンドを実行すると、相対パスの値を持つGIT_PREFIX変数が得られます(トップレベルからgitを実行する前のパスまで)ので、必要なものはgitエイリアスの接頭辞です(シェルコマンドを実行し、正しいpwdが必要です) cd ${GIT_PREFIX:-.} &&。あなたが途中で `gitのshortlog -sn`をしたいよう

簡単なテスト、あなたの~/.gitconfig

[alias] p = !pwd && cd ${GIT_PREFIX:-.} && pwd

+2

'$ {GIT_PREFIX: - }}の構文については、http://stackoverflow.com/a/16753536/を参照してください。 79111。 –

関連する問題