41

git.debian.org (alioth) でホストされているプロジェクトがあり、http: //gitorious.orgのリポジトリのミラーを更新するために post-receive フックを構成したいと考えています。

私は使用する必要があると思いますgit push --mirror gitorious

プッシュを成功させるには、gitorious で Alioth を承認する必要があります。それ、どうやったら出来るの?

gitorious でユーザーを構成し、そのための ssh キーを作成する必要があると思います。そして、post-receive フックで git push を実行するときは、この ssh キーが使用されていることを確認してください。

を使用することもできます~/.ssh/configが、問題は、多くのユーザーが alioth をプッシュできることであり、全員がログインして を構成する必要があります~/.ssh/config。代わりに、使用するキーを ssh に指示するコマンド ライン オプションまたは環境変数が必要です。それをしてもいいですか?

また、ミラーリングを実現する方法について他にアイデアはありますか? そして、それを逆に設定することは可能ですか?

4

3 に答える 3

38

答えはgit リファレンス マニュアルにあります。

GIT_SSH

この環境変数が設定されている場合、git fetch と git push は、リモート システムに接続する必要があるときに、ssh の代わりにこのコマンドを使用します。この$GIT_SSHコマンドには、URL からの username@host (または単にホスト) と、そのリモート システムで実行するシェル コマンドの 2 つの引数が与えられます。

一覧表示するプログラムにオプションを渡すにはGIT_SSH、プログラムとオプションをシェル スクリプトにラップし、シェル スクリプトGIT_SSHを参照するように設定する必要があります。

通常、個人用.ssh/configファイルを使用して必要なオプションを構成する方が簡単です。詳細については、ssh のドキュメントを参照してください。

そのため、ラッパー スクリプトを作成する必要があります。次のスクリプトを作成しpush-gitorious.shます。

#!/bin/sh


if [ "run" != "$1" ]; then
  exec ssh -i "$GITORIOUS_IDENTITY_FILE" -o "StrictHostKeyChecking no" "$@"
fi

remote=YOUR_SSH_GITORIOUS_URL

echo "Mirroring to $remote"

export GITORIOUS_IDENTITY_FILE="`mktemp /tmp/tmp.XXXXXXXXXX`"
export GIT_SSH="$0"

cat >"$GITORIOUS_IDENTITY_FILE" <<EOF
YOUR SSH PRIVATE KEY

EOF
cat >"$GITORIOUS_IDENTITY_FILE.pub" <<EOF
YOUR SSH PUBLIC KEY

EOF

#echo git push --mirror "$remote"
git push --mirror "$remote"

rm -f "$GITORIOUS_IDENTITY_FILE"
rm -f "$GITORIOUS_IDENTITY_FILE.pub"

exit 0

もちろん、秘密鍵を入力する必要があります (公開鍵は参照用としてスクリプトに含まれています。また、重要な URL も入力する必要があります。

post-receive フックでは、以下を配置する必要があります。

path/to/push-gitorious.sh run

run オプションは重要です。そうしないと、ssh が直接実行されます。

警告:リモート ホスト ID のチェックは行われません。ssh コマンド ラインからオプションを削除し、known_hosts必要に応じてカスタマイズできます。このユースケースでは、それは重要ではないと思います。

于 2010-08-17T07:42:10.717 に答える
30

gitコマンドラインでgitサイトに使用したい任意のキーファイルを指定できるように、私が知っている2つの方法は次のとおりです。このキーファイルを構成ファイルまたはスクリプトにハードコーディングする必要はありません。これを git コマンドラインで直接指定するだけです。

方法 1: GIT_SSH 環境変数を使用する

コマンドラインでの使用法は次のようになります。

$ PKEY=~/.ssh/keyfile.pem git clone git@github.com:me/repo.git

このコマンドを使用するには、いくつかの事前設定を行う必要があります。まず、次の内容でシェル スクリプトを作成します。

#!/bin/sh
if [ -z "$PKEY" ]; then
    # if PKEY is not specified, run ssh using default keyfile
    ssh "$@"
else
    ssh -i "$PKEY" "$@"
fi

次に、GIT_SSH 変数をエクスポートして、上記のシェル スクリプトの場所と同じ値を設定します。

$ export GIT_SSH=~/ssh-git.sh

~/ssh-git.sh は、上記のシェル スクリプトのファイル名です。

スクリプトは実行可能である必要があるため、chmod を実行します。

$ chmod +x ~/ssh-git.sh

これで、使用するキーファイルを指定してこのコマンドを実行できます。

$ PKEY=~/.ssh/keyfile1.pem git clone git@github.com:me/repo.git

別のホストに別のキーファイルを使用するには:

$ PKEY=~/.ssh/keyfile2.pem git clone git@myothersite.com:other/repo.git

これは、使用したいすべてのキーファイルをサポートします。使用したいキーファイルで git を実行する必要があるたびに、それを PKEY 変数に指定するだけです。GIT_SSH が事前に構成されている限り、他のすべてを忘れることができます。

PKEY 変数に注意してください。GIT_SSH が指しているシェルスクリプトで使用されているものと一致する限り、任意の名前を使用できます。

方法 2: ラッパー スクリプトを使用する

ラッパー スクリプトの使用法は次のようになります。

$ git.sh -i ~/.ssh/keyfile.pem clone git@github.com:me/repo.git

-i オプションを指定して ssh を実行しているように見えるため、この使用法は直感的です。

これには、シェル スクリプトと GIT_SSH の事前設定は必要ありません。git コマンドを使用して、この 1 つのラッパー スクリプトをダウンロードして実行するだけです。

このラッパー スクリプトのコピーは、http: //alvinabad.wordpress.com/2013/03/23/how-to-specify-an-ssh-key-file-with-the-git-command/で入手できます。

于 2013-03-24T09:41:42.283 に答える