0

2 つのリモート リポジトリがあります (A と B とします)。A は B に似たマスター (コンテンツに関して) を持っていますが、同じではありません。

A が B と同じマスターを持つように、B から A を更新したい。A のマスターが B と同じになるように、A を B から強制的に更新したい。次のようにします。

1. B のマスターをローカルにフェッチします。

2.これをBに押し込みます。

しかし、これが最善の方法であるか、正しい方法であるかはわかりません

更新: これは 1 回限りのアクティビティです。常に両方を同期する必要はありません

4

2 に答える 2

2

あなたが探しているものを理解していれば - 継続的な統合ではなく、1 回限りの変換 - これはうまくいくはずです。現在既存のローカル リポジトリで動作するように適応させることができるので、少しやり過ぎですが、ローカル リポジトリの現在の状態について仮定する必要があります。このアプローチは、コミットされていない変更、プッシュされていないことによる競合を回避するのに役立ちます。状態など

git init newrepo                                   # create a new scratch space repo
cd newrepo
git remote add originA <url or relative path of A> # add both original repos as remotes
git remote add originB <url or relative path of B>
git fetch originA master                           # fetch the branches we want
git fetch originB master
git checkout -b newbranch originB/master           # start a new branch from B's master
git merge -s ours originA/master                   # merge A's master in, but ignore
                                                   # the content, so the result is
                                                   # exactly B
git push originA newbranch:master                  # push the new merged head to both
git push originB newbranch:master                  # original repos

この後、一時リポジトリを取り除き、通常の作業リポジトリに戻り、git fetchそこでgit pull更新を行うことができます。この時点で、A と B はマージされていますが、コンテンツは B とまったく同じであり、両方の元のリポジトリがマージされた結果で更新されています (そして、A リポジトリは、少なくともそのmasterブランチに対しては、ある意味で冗長です。他の作業が行われていない場合は、おそらくクリーンアップすることもできます)。別の言い方をすると、何らかの理由で A を参照する必要がある場合に備えて、B リポジトリには A と B の両方の完全な履歴が含まれるようになりましたが、A は基本的に B の開発のために破棄されました。

于 2013-07-30T16:06:14.383 に答える
1

強制プッシュを使用して、一方からプルし、他方を上書きできます。

$ git pull A master
$ git push B master -f 

一般に、強制的にプッシュするブランチにあるすべての履歴と潜在的な違いを削除しているため、強制的にプッシュすることは避ける必要があります。

于 2013-07-30T17:30:22.347 に答える