主要观点:开发者和代码维护者常需在代码仓库间移动文件/文件夹,过去常用 git filter-branch但因其历史重写问题不再是首选,现在可使用 git 命令行和 filter-repo命令轻松导出带历史的文件,且其需单独安装。
关键信息:
- 背景:过去常用 filter-branch但有问题,patching 也非完美选择,现在推荐使用 filter-repo。
- 安装:不是 git cli 的一部分,需单独安装,不同系统安装方式不同,项目 github repo 有安装说明,安装后可作为 git cli 的子命令使用。
操作流程:
- 清理源仓库,可通过
git filter-repo --path <include-folder> --path <include-file>
包含文件/文件夹及其历史,或通过git filter-repo --path <folder> --path <file> --invert-paths
排除。 - 将源仓库添加为目标仓库的远程源,如
git remote add <origin-name> <source-repo-folder-path>
。 - 从源仓库获取并合并更改和历史,如
git fetch <origin-name>
等。 - 清理,如
git remote rm <origin-name>
和git branch -d <branch-name>
。
重要细节:在源仓库进行清理操作时,最好在本地分支进行以免影响原仓库;安装说明可在项目 github repo 的 INSTALL.md 查看。
- 清理源仓库,可通过
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。