我有一个包含多个项目的大型存储库。我需要创建另一个仅包含这些项目子集的存储库。我可以使用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
工作正常,但问题是执行此操作需要一个多小时(大约4000个提交被过滤)。由于我需要定期执行此操作,因为对源存储库进行了新的提交,因此它不是理想的解决方案。
是否有办法实现某种“增量”过滤器分支,在对源进行新提交时触发,并通过仅过滤新提交和合并来更新(而不是完全重新创建)过滤后的存储库他们到先前过滤的输出?
(由于代码布局,并且由于历史原因,将项目分成各自的存储库是不切实际的。)