前提
https://teratail.com/questions/6h56qd5otf458l
先日、上記質問内で一度回答をいただいていますが具体的な実現方法で躓いています。
ブランチの運用モデルはGit Flowを想定しています。
同一サーバー上にあるもの
1. リモートリポジトリ(ベアリポジトリ)
2. リモートのdevelopブランチの状態を反映するノンベアリポジトリ
3. リモートのreleaseブランチの状態を反映するノンベアリポジトリ
1のhooks内のpost-receiveにbashをテキストファイル形式で記述し、実行権限を与えています。
Gitとファイルの操作はSourcetree及びGit bashで行っています。
GitHubなどのホスティングサービスは利用せず、社内のレンタルサーバーにリポジトリを置いています。
bashについては数日前に触り始めたばかりです。
実現したいこと
- ローカルからリモートのdevelopブランチへのプッシュがあった時は 2 が自動的にdevelopブランチをプルし、releaseブランチへのプッシュがあった時には 3 が自動的にreleaseブランチをプルするように設定したい。
- そもそもローカルからプッシュを行う際にリモートのpost-receiveを認識していないようのでそれを解消したい。
発生しているメッセージ
sourcetree内で常にすべての出力をコンソールに表示する状態にしたうえでdevelopブランチに対してプッシュを行うと下記メッセージが表示され、プッシュ自体には成功しますがpost-receiveに記述した処理が実行されずdevelop内のワーキングディレクトリは空のまま。
git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks push -v --tags origin develop:develop Pushing to ssh://sample.jp/home/test/rmt_repo.git fatal: cannot run hooks/post-receive: No such file or directory To ssh://sample.jp/home/test/rmt_repo.git e4df17f..bf5c640 develop -> develop updating local tracking ref 'refs/remotes/origin/develop'
該当のソースコード
以下post-receive内の記述
bash
1#!/bin/bash 2 3#繰り返し処理内で戻るために実行時の最初の場所を記憶 4cwd=$(pwd) 5#参考サイトより複数ブランチへプッシュがあった場合のために標準入力を1行ずつ読み込む 6while read oldrev newrev refname; do 7 #ブランチ名を特定し、それによって条件分岐させる 8 branch=$(git rev-parse --symbolic --abbrev-ref $refname) 9 if [ "$branch" = "develop" ]; then 10 cd /home/test/develop/ 11 git --git-dir=.git pull origin develop 12 cd "$cwd" 13 elif [ "$branch" = "release" ]; then 14 cd /home/test/release/ 15 git --git-dir=.git pull origin release 16 cd "$cwd" 17 fi 18done
コピーペーストではなくvimを用いて全て手打ちで入力していますが、
参考サイト内のものを丸々転用した部分もあるのでコードの意味を完全に理解しているわけではなくめちゃくちゃなことを書いている可能性があります。
参考:https://songmu.jp/riji/entry/2014-08-07-post-receive-branch.html
試したこと
リモートリポジトリのhooks内から
./post-receive
で直接実行しようとしても
./post-receive: Command not found.
と表示されます。
聞きたい事
- なぜpost-receiveが認識・実行されないのか
- post-receive内のbashの文法は正しいか
- 社内用のマニュアルで公開するためpost-receiveのリファクタリング案を教えてほしい
非常に知識が浅い状態で、上記内容を実現しようとしているため間違っている箇所が多々あることが予想されますが、ぜひご教授お願い致します。
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。