Git保留历史拆分仓库:如何用git filter-branch过滤指定文件目录
可以使用git filter-branch按指定名称过滤文件/文件夹,且所有操作都可以在原仓库的克隆副本上完成,不会修改原仓库,完全符合你的限制要求。
操作步骤
- 先克隆原仓库到本地,所有操作都在这个副本执行,不会影响原仓库
git clone <你的原仓库地址> temp-main-repo cd temp-main-repo
- 执行过滤命令,删除不需要的内容,同时保留完整历史
git filter-branch --force --index-filter \ 'git rm -r --cached --ignore-unmatch db/ scripts/ file1 file3 even_more_stuff/' \ --prune-empty --tag-name-filter cat -- --all
- 验证结果
执行ls可查看当前目录结构,已经符合预期:
src/ other_stuff/ file2
执行git log可确认所有和保留内容相关的提交历史都完整留存。
- 后续你可以把这个处理后的本地仓库推送到你新建的主仓库远程地址即可使用。
命令参数说明
--index-filter:直接操作Git索引,比操作文件系统的--tree-filter执行效率高很多,更适合大体积仓库git rm -r --cached --ignore-unmatch:递归删除索引中匹配的路径,--ignore-unmatch参数避免历史版本中路径不存在时抛出错误--prune-empty:自动删除过滤后没有内容变更的空提交,保持历史干净--tag-name-filter cat:原样保留原仓库的所有标签-- --all:指定处理仓库的所有分支和标签
内容的提问来源于stack exchange,提问作者FrustratedWithFormsDesigner
相关产品推荐
相关产品推荐

