あなたがしたいことは可能です。それは多少関わっているかもしれません。以下では、履歴リポジトリRepo0を参照し、10個の新しいリポジトリ(Repo1、Repo2、...)に移行します。
コミット、gitの中で新しい歴史
を作成するには、多かれ少なかれ原子です。あなたは本当に "バンドルを作成し、これらのパスのみを含める"とかそんなものを言うことはできません。代わりに、部分プロジェクトごとに「新しい履歴」を作成する必要があります。これはfilter-branch
を使用して行うことができます。
もちろん、分かりやすいブランチがあれば簡単ですが、Repo0には任意のプロジェクトに関連するブランチのセットがあるとしましょう。 master
およびdev
にRepo1
の関連性のある歴史が含まれているとします。
のでRepo0
に、あなたは今、あなたは一人でRepo1
に関連する歴史の中に「大きな歴史」を変換する、新しい枝をフィルタリングし、新たな支店に
git branch Repo1/master master
git branch Repo1/dev dev
を作成することによって開始します。 Repo1
がRepo0
のサブディレクトリに対応する場合、これは簡単です。物事は、その後、あなただけsubdirectory-filter
をシンプルな使用することをしているのであれば、最良の場合Repo0
に
Project1-Files/
some.file
test/
test.file
Project2-files/
another.file
...
とRepo1
のように見えるが
some.file
test/
test.file
で終わるでしょう。
git filter-branch subdirectory-filter Project1-Files --prune-empty -- Repo1/master Repo1/dev
さらに整理が必要な場合は、tree-filter
を使用する必要があります。 my-filter.sh
git filter-branch tree-filter my-filter.sh --prune-empty -- Repo1/master Repo1/dev
はRepo1
の正しい構造にRepo0
からworktreeを変換するスクリプトです。これはsubdirectory-filter
よりも多くのリソースを消費します。
妥協はindex-filter
を使用することです。実際に複雑にしたい場合は、正確にtree-filter
より速くすることができます。構文はtree-filter
と同じですが、フィルタスクリプトは作業ツリーではなくインデックスで直接操作する必要があります。したがって、「単純な」妥協案は、無関係なファイルをすべて削除することですが、関連するファイルはディレクトリ構造のどこに残しておきます。したがって、あなたの履歴には、履歴が一緒につながっているような、偽の「ファイル移動」があるかもしれません。
とにかくこれが正常に実行されると、Repo1/master
とRepo1/dev
にはRepo1
に適した新しい履歴が含まれます。 (master
とdev
はまだ「大きなプロジェクト」の歴史となり、あなたはお互いレポの新しい歴史を構築するための出発点として、それに戻って行くよ。)
次はあなたがRepo1
に新しい歴史を移します。あなたはバンドル(Repo1/master
とRepo1/dev
を含む)でこれを行うこともできますし、直接そのようにRepo1
にリモートとしてRepo0
を追加し、ちょうどfetch
レフリーことができます。
最後に、あなたが移行し、「古い歴史」にRepo1
ですでにだ「最近の歴史を」グラフトでしょう。これには2つの一般的なアプローチがあります。
一つの方法は、物理的に再びfilter-branch
を使用することになり歴史を書き換えることです。これにはいくつかのバリエーションがありますが、基本的にはfilter-branch
の--parent-filter
の仕組みを見てください。これにより、最もシームレスな履歴が作成されますが、各コミットのIDはRepo1
に変更されます。ので、私のアドバイスは、あなたがRepo1
起源に変換を行い、その後、誰もが再クローンを、誰もが自分のRepo1
変更をプッシュし、そのクローンを捨て、「ハードカットオーバー」を行うことです。
ハードカットオーバーを調整できない場合や、何らかの理由で古いコミットIDを失うことができない場合は、git replace
を使用してヒストリーブレークを記録することを検討してください。一部の癖や制限があるため、git replace
ドキュメントをご覧ください。
またはコースのあなただけの古い歴史の上にあなたの枝をリベースしようとしたことがあり
それぞれの新しいレポに、引用文献の第二セットの後ろに「古い歴史を」残すことができますか? – Jens
https://stackoverflow.com/questions/359424/detach-move-subdirectory-into-separate-git-repository –