1

私は現在、Git を介して Web サイトの展開をテストしていますが、次の点を理解するのに苦労しています。

現在、私は GIT_WORK_TREE を webroot に設定する post-receive フックを使用して、DEV 環境にベア リモート リポジトリを持っています。「git push DEV master」のような構文を使用して、ローカル リポジトリからそこにプッシュします。これはうまくいきます。ただし、DEV にプッシュする 'develop' ブランチもあり (受信後のフックは 'git checkout -f [BRANCH_NAME] に設定されています)、これもうまく機能します。

私の質問は次の状況です: DEV でバグを見つけた ('develop' ブランチからプッシュされた) としましょう。「git push DEV マスター」(マスター ブランチにはバグのない DEV への最後のプッシュがあり、現在 DEV での開発コミットの祖先です) を実行して、それを完了できるようにしたいと考えています。しかし、これを行うと、リモート リポジトリから「すべてが最新です!」と通知されます。それは理にかなっていると思いますが、私がやりたいのは、git に強制的に「マスター」ブランチからプッシュを取得させ、Web アセットを適切にデプロイするために必要な post-receive フックを起動させることです。

ssh のリモート リポジトリに直接アクセスして、そこから master をチェックアウトしようとしましたが、これを行うには作業ツリーが必要であることがわかりました (それはむき出しになっているためだと思います)。

これを行う正しい方法は何ですか?可能であれば、元に戻したりリベースしたりすることは避けたいのですが、それが唯一の方法かもしれません。

4

2 に答える 2

1

、しかし、私がやりたいのは、gitに「master」ブランチからプッシュを取得させ、とにかく受信後のフックを起動することです。これは、Webアセットの適切な展開に必要です。

問題は、変更をすでにリモートにプッシュしているため、プッシュするものがないことです。オプションは次のとおりです。

  • ローカルブランチに変更を強制します...たとえば、ファイルのシリアル番号を更新し、コミットして、プッシュします。
  • post-receiveサーバー上でフックを手動で実行し、必要な環境変数を入力するだけです。

リモートリポジトリに移動してマスターブランチをチェックアウトしようとすると、リポジトリと作業ツリーの両方があれば(おそらくGIT_WORK_TREE自分で設定することで)機能するはずです。ただし、これによってpost-receiveフックがトリガーされることはないため、そこにある追加のロジックを手動で処理する必要があります。

于 2012-08-13T20:29:47.060 に答える
0

タグを使用します。たとえば、現在デプロイされているバージョンに「current」のタグを付け、このタグをプッシュして、post-receive-hook がこのタグに作用するようにします。

#!/bin/sh
read oldrev newrev refname

$refname には /revs/tags/current が含まれ、$newrev にはタグ付きコミットのハッシュが含まれるようになりました。別のリビジョンに変更するには、'current' タグを削除して別の場所に設定し、タグをプッシュします。これにより、ファイルにダミーの変更を加える必要がなくなります。

于 2012-08-24T13:49:34.337 に答える