あなたが探しているものを理解していれば - 継続的な統合ではなく、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 の開発のために破棄されました。