Git迁移仓库目录至新仓库时如何保留原目录结构(含提交历史)
解决Git迁移目录时保留原层级的问题
你遇到的问题是因为默认过滤目录后,工具会把目标目录移到仓库根目录,要保留src/main/scala的完整层级,只需要调整过滤命令即可,以下是修正后的步骤:
步骤1:克隆旧仓库并进入目录
先把旧仓库克隆到本地(已克隆可跳过):
git clone git@your-old-repo-url/repo-old.git cd repo-old
步骤2:用git filter-repo保留完整目录层级
原教程的命令会把src/main/scala下的内容移到根目录,现在我们要保留整个路径结构,执行下面的命令:
git filter-repo --path src/main/scala --path-rename src/main/scala:src/main/scala
说明:
--path指定要保留的目录,--path-rename设置前后路径一致,就是告诉工具不要修改目录结构,只保留该路径下的所有历史和完整层级。
如果你的Git版本低于2.22(没有git filter-repo),可以用旧的git filter-branch命令替代:
git filter-branch --prune-empty --index-filter ' git rm -r --cached --ignore-unmatch . git reset $GIT_COMMIT -- src/main/scala ' HEAD
步骤3:关联新仓库并推送
本地仓库已只保留src/main/scala的完整层级和对应历史,接下来关联新仓库:
git remote add new-repo git@your-new-repo-url/repo-new.git
然后推送到新仓库(若新仓库已有内容,需确认可以覆盖后加--force):
git push new-repo main --force
验证结果
克隆新仓库到本地查看:
git clone git@your-new-repo-url/repo-new.git cd repo-new ls -la src/main/scala
就能看到完整的目录层级和对应的提交历史了。
内容的提问来源于stack exchange,提问作者Berlin Brown
相关产品推荐
相关产品推荐

