2012-04-10 11 views
1

私は2つの非裸のgitリポジトリを持っています.1つはローカルマシンで開発し、もう1つはサーバー上にビルドします。ローカルのリポジトリには、 "git push -f server"というポストコミットフックがあります。ローカルマシンをコミットするたびに、変更がサーバーにプッシュされます。 残念ながら、リモートのgitステージでは、私の変更を "元に戻す"段階にあります。私は手動でサーバ上で "git reset HEAD -hard"を行う必要がありますが、これはかなり面倒です。復帰をステージングせずに変更を受け入れるようにgitに指示するにはどうしたらいいですか?またはサーバー上で自動的にリセットを行う方法は?ポスト受信フックをサーバーに追加しようとしましたが、動作しません。プッシュ後にリモートでステージングされた変更をリセットする方法はありますか?

は、私は同様の質問How do I push to the current git branch on remote, and have changes reflected immediately?を発見したが、それはあなたが選択してい(

+0

それは非常に単純であることが判明しました: フックの実行可能な権利を忘れることはありません! 現在は正常に動作しています) –

答えて

0

を助けなかった:あなたがポストを必要とし、その場合には非裸のレポに直接プッシュ

裸のレポから新しいコミットを引っ張っ
 
    $ cat > hooks/post-receive 
    #!/bin/sh 
    GIT_WORK_TREE=/var/www/www.example.org git checkout -f 
    $ chmod +x hooks/post-receive 
  • か、あなたは裸のレポにプッシュし、ライブ以外の裸のレポへのフックスイッチを持つことができ、
    を参照してください「Git submodule on remote bare」(君サブモジュールのアスペクトを無視することができます)

私は2番目のアプローチに賛成する傾向があります。これは、非裸のレポで直接HEADを直接変更するよりも「クリーン」に見えます。

+0

ありがとう、VonC。 残念なことに、サーバー上の受信後のフックは、ローカルマシン上で実行されているように見えるため、非常に遅くなります。これは、ファイルがネットワーク経由でアクセスされることを意味します。プロジェクトはかなり大きく、リセットには数分かかります。 "git config receive.denyCurrentBranch warn"は何の違いもありません。 –

+0

@ YuriyKulikovこの裸のレポは生の非裸のレポと同じボックスにあるため、裸のレポの後受信セットの場合はそうであってはなりません。ネットワークは呼び出されません。 – VonC

関連する問題