複数のプロジェクトを含む大きなリポジトリがあります。これらのプロジェクトのサブセットのみを含む別のリポジトリを作成する必要があります。git filter-branch
次のような他の質問への回答で説明されているように、リポジトリのクローンを使用してこれを実現できます。
<clone the source repository>
git filter-branch --tag-name-filter cat --index-filter 'git rm -r --cached --ignore-unmatch --quiet <project1> <project2>' --prune-empty -- --all
rm -rf refs/original
git reflog expire --expire=now --all
git gc --aggressive --prune=now
これは正常に動作しますが、問題は、この操作を実行するのに 1 時間以上かかることです (約 4000 のコミットがフィルター処理されます)。これは定期的に行う必要があるため、ソース リポジトリに新しいコミットが行われるため、これは理想的なソリューションではありません。
ソースに対して新しいコミットが行われたときにトリガーされるある種の「増分」フィルターブランチを実現する方法はありますか?新しいコミットのみをフィルタリングしてそれらを以前にフィルタリングされた出力?
(コード レイアウトと歴史的な理由から、プロジェクトを個別のリポジトリに分離することは実際的ではありません。)