2

私は、Gitosis (Debian Lenny) を使用して Web アプリケーションを開発しています。これを別のリモート リポジトリ/場所にプッシュできるようにしたいので、アプリケーションの「最先端」、「リリース候補」、および「本番」バージョンを使用できます。ミラー化された物理 Web ディレクトリとコードベース。各ディレクトリにアプリケーションのブランチが必要です。つまり、1 つのリポジトリ、3 つの「ライブ」バージョンです。

私はGitを初めて使用するので、おそらくより良い解決策がありますが、これまでに思いついたのは、フックをブランチにアタッチする方法を見つけることです(まだ見つけていません)。ブランチがコミットされています。

私の質問は、コミットされたブランチをチェックし、そのブランチに基づいてディレクトリの変数を設定し、HTTP 経由で即座にアクセスできるディレクトリにコードベースを文字通りコピーする更新後のフックを設定する方法についてです。

git rev-list --branches --pretty=oneline --max-count=1

次のようなものが返されます。

cc5112ba59bc82f2e847ac264317c062ce80f69f test commit

しかし、「実験的」や「マスター」などのブランチ自体の名前が必要です。

だから基本的に私は次のようなものを探しています:

1)コミットされたばかりのブランチの名前(「マスター」、「実験的」など)を文字列に取得します

2) Bash ケースを使用して、使用するディレクトリを宣言します

3) "git archive --format=tar HEAD | (cd $LOCATION && tar xf -)" のようなものを実行します。場所はケースから返されたものです。

私は次のように近づいていると思っていましたが、ブランチ名ではなくコミットメッセージを返すことに気付きました:

#!/bin/sh

# Get substr from "sha1[space]commit-msg"
BRANCH=$(git rev-list --pretty=oneline --branches --max-count=1 | awk '{split($0,array," ")} END{print array[2]}')
case $BRANCH in
    "experimental")
        dir="/home/APP_NAME/experimental"
    ;;
    "master")
        dir="/home/APP_NAME/production"
    ;;
esac
# move to location and copy files
git archive --format=tar HEAD | (cd $loc && tar xf -)

ブランチをコミットの最初の部分として常に配置すれば、このようなことを達成できることに気付きましたが、本当に心配したくありません。

どんな助けでも大歓迎です。前もって感謝します!

4

2 に答える 2

0

ベア以外のリポジトリにプッシュする場合(これは推奨される手法ではありませんが、この更新後のフックで機能します)、次のことを知って、そのフックを完了することができます。

git symbolic-ref HEAD
# or
git rev-parse HEAD

$refプッシュされているブランチを表す一方で、現在のブランチの名前を指定します。
次に、それぞれがすでに右側のブランチに設定されている3つの異なる作業ツリーを更新できます。

于 2011-03-20T00:17:18.577 に答える
0

おそらく私は何かを見逃していますが、これがpost-updateフックにある場合は、フックへのパラメータとして更新されている参照の名前を取得します。たとえば、私のプッシュが更新masterexperimentalれ、リポジトリにある場合、次のようpost-updateに呼び出されます。

 post-update refs/heads/master refs/heads/experimental

...そして、フックスクリプトでいつものように$1それらにアクセスできます。$2

ちなみに、githooksのドキュメントでは、代わりに標準入力に関する情報を取得するフックを使用することを検討することをお勧めしpost-receiveますが、ref の古い値と新しい値、および ref 名も提供されます。使える。

于 2011-03-20T18:24:10.970 に答える