次のgitリポジトリがありました
- レポA
- レポB
- レポC
私が組み合わせたもの
- 各レポがサブディレクトリに移動された repoAll
これは次のように見えます
- repoAll
- dirA
- dirB
- dirC
これを実現するために、 http://jasonkarns.com/blog/merge-two-git-repositories-into-one/の指示に従いました。つまり、本質的に
git remote add -f repoA /path/to/repoA
git merge -s ours --no-commit repoA/master
git read-tree --prefix=dirA/ -u repoA/master
git ci -m "merging repoA into dirA"
...
ただし、ファイルの履歴は接続されていません
git log --follow dirA/pom.xml
何も示しません。
でも、
git log --follow pom.xml
そのファイルの正しい(古い)履歴を表示します。Eclipse や他の git クライアントなどのツールでは完全な履歴を表示できないため、これでは十分ではありません。
さらに悪いことに、結合されたレポにはすでに新しいコミットがあったため、マージを再度行うことは実際にはオプションではありません (マージを行う前に移動repoA/*
する必要があったことがわかりましたrepoA/dirA
)。
repoAll の最初のマージの前に移動を行うコミットを挿入することを考えましたが、それにはすべての変更 (現在は 100 以上) をリベースして変更を解決する必要があります。
質問/解決策Git ログは、読み取りツリーのマージを実行した後、ほとんど表示されず、移動したものを除くすべてのファイルがサブディレクトリにあるように、履歴を書き換えるにはどうすればよいですか? 特定のサブディレクトリではなく、リポジトリ全体でのみ機能するようです(または、少なくともrepoAllに新しいコミットがある場合は機能しません)。
特定のサブディレクトリ (dirA など) の履歴を書き換える方法が必要だと思いますが、その方法がわかりません。