質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Git

    1677questions

    Gitはオープンソースの分散バージョン管理システム(DVCS)です。

  • VPS

    468questions

    VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

gitでブランチごとに自動デプロイする際のバグ

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,176

twin_bird

score 216

さくらVPSでgitの自動デプロイを構築しています。
ローカルからのgit pushコマンドでVPS(以下、リモートの)にデプロイできるように設定したつもりなのですが、一部機能しません。

 【環境】

  • git push origin master でリモートの/var/www//html/dev/hogeTest
    git push origin master:prodでリモートの/var/www//html/dev/hogeTest/var/www/html/hogeProdの両方にデプロイする。

  • 上記のhogeTestとhogeProdはそれぞれリモートブランチからのgit clone /var/lib/git/hogeRemote.gitで設置されています。 (ブランチを指定してcloneはしていません。それぞれmasterブランチのみ保持しています。)

  • リモートブランチの場所は/var/lib/git/hogeRemote.git

  • post-update

/var/lib/git/hogeRemote.git/hooks/post-updateは以下のような記述となっています。

################
# test-deploy
################
if [ "$branch" = "master" ]
then

# Git Deploy to Test ENV
cd /var/www/html/dev/hogeTest
git --git-dir=.git pull origin master

fi

################################
# test-deploy and prod-deploy
################################
if [ "$branch" = "prod" ]
then

# Git Deploy to Product ENV
cd /var/www/html/hogeProd
git --git-dir=.git pull origin master

fi

 【問題点】

  • git push origin master で/var/www/html/dev/hogeTestへのデプロイはできるが、git push origin master:prodへのデプロイができない。

git push origin master:prodをすると以下のような出力がされます。

Total 0 (delta 0), reused 0 (delta 0)
remote: From /var/lib/git/hogeRemote
remote:  * branch            master     -> FETCH_HEAD
remote: Already up-to-date.
To git:/var/lib/git/hogeRemote.git
   859d57e..b53f3ee  master -> prod

リモートのprodブランチは更新されているようですが、/var/www/html/hogeProdでの*git pullが実行先がおかしいせいか*、hogeProdへのデプロイができません。

しかし、/var/www/html/hogeProdにて手動でgit pull origin masterをすると問題なく動作し、デプロイが完了します。

ちなみに、git push origin masterの場合は以下のような出力です。

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 396 bytes | 0 bytes/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: From /var/lib/git/hogeRemote
remote:  * branch            master     -> FETCH_HEAD
remote: Updating b53f3ee..cb429a0
remote: Fast-forward
remote:  hogehoge.php |    1 +
remote:  1 files changed, 1 insertions(+), 0 deletions(-)
To git:/var/lib/git/hogeRemote.git
   b53f3ee..cb429a0  master -> master

 なぜ?

post-updateのtestもprodも同じベースに沿って記述しているのに、なぜprodだけ上手くいかないのでしょうか?

原因究明の方法や解決策等にアイデアがある方がいましたら助力頂けますと幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ijufumi

    2016/09/20 16:57

    prodでやりたいことは、リモートのprodブランチをデプロイすることでしょうか?
    それとも、リモートのmasterブランチをデプロイすることでしょうか?

    ご存知かと思いますが、
    git push origin master:prod
    は、ローカルのmasterブランチの内容を
    リモートのprodブランチにpushしていて、リモートのmasterブランチにはpushされません。

    ですが、post-updateのコマンドは、
    git --git-dir=.git pull origin master
    となっていて、リモートのmasterブランチがpullの対象となっています。

    もし質問内容の誤字でしたら、修正をお願いします。

    キャンセル

  • twin_bird

    2016/09/20 17:14

    やりたいことは、「ローカルにはprodを置かず、master:prodでリモートのprodブランチをデプロイすること」です。
    リモートのmasterブランチはhogeTestに、prodはhogeProdにデプロイしたいです。

    キャンセル

  • kunai

    2016/09/20 17:30

    ijufumiさんのコメントで答え出てますね。

    キャンセル

回答 2

checkベストアンサー

+1

/var/www/html/hogeProd
でやっている

git --git-dir=.git pull origin master 


git --git-dir=.git pull origin prod:master 


に変えてみたらどうでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/20 17:53

    回答ありがとうございます。
    警告がいくつかでていますが、意図する動作ができた気がします!汗

    キャンセル

0

/var/www/html/hogeProd/.git/config を確認して、正しいリモートが参照されているか確認してください。
/var/lib/git/webyone をfetchして、Already up to dateと言っているように見えます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/20 16:55

    回答ありがとうございます。
    /var/www/html/hogeProdと/var/www/html/dev/hogeTestのどちらのconfigも以下の通りでした。

    ```
    [core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    [remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = /var/lib/git/hogeRemote.git/
    [branch "master"]
    remote = origin
    merge = refs/heads/master
    ```

    どこかおかしいでしょうか。。。?

    キャンセル

  • 2016/09/20 16:59

    すみません! /var/lib/git/webyoneではなく、正しくは/var/lib/git/hogeRemoteでした。失礼しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Git

    1677questions

    Gitはオープンソースの分散バージョン管理システム(DVCS)です。

  • VPS

    468questions

    VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。