2009-08-28 10 views
6

これは、慣習、ベストプラクティス、個人的な好みについての質問です。git right(プライベートレポWebサイトコード用)を使用していますか?

私はgit noobです。私のウェブサイトコードは分かち合う価値がないので、githubなどは使用しません。

gitにはセントラルレポジトリは必要ないと知っていました。私のワークステーションとサーバは2つのノードであり、ワークステーションからサーバへの変更をプッシュします。私が始めたとき

は、コードがサーバー上でのみだったので、私:

サーバー上
  1. :ワークステーションでgit init
  2. :陽気には変更を加えて、ワークステーション上でローカルに
  3. コミット
  4. git clone [email protected]:path/to/repogit push [email protected]:path/to/repo

私は奇妙な結果を得ました。 が追加されたファイルは、ローカルにサーバーに表示されたでしたが、既存のファイルへの変更は反映されませんでした。

次に、チェックアウトされているリモートブランチへのプッシュに対する警告を読みました。だから、新しいセットアップは次のとおりです。

  1. は裸のリポジトリ
  2. が私のサーバー上で裸のリポジトリ(~/repos/mysite.git - ないパブリックフォルダ)を入れて作るためにgit clone --bare
  3. コードローカルおよび:サーバでgit push [email protected]:repos/mysite.git
  4. :最新

を取得するgit pull ~/repos/mysite.gitは、このを修正しますか?論理的ですか?それはあなたがするだろうか?

答えて

4

新しい設定は、で、サーバーリポジトリを正しく設定する方法です。

詳細についてはPro Git本のGetting Git on a Serverの章を参照してください。

+1

guhは私がやっていたことに特化した章です。私はPro Gitを読む前に、より多くのgitの質問をするでしょう... – EMiller

+0

これは良い読書です。楽しむ :) – spatz

5

あなたが何をしようとしても、git hooksを使用してビットを自動化したい場合があります。フックは、特定のイベントでgitが実行する一連のスクリプトです。関連するものは、(サーバーのリポジトリ内の)更新後フックです。通常のレポでは、フックは.git/hooksにあるので、ベアレポではhooksです。このディレクトリには現在、最近のバージョンでは*.sampleという名前のフックスクリプトがたくさん含まれています。 post-updateという名前のサーバを作成し、サーバをプッシュした後に実行するアクション(たとえば、他のリポジトリにcdしてプルを実行する)を含める必要があります。

解決策の詳細については、チェックアウトされたブランチにプッシュしないで正しいことをしています。あなたがやっている唯一の可能性のある問題は、ファイルをチェックアウトするためにのみ使用されるリポジトリの余分なコピーでサーバーが終わることです。あなたはディスクスペースのこの無駄を好きではないことを決定した場合、私は、これはあなたがやりたいだろうかなり確信している:

git --work-tree=/path/to/checkout-dir --bare reset --hard 

これは、作業として指定されたパスを使用して、適切な状態にリセットするためにgitを伝えますリポジトリは実際には裸であることに留意してください。これまで私は個人的にこの種のことをしていませんでしたが、私の小さなテストではうまくいくようです。

注:チェックアウトされたブランチにとにかくプッシュすることを決めた場合(サーバーのレポが決してファイルのコピーをプッシュしてチェックアウトすることがない場合のみ)サーバーのgitconfigでreceive.denyCurrentBranchをfalseに設定し、サーバー上でgit reset --hardを実行し、作業ディレクトリを強制的にその状態にすることができます。

2

「なぜ私は "git push"の後にリモートリポジトリの変更を見ますか? " GitFaq(Git Wiki上)

関連する問題