2


0

現時点では、リモートリポジトリが更新されるたびに(つまり、誰かがgit pushを実行するたびに)リポジトリ内のファイルからパッケージを構築するスクリプトを実行する必要があるという、ちょっとしたジレンマに直面しています。 これらのパッケージは、将来の使用のためにHTTP経由でクライアントに公開されるgitサーバー上のディレクトリに配置されます。

問題は、更新後フックでリポジトリ内のファイルにアクセスする方法がわからないことです。

誰かが何らかの洞察を与えることができれば、それは大いに感謝されるでしょう。

2 Answer


3


まず第一に、あなたはpost-updateの代わりにpost-receiveフックを使いたいかもしれません。 githooks(5)のマニュアルページによると、post-receiveはpost-updateよりも優先されます。

とは言っても、あなたのフックスクリプトは.git / hooksサブディレクトリで実行されます。

CD ..

あなたのスクリプトはgitリポジトリの作業ツリーにあります。 例えば、これはあなたがリポジトリをプッシュするたびにリモートgitリポジトリの作業ツリーが更新されることを確実にする小さなスクリプトです:

#!/ bin / sh export GIT_DIR = cd .. echo "ワーキングツリーのリセット..." git reset --hard echo "ワーキングツリーのリセットが完了しました。"

GIT_DIR環境変数を設定解除する必要があることに注意してください。それは自動的に設定され、その設定がされている限り、すべてのgitコマンドはそのディレクトリで実行されます - あなたがcdした場所に関係なく。


1


リモートのリポジトリが裸の共有リポジトリである場合、ファイルのコピーはありません。 あなたはこれを変更することができます、そしてあなたはオートチェックアウトを実行する必要があるでしょう。

あなたのパッケージがファイルを嫌いなら、リポジトリも別のディレクトリに置くのがベストです。

私はあなたが命名した正確な目的のために以下を使います

ここにそれを設定する方法を私に示したブログ記事がありますhttp://toroid.org/ams/git-website-howto

これが私の略語です。

レポジトリの外にディレクトリを作成し、そこに作業ツリーを置き、それからもはやベアレポジトリではないようにしてファイルのコピーがあるようにしてから、パッケージ化スクリプトを実行する前にaを実行します。

#別のフォルダにあるファイルでレポジトリを作成するcd / share / proj / all / $ 1 / repo git --bare init --shared git config core.worktree ../実際のgit config core.bare false git config receive denycurrentbranch ignore#プッシュエコーで自動的にリポジトリをファイルディレクトリにチェックアウトするフックを追加 "#!/ bin / sh">フック/受信後エコー "git checkout -f" >>フック/受信後chmod x hooks /受信後