1

gitごとにウェブサイトを開発したいのですが、鶏が先か卵が先かという問題があります。git --bareリポジトリ(メインリポジトリ; /var/dev.git)を備えたサーバーが1つあり、Apache Webサーバーのdoc-root(var / www)用に1つのクローンがあり、ユーザーごとに1つのローカルリポジトリがあります。

わかりました。これは非常にうまく機能しますが、ここで「特別な」機能を追加したいと思います。誰かが.lessファイルを追加してそれをメインリポジトリにプッシュした場合、それをcssファイルに「コンパイル」してリポジトリに追加する必要があります。さらに、www-cloneは、すべての新しいファイル(新しいcss-stylesを含む)をメインリポジトリに戻す必要があります。

私の最初の試み

まず、www-root-repoに最新の変更をプルさせ、次に、より少ないファイルをすべて見つけて、より少ないコンパイラーを起動しようとします。

lessc [input] [output]

問題は、gitがプルとプッシュでポストレシーブをトリガーし、リコールするように見えることです-それ自体が無限ループのように(で停止しますerror building trees

#!/bin/sh

git --git-dir /var/www/.git reset --hard HEAD
git --git-dir /var/www/.git pull /var/dev.git master

echo "###### fire LESS Compiler #####"
find /var/www -name *.less -exec sh -c 'lessc {} $(dirname {})/
    $(echo $( basename {} .less)$( echo ".css" )) >> $(dirname {})
    /less_error.log 2>&1 ' \;

echo "###### add new less-out files to repo #####"
git --git-dir /var/www/.git add .
git --git-dir /var/www/.git commit -am "css style added"
git --git-dir /var/www/.git push /var/dev.git master

echo "########### END #############"

エラーメッセージを少なくするために、stderrをstdoutにパイプし(stderr-pipe-redirectionではAFAIKの追加ができないため)、error_less-fileに追加します。(2番目の質問:)エラーが発生した場合にのみファイルを作成するようにするにはどうすればよいですか?(現時点では、すべてのlessc-callで作成されています)

4

1 に答える 1

1

わかりやすくするために、/ var / devrepoDEVおよび/var/ wwwrepoWWWと呼びましょう。DEVリポジトリを非ベアにして、ワークツリーを作成し、コンパイルできるようにします。DEVは/var/ devにあり、すべてのユーザーはリモートURLを更新する必要があります。

git remote set-url dev foo@bar:/var/dev  # Assuming SSH access

DEVの受信後フックは、コンパイル、コミット、およびWWWへのプッシュを行います。

#!/bin/sh
# Go to worktree, check out new commit
export GIT_DIR=`pwd`; cd ..; export GIT_WORK_TREE=`pwd`
git reset --hard HEAD
# fire LESS Compiler
find . -name *.less -exec sh -c 'lessc {} $(dirname {})/
    $(echo $( basename {} .less)$( echo ".css" )) >> $(dirname {})
    /less_error.log 2>&1 ' \;
# add new less-out files to repo
git add .
git commit -am "css style added"
# Push to WWW
git push /var/www master

WWWの受信後フックは、新しいコミットをチェックアウトするだけです

#!/bin/sh
# Go to worktree, check out new commit
export GIT_DIR=`pwd`; cd ..; export GIT_WORK_TREE=`pwd`
git reset --hard HEAD
于 2013-08-02T05:27:49.740 に答える