2012-11-14 4 views
12

私と大手チームの他の二人は、プロジェクトの別のページで作業しています。それをグループページと呼ぶことにしましょう。グループページでは、不完全なコード(中央リポジトリに送信したくないコード)を交換する必要があります。また、この間、グループページに関連しない機能についても、中央サーバにコミットしてプッシュする必要があります。私はこの問題の解決策を見ています、ここに私の考えです。それらにコメントしてください。どのように裸のgit repoから別のものにプッシュするには?

上位のアップが原因で、実際のレポサーバーにブランチを作成できません。

  1. 差分を作成してメールで送信し、グループページに戻ったときに変更を失い、差分を使用します。電子メールを受け取った人はdiffを適用します。
  2. コードを変更してコミットしますが、プッシュしないでください。不完全なコードを必要とする人は、私たちから直接引き出すことができます。
  3. --bareフラグを使用して、中央サーバーの別のクローンを作成します。だから私たちはグループページのためのローカル中央サーバとしてそれを扱うことができます。そこから引き出して、グループページ用の別のワークスペースを作成することができます。我々はそれを押して引っ張ることができます。

これらのそれぞれに問題があります。

  1. は面倒です。私はそれのためにgitを使いたいです。
  2. 誰かが私から引っ張ってきて、新しいフィーチャーを作った後、(中央サーバーに)プッシュすると、私から引っ張ったものはサーバーにプッシュされません。グループページのコードが完成したら、最終的に彼はどのようにそれをサーバーにプッシュしますか?
  3. 同じ問題。このローカル中央サーバからメインサーバにプッシュする方法はありますか?どちらももちろん裸のレポです。 1つの裸のクローンからメインgithubリポジトリにプッシュする方法はありますか?
+0

bitbucketで無料のプライベートgit repoを作成し、そのレポをリモコンに追加し、必要に応じてgithub repoマスターにコミット/プッシュアップすることができます。しかし、これは非常に奇妙に思えます。どうしてあなたのgithub repoにプルリクエストをしてブランチをやっていないのですか? –

+0

私は許可されていないと言ってみましょう。あなたが言うようにすれば、そのビットバケットレポから私のマスターに変更をプッシュすることができますか? –

+0

あなたはbitbucketから直接プッシュしません。そのレポを使用してチームとコラボレーションします。あなたはすべて変更を行い、それらの変更をビットして押し込み、それらの変更をあなたのローカルレポ(あなたのマシン)にプルダウンし、ローカルリポジトリからgithubマスターにプッシュアップします。理にかなっている? –

答えて

7

3が最適です。実際、これはGitの使用方法を実際に示すものです。個々のコンポーネント用のリポジトリがあり、作業が完了したときに、より中央のリポジトリにフィードします。

他の人の変更をプッシュする問題はありません。変更を加え、グループページリポジトリにプッシュします。それから私はそれを引き出し、いくつかの変更を加え、それらを押し戻す。今我々は完了したと判断する。中央のリポジトリにプッシュすると、そのプッシュには自分の変更と、変更に基づいた変更の両方が含まれます。

裸のレポから別のレポにプッシュする必要はありません。 Gitはローカルリポジトリから1つ以上のリモートリポジトリにプッシュすることで動作します。クローンを作成すると、「origin」というデフォルトのリモートリポジトリがあります。しかし、必要なだけ多くのリモートリポジトリを設定することができます。これを設定するには、中央リポジトリからクローンを作成したとしましょう。それは「起源」と呼ばれています。今すぐあなたは裸のレポを作成します:それはssh://some-machine.corp.com/path/to/groups-repo.gitにあります。ローカルの作業リポジトリでは、git remote add groups ssh://some-machine.corp.com/path/to/groups-repo.gitを実行するだけで、そのグループリポジトリへの参照があります。今度はgit fetch,git pullgit pushなどをgroupsoriginと一緒に使用できます。

+0

私があなたを理解していることを確認するために、もう一度言わせてください。 マスター(github)があります。ここで、私たちはすべて引き寄せて押しています。これを私たちの「通常の」コーディングに使用し続けます。 別のマシンでは、マスターの裸のクローンを作成し、それをグループと呼びましょう。次に、私たちのマシンでは、このマシンから別の作業スペースにクローンします。だから私たちは2つの異なる。グループページに関連するすべてのコーディングでは、グループマシンからグループワークスペースへのプッシュとプルを行います。私たちの仕事が完了すると、あなたが今述べたプロセスによって、1人の男がマシンからグループを引き出し、それをギブスにプッシュします。 –

+0

@カフェインほとんどそれを手に入れました。 1つのトリックは、別のワークスペースにクローンを作成する必要がないことです。 1つのワークスペースに複数のリモコンを作成することができます。 "groups/master"を追跡するローカルブランチと "origin/master"を追跡するローカルブランチを使用して、 'git checkout'でいつでもそれらを切り替えることができます。必要に応じて複数のワークスペースを使用することもできますが、複数のリモートを持つワークスペースを使用するのが便利な場合もあります。そして、ええ、あなたが開発をやっているとき、グループのマシンから最新のコードを引っ張ってきた人は、それをメインのレポにプッシュできます。 –

+0

これらのブランチをマージする必要はありません。グループブランチ上にあるので、最後の変更をgithub remoteにプッシュした後、このブランチを削除するだけで済みます。そして私のマシンのメインブランチを引き出すと、グループ変更はgithubにプッシュされてから追加されます。 –

1

簡単にするために、Gitはバージョン管理システムです。これは、リポジトリからクローンするたびにリポジトリ全体をクローンすることを意味します。各クローンは完全に独立しています。実際、マシン上でクローンするものは、サーバー上のクローンとまったく同じです。クローンはプッシュ/プルなどを受け取ることができます。同僚があなたから引いた場合、彼らはあなたのメインのレポにコミットをプッシュすることができ、あなたが行くいずれかの方法、だから、

を(唯一の違いは、あなたは、誰もがsshを経由で接続できないことが考えられます)。オプション3で同じことが適用され、チームのgitサーバーを使用します。準備ができたら、自分のマシンにプルしてそこからメインサーバーにプッシュします。

あなたのケースでは、オプション3が最も簡単です。ただし、メインリポジトリに移動すると、このリポジトリによってプライベートサーバで行ったすべての作業が完了します。だから、自分のサーバーを持っているのが本当に便利だとは思えません。

2

裸のクローンからメインギブスレポにプッシュする方法はありますか?

はい、裸のレポから変更をプッシュするために作業ツリーに入る必要はありません。

あなたのローカルマスター」である場所に簡単にSSH、および実行します。

git push origin master 

を他の答えが指摘するように、リモートマスターへのローカルコピーから直接もプッシュすることができますが、それはです時には、自動化された 'ゲートキーパー'リポジトリを持つことがより便利な場合があります。このリポジトリは、特定の個人がプッシュするためのsshキーの設定などを心配することなく、自動化によって複数のリモートリポジトリに変更をプッシュする変更が出ます。

+0

リモートマスターからローカルマスターにプルする方法についてコメントしてもらえますか? 'git pull origin master'は「この操作は作業ツリーで実行する必要があります」 – SOUser

関連する問題