2

次のシナリオを検討してください。

Remote repo A (master):
  dir 1
  dir 2
  file 1
  file 2

Remote repo B (branch):
  dir 1
  file 1

私がやりたいことは、2 つのリポジトリの共通ファイルの同期を保つことです。プルすると、からすべての変更を取得し、からの共通ファイルからの変更Repo Bのみ取得したいと考えていますRepo A。同様に、プッシュするときに、ローカルの変更を両方のリポジトリの共通ファイルにのみ公開したいと考えています。レポ A には存在するがレポ B には存在しないファイルは影響を受けません。

Git はこれをサポートしていますか?

4

2 に答える 2

1

何時間もの調査の結果、git サブツリーのマージを使用することにしました。ではなくgit subtree、これは git contrib ツール (専門用語のオーバーロードについて話します) ですが、戦略Git - Subtree Mergingです。私の決定の背後にある理由は次のとおりです。

  1. Web には、git サブモジュールの使用に対する警告があふれています。さらに重要なことは、リモート リポジトリへのポインタだけでなく、両方のリポジトリに共通ファイルの物理コピーを保持することが絶対に必要であることです。また、サブモジュールが提供しないメインまたはサブツリーからコードを更新する機能も必要です。したがって、git サブモジュールはアウトです。

  2. git サブツリー ツールは見栄えがよく、多くのフォロワーがいますが、詳しく調べてみると、サブツリーのマージ戦略に非常に似ているようです (実際、サブツリーのマージに関する優れたデコレータであると誰かが言っています)。マージ中にサブツリーの履歴を圧縮する機能など、いくつかの追加機能がありますが、コードをプッシュする新しい方法を学ぶという犠牲が伴います. さらに、これはまだ標準の git バイナリ (Mac では Git 10.8.4.2、ビルド済みのバイナリ) の一部ではなく、バグ修正がリリースされるたびに手動でアップグレードをインストールしたくありません。

私の質問に時間を割いて答えてくれた人、特にチャットで私を助けようとした @dekdev に感謝します。

于 2013-11-09T00:06:31.903 に答える
0

それらは別々のチームです。
のユーザーは、サブモジュールを作成する場合に必要になるB私の repo にアクセスする必要はありません。 同様に、 のユーザーはにアクセスできません。 コードが 2 つの別々のリポジトリで共有されているという事実は、リポジトリの現在のユーザーに対して透過的である必要があります。個々のリポジトリで作業できますが、両方で作業することはできません。C
AB

次に、次のような自動フックが必要です。

  • コミットごとに、AまたはB共通ファイルが何であるかを確認します
  • 他のリポジトリに応じて、これらの共通ファイルに更新をプッシュします

これは、次のことを前提としています。

  • AおよびBサーバーにアクセスできます (TeamAおよびTeamBがプッシュしている場所)
  • そこにpost-receiveフックをデプロイできます
  • そのフックは他のレポサーバーにプッシュできます (同じサーバーについて話している場合は簡単かもしれません)。

注: 両方のリポジトリ (またはリポジトリ内のファイル) へのアクセスを保護するために、gitoliteのような認証レイヤーが役立ちます。

于 2013-11-08T06:58:04.070 に答える