Git ワークフローの基本的なセットアップは、2 人の開発者がプッシュ/プルするローカル ネットワーク サーバー上のベア リポジトリです。
ローカル ネットワーク サーバー上の別の場所にプッシュされる各ブランチを自動的にコピー (チェックアウト) したいと考えています。例を挙げると:
「develop」ブランチのコピーを「develop」サブフォルダーにプッシュします。「マスター」ブランチのコピーを「マスター」サブフォルダーにプッシュします。
私たちが抱えている問題は、これを行うために post-receive フックを取得することです。ここに私たちが現在持っているものがあります:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
GIT_WORK_TREE=/master
git checkout -f $branch
echo 'Changes pushed master.'
fi
if [ "develop" == "$branch" ]; then
GIT_WORK_TREE=/develop
git checkout -f $branch
echo 'Changes pushed to develop.'
fi
done
受け取ったエラーは次のとおりです。
「リモート: 致命的: この操作は作業ツリーで実行する必要があります。リモート: 変更がプッシュされて展開されました。」
そのエラーから予想されるように、実際には何もチェックアウトされていません。
この方法でポストレシーブも試しましたが、同じ問題がありました:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
git --work-tree=/master checkout -f $branch
echo 'Changes pushed master.'
fi
if [ "develop" == "$branch" ]; then
git --work-tree=/develop checkout -f $branch
echo 'Changes pushed to develop.'
fi
done
ここで私が間違っていることを誰か説明してもらえますか (3 歳児のように説明してください :))。ありがとう。
将来の読者のために答えをより明確にするために、トレックはそれを頭にぶつけました. --work-tree=/master
ベアレポのルート内にある「マスター」というフォルダーにアクセスしようとして使用していました(たとえば、「ブランチ」、「フック」などと並んで)。これを--work-tree=./master
(スラッシュの前のドットに注意してください)に変更するとすぐに、すべてが期待どおりに機能しました。