原项目结构
git@project
- module-a
- src
- module-b
- src
- module-common
新git项目结构
git@module-a
- src
git@module-b
- src
git@module-common
推荐使用git-filter-repo
,而不是git自带的filter-branch
。如果你使用的是较新的git版本,那么你执行filter-branch
时可以看到下面的提示。
WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as 'git filter-repo'
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
安装git-filter-repo
git-filter-repo需要你安装python3.5
及以上版本,并且gi版本最好大于2.24.0
。
首先从github上下载图中指示的文件,然后在cmd控制台执行git --exec-path
查看git路径,将下载的文件放入即可。比如我这里就是将git-filter-repo
文件放入C:/Program Files/Git/mingw64/libexec/git-core
文件夹下。你可以直接访问这个链接,打开后按ctrl+s
保存为文件即可。
另外,如果你安装python时,设置的环境变量没有python3,只有python,那么需要修改一下git-filter-repo
文件,使用记事本编辑器打开,将第一行的python3
单词修改为python
。否则执行git filter-repo
会报错。
#!/usr/bin/env python3
修改为
#!/usr/bin/env python
执行
只要执行以下代码即可。建议在一个新目录执行这些操作,防止意外的干扰原项目。
filter-repo命令中的--subdirectory-filter
意思就是将moduleA
这个文件夹作为新的根路径。请自行改为需要的文件夹名称。
git clone git@example.git
cd example
git filter-repo --subdirectory-filter moduleA/