2012-02-17 10 views
1

私は現在、2人の参加者(私と私の友人)を持つプロジェクトにgitを使用しています。だから私は次のようにした:リモートリポジトリとGITのローカルリポジトリとの同期はどうですか?

ローカルネットワーク上のどのマシンからでも常にアクセス可能なマシンにリポジトリを作成しました。

ローカルリポジトリを作成するそれぞれのローカルマシンにこのリポジトリをクローンしました。

ここで、3つのリポジトリのコピーがすべて同じ段階にある1つの時点で、ブランチをフォークし、そのブランチで何らかの開発を開始するとします。私はそれらの変更をリモートにプッシュし、リモートに新しいブランチが自動的に作成されていることがわかります。

他のマシンでは、同じブランチを同じ名前の新しいローカルブランチにプルするので、すべて同じ状態に戻ります。

私はこのフォークブランチで完了し、マスターとマージする必要があります。マスターにチェックアウトして、git merge my_branchを実行しました。今、この変更をグローバルリポジトリと他のローカルリポジトリに反映させるにはどうすればよいですか?マージコマンドもそこに発行する必要がありますか?または、マージが自動的に同期されるようにプッシュ&プルする方法がありますか?

gitの哲学は何ですか?すべてのローカルリポジトリとグローバルリポジトリをコミットによって正確に同期させて、すべてのツリーがまったく同じになるようにする必要がありますか?または、個々のツリーが異なっていて、それに応じてリモートから引き出される必要があるブランチは何ですか?

(私は私が行っ必要何のためのコマンドを検索してGITを学んだ、しかし私は動作するようになっているかによって、非常に混乱しています)

私が作成したリモートリポジトリがあなたの後裸のリポジトリ

答えて

5

ましたマスターにマージされた場合は、git pushを使用して、他のコミットの場合と同じように、そのマージを元のリポジトリにプッシュします。あなたの友人は変更を得るためにgit pullにする必要がありますが、起源に何も新しくない限り、あなたの友人は自分のコピーでマスターの変更を行っていないので、追加のマージを実行する必要はありません。

リポジトリが常に正確に同期するとは限りません。それは分散型VCSの重要な差別化要因の1つです。

+2

このような集中化されたワークフローは、セントラルリポジトリが裸のリポジトリであることに依存します。作業ディレクトリを持つリポジトリに移動することはできません。 – Gareth

+0

@Gareth作成したリモートリポジトリは、裸のリポジトリでした。 – AnkurVj

+0

@AnkurVjそれでは、あなたはうまくいくでしょう:)もちろん、他の誰にとっても役に立つメモです誰がこの疑問を抱えているのですか – Gareth

0

この変更をグローバルリポジトリと他のローカルリポジトリに反映させるにはどうすればよいですか?マージコマンドもそこに発行する必要がありますか?または、マージが自動的に同期されるようにプッシュ&プルする方法がありますか?

git pushコマンドがあります。

0

マージした後、変更をプッシュする必要があります。あなたは後にして、変更をリモートで再マージする必要はありません これは、基本的には、企業ネットワーク上の私のオフィスでの状況だけでなく、各開発者のコ​​ンピュータ上で(Gitのレポ、および1つであるgit push

1

ください。

masterにそれらをマージしました。まず、あなたは誰がメインリポジトリに変更をマージしたい場合、彼らは彼らのため、それに起こった変更を取得する(git pullを行い、中央レポが続い

git --bare init 

で作成されたことを確認する必要があります最後のコミット、これはあなたの最後にマージする必要がある場所です)、その後にはgit pushが続きます(明らかに衝突を解決した後)。結果は、 "中央"サーバー上に新しくマージされたコミットです。

これはGit Wayかどうかわかりませんが、これまでのところ私たちのために働いています。

1

(私は私が行っ必要何のためのコマンドを検索してGITを学んだ、しかし私は動作するようになっているかによって、非常に混乱しています)

私は非常に、非常にあなたがに時間がかかる推薦少なくともprogit.org bookを参照してください。ブランチとコミットの概念を説明する豊富な情報と素敵なグラフィックスがあります。

または、マージが自動的に同期されるようにプッシュ/プルする方法はありますか?

あなたがにしたい場合は、自動的にリモートブランチにごローカル分岐の1つからを押して、(例えば、git post hooks)の助けとなるツールがあります。しかし、私はこれがではなく、だと言うことで、皆さんのニーズに合ったソリューションであると確信しています。ここには役に立つと思われるlink to a related questionがあります。

EDIT:

Gitの哲学は何ですか?すべてのローカルリポジトリとグローバルリポジトリをコミットによって正確に同期させて、すべてのツリーがまったく同じになるようにする必要がありますか?または、個々のツリーが異なっていて、それに応じてリモートから引き出される必要があるブランチは何ですか?

Gitはサーバ・クライアントSCMではありません、それは分散リビジョン管理システムだ - あなたと同じように同じgitの治療、たとえば、CVSやSVNは常に正しいアプローチではありません。 SOで普及しているワークフローはhereです。あなた自身のワークフローを開発する際に役立つ多くの関連する質問があります。 (1)(2)

関連する問題