2011-08-11 15 views
2

をプッシュする状況である:Gitリポジトリ:クローンの適切な順序、引く。ここで

本番サーバー

  • サイトA(/ホーム/ A/WWW)
  • サイトB(/ホーム/ B/WWW)
  • サイトC(/ホーム/ C/www /の)

DEVELOPMENTコンピュータ

[現在空我々は物事を設定していると...これまで開発者は、我々はファイルを編集します独自のクライアント・マシンを持っている]

私は生産に対する

をやった:

cd /home/a/www/ 
git init 
add . 
commit -m "Initial loading of files" 


cd /home/b/www/ 
git init 
add . 
commit -m "Initial loading of files" 


cd /home/c/www/ 
git init 
add . 
commit -m "Initial loading of files" 

だから、すべてのプロジェクトは別々のgitプロジェクトに入っています。今は、すべての開発者のコ​​ンピュータにロードし、必要に応じて編集してアップロードできるようにすることです。私は、プロジェクトBを編集したいと言う:

cd ~/ 
git clone ssh://server/home/b/www/ website_b 

開発者そしてウェブサイトを編集し、変更をアップロードする準備ができている:

cd ~/website_b 
git commit -a -m "I have made some changes" 
git push 

私はは、これは正しい手順だったを考えており、このこと運用サーバー上で変更内容を/home/b/www/にアップロードします。しかし、私は警告の束を取得し、ものが混乱する。私はここで同じ問題を抱えています:git: updating the current branch

しかし、私はgitにとって非常に新しく、コンセプトとワークフローを理解するのに苦労しています。枝、トランク、マスター、起源はすべて私には少し不明です。私は物事を今のところ単純にしておき、それを働かせたい。 1つのプロジェクトで同時に2人以上の人と作業することはありません。また、サブプロジェクト(ブランチ?)を作成する必要はありません。少なくとも、今のところ。私はちょうど仕事をしたい。私がしたい:

  • メイクは彼らにすべてです

をアップロード

  • を変更本番サーバから現在のプロジェクトをダウンロードしてください。ここで何がうまくいかないのですか、これをより良く理解するために私は何を読んだり、学んだり、練習するべきですか

  • +1

    将来的には、「しかし、私は警告の束を得て、物事が混ざり合ってしまいます」といったようなものを投稿しないでください。常に正確なエラーが含まれています。私たちは「物事が混乱する」とどう解釈するのですか? – meagar

    +0

    私がリンクしている記事と同じ箇所に警告が表示されるので、それを再度コピーしなかったのです。そしてその質問は、特にそれらのエラーに関するものではありませんでした。しかし、私はあなたのポイントを取得し、それを考慮する、ありがとう。 – user852091

    答えて

    3

    ワークフローは完璧です。唯一のことは、デベロッパーマシンからプッシュするサーバー上のreposは、bare reposと呼ばれるものでなければなりません。

    ですから、サーバ上でプロジェクトを作成するときに、ん:

    git init --bare .

    レポは裸この意志のセットアップ、あなたが安全に彼らにプッシュすることができます。

    レポにあるファイルをサーバーから配信する場合は、git cloneから中央の裸のレポからファイルを配信する場所まで、hooks(ポスト受信のように) )を裸のレポでgit pushまたはgit pullに、あなたのウェブサイトを提供するのに使うレポから送ってください。 、非裸のレポはこれらを持っていない(つまり、あなたが作業ディレクトリを持っている通常のレポ取引することができためにプッシュするレポファイルをチェックアウト - http://toroid.org/ams/git-website-howto

    *

    は、そのフローの詳細についてはこちらをご覧くださいレポのメタデータとオブジェクトのみ)。しかし、それはあなたが押しているレポのための裸のレポを持っていることをお勧めします。なぜそうなのかのより多くの詳細な説明のためにここを見て:http://gitready.com/advanced/2009/02/01/push-to-only-bare-repositories.html

    1

    私はすぐに見つけることが、より多くのがあるかもしれないことができたいくつかの可能性のある問題があります。

    A)にsshかかわらず接続しているユーザがプッシュをしているが、この方法でアクセスされた場合は、リモートリポジトリにプッシュするために少なくとも.gitリポジトリでファイルioのアクセス許可が必要です。

    b)作業ディレクトリが接続されたリモートリポジトリに(正常に)プッシュすると、ではなく、に新しいコミットが自動的にチェックアウトされます。作業ディレクトリはリモートプッシュの前の状態のままです。

    gitosis(非推奨)やgitoliteのようなものを使用して、(中央の)開発リポジトリをセットアップすることを強くお勧めします。次に、あなたのdevサーバからライブサーバにプッシュすることができます。ただし、ライブサーバー上の新しいコミットを明示的にチェックアウトする必要があります(git checkout HEADはこれを行う必要があります)。ポストプッシュフックを使用してチェクアウトを自動化することができます。 もう一つの選択肢は、私が個人的にもっと好きなdevサーバー上でライブサーバーにgit pullを実行させることです。これは明示的なチェックアウトを必要とせず、ライブサーバーから発行する必要があります。これにより、より良いアクセス制御が可能になります。

    関連する問題