15

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

上位にあるため、実際のレポ サーバーにブランチを作成することはできません。

  1. 差分を作成して相互に電子メールで送信し、変更を失い、グループ ページに戻る必要があるときに差分を使用します。メールを受け取った人が差分を適用します。等
  2. コードに変更を加えてコミットしますが、プッシュはしません。その後、その不完全なコードが必要な人は誰でも、私たちから直接引っ張ることができます。
  3. --bare フラグを使用して、中央サーバーの別のクローンを作成します。したがって、グループ ページ専用のローカル セントラル サーバーとして扱うことができます。そこからプルして、グループ ページ用の別のワークスペースを作成できます。押したり引いたりできます。

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

  1. 退屈すぎる。私はそれにgitを使いたいです。
  2. 誰かが私から引っ張ってきて、新しい機能に取り組んだ後、(中央サーバーに) プッシュした場合、彼が私から引っ張ったものはサーバーにプッシュされません。グループページのコードが完成したとき、彼はどのようにして最終的にそれをサーバーにプッシュするのでしょうか。
  3. 同じ問題。このローカル中央サーバーからメイン サーバーにプッシュする方法はありますか? もちろん、どちらもベアレポです。1 つの裸のクローンからメインの github リポジトリにプッシュする方法はありますか?
4

3 に答える 3

8

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 pushgroups同様に使用できるようになりましたorigin

于 2012-11-14T05:56:12.027 に答える
5

Is there a way to push from one bare clone to the main github repo?

Yes, you don't have to be in a work tree to push changes from a bare repo.

Simply ssh to the place where you 'local master' is, and run:

git push origin master

As the other answer point out, you can also push directly from your local copy to a remote master, but it's sometimes more convenient to have an automated 'gatekeeper' repository like this that can be triggered to push changes out (eg. after review) to multiple remote repositories via automation, without worrying about setting up ssh keys and so forth for a specific individual to push the changes out.

于 2015-12-16T08:55:32.090 に答える
2

簡単にするために、Git は分散バージョン管理システムです。これは、リポジトリからクローンを作成するたびに、リポジトリ全体をクローンすることを意味します。そして、各クローンは完全に独立しています。実際、マシン上で複製するものはサーバー上のものとまったく同じであり、複製はプッシュ/プルなどを受け取ることができます (唯一の違いは、おそらく ssh 経由で誰も接続できないことです)

したがって、どちらの方法でも、同僚があなたからプルした場合、彼らはあなたのコミットをメイン リポジトリにプッシュできます。オプション 3 でも同じことが当てはまります。チームの git サーバーを使用し、準備ができたら、自分のマシンにプルして、そこからメイン サーバーにプッシュします。

したがって、あなたの場合、オプション 3 が最も簡単です。ただし、メイン リポジトリにプッシュすると、プライベート サーバーで行ったすべての作業がこのリポジトリに反映されます。したがって、独自のサーバーを持つことが本当に役立つかどうかもわかりません (「プライベート」ブランチに誰も触れないようにしたい場合を除きます)。

于 2012-11-14T05:58:48.213 に答える