5

git-shellのカスタムコマンドを作成するにはどうすればよいですか?ドキュメントによると:

-cを指定すると、プログラムは非対話的に実行されます。git receive-pack、git upload-pack、git upload-archive、cvs server、またはCOMMAND_DIRのコマンドのいずれかになります。引数が指定されていない場合、シェルはインタラクティブモードで開始されます。この場合、COMMAND_DIRが存在している必要があり、その中の任意の実行可能ファイルを呼び出すことができます。

しかし、これを正しく理解しているかどうかはわかりません。gituserというユーザーを作成し、シェルとして/ usr / bin/git-shellを指定しました。git-shell-commandsというディレクトリを作成し、その中に「testy」というスクリプトを入れましたが、git-shellで実行することはできません。

これが私が他のマシンから試していることです:

$ ssh gituser@server.com testy
fatal: unrecognized command 'testy'

git-shellが機能していて、応答しているのに、カスタムコマンドが見つからないことに注意してください。

そして、ここにスクリプトがあります:

:/home/gituser/git-shell-commands# ls -l -a
total 12
drwxr-xr-x 2 gituser gituser 4096 Jan 22 17:35 .
drwxr-xr-x 4 gituser gituser 4096 Jan 22 13:57 ..
-rwxr-xr-x 1 gituser gituser   26 Jan 22 13:58 testy
:/home/gituser/git-shell-commands# ./testy
hello!
:/home/sodigit/git-shell-commands# cat testy
echo "hello!"

私は何が間違っているのですか?git-shellでカスタムコマンドを実行する方法は?

4

2 に答える 2

5

結局のところ、この機能は git 1.7.4 で導入されました。古いバージョンの git を含む debian スクイーズを使用しているため、機能しませんでした。

この問題が発生した場合は、git のバージョンを確認してください。

ただし、git 1.7.10 以降、カスタム コマンドはインタラクティブ モードでのみ機能し、-c では機能しません。ただし、最新の git は試していないため、この問題はソフトウェアのバージョンとは無関係である可能性があります。

于 2013-01-22T23:31:38.483 に答える
1

1.7.4より前のカスタムコマンド(および1.7.10の非対話型モード)を許可するには、git-shellのシェルスクリプトラッパーを使用できます。

#!/bin/bash                                                                     

cmdline=($1)
cmd=$(basename "${cmdline[0]}")

if [ -z "$cmd" ] ; then
    exec git-shell
elif [ -n "$cmd" -a -x ~/git-shell-commands/"$cmd" ] ; then
    ~/git-shell-commands/"$cmd" "${cmdline[@]:1}"
else
    exec git-shell -c "$1"
fi

通常「git-shell」を使用する場合は、代わりにこのスクリプトを参照してください。ただし、このスクリプトの「-c」引数は省略してください。

git-shellと同様に、上記のスクリプトでは、コマンドライン全体を最初の引数として渡す必要があります。コマンドラインを個別の引数として渡したい場合は、次のようにします。

#!/bin/bash                                                                     

cmd=$(basename $1)

if [ -z "$cmd" ] ; then
    exec git-shell
elif [ -n "$cmd" -a -x ~/git-shell-commands/"$cmd" ] ; then
    shift
    ~/git-shell-commands/"$cmd" "$@"
else
    exec git-shell -c "$*"
fi

たとえば、これにより、authorize_keysの制限付きシェルを次のように呼び出すことができます。

command="sshsh $SSH_ORIGINAL_COMMAND" ...

どちらのスクリプトも1.7.4より前のインタラクティブモードを作成しないことに注意してください(インタラクティブセッションを開始しようとすると、git-shellから「致命的:私は何だと思いますか?シェル?」エラーが発生します)。 1.7.4以降のインタラクティブモードに干渉します。

免責事項:これはセキュリティホールについて精査されていません。自己責任。特に、〜/ git-shell-commandsの各コマンドは、潜在的なセキュリティホールです(ただし、これはgit-shell 1.7.4以降に当てはまりますが、上記のスクリプトがない場合でも同様です)。

于 2013-01-30T07:01:51.963 に答える