2011-06-26 3 views
3

〜/ .gitconfigでGitエイリアスを使用して、bash関数が定義されている場合はbash関数を呼び出し、そうでなければ通常のgit checkoutを呼び出します。Gitエイリアスを使用してBash関数を起動する方法

これは私が考案したものです:

cat ~/.gitconfig 
... 
[alias] 
... 
    co = !(compgen -A function vxzExecuteGitCheckout >/dev/null && vxzExecuteGitCheckout) || git checkout 

問題は、Gitは(私の場合dashをあることを起こる)/ bin/shを使用しますと、それはbash組み込みであるので、それはcompgenにbarfsということです。

このコマンドを実行するには、Gitでbashを使用していることを確認してください。

vxzExecuteGitCheckout()は、〜/ .bashrcに含まれていないファイルに定義されています。

git co -b param1 param2 ...を使用する場合、上記の別名定義は-b param1 param2git checkoutになります。このBash関数が見つからない場合は、明示的に

答えて

2

使用bash:助け

co = !bash -c '(compgen -A function vxzExecuteGitCheckout >/dev/null && vxzExecuteGitCheckout) || git checkout' - 

別の可能性は正しいシェバングライン#!/bin/bashでシェルスクリプトを書いて、alias.coのためにそのスクリプトを呼び出すことであろう(質問How to embed bash script directly inside a git aliasを参照してください)

+0

おかげで、。これを使用しました:
'co =!bash -c '(compgen -A function vxzExecuteGitCheckout>/dev/null && vxzExecuteGitCheckout" $ @ ")|| git checkout "$ @" '-' 'git co'コマンドがなければ全く何もしていないように見えるので、ダッシュを後に付けることの重要性を説明したいかもしれません。 –

+0

私は最終的に、呼び出された関数vxz ...が働いているシェルの環境変数を変更したかったので、このアプローチを捨てました。しかし、この関数はそれ自身の新しいシェルで呼び出されるので、環境変数の変更はシェルを呼び出す。 –

+0

@gurjeet:あなたが解決しようとしている問題を知っている可能性はありますか?たぶんそこに別の方法があるかもしれません – knittl

関連する問題