我可以告诉你如何使用 2 个工具来做到这一点:SmartGit(客户端)和SubGit(服务器端,在这里你需要链接到你的 Subversion 的新克隆的纯 Git 存储库)。git-svn 不支持目录移动。
如果大多数文件已移动到同一目录中,两者都支持目录移动检测。最初,您可以使用任何工具移动文件并推送。
步骤 1(选项 1)。您应该通过替换来恢复您当前的提交(确保您没有本地更改):
$ git update-ref my_current_branch <commit_id_before_move>
$ git reset --hard HEAD
步骤 1(选项 2)。...或通过该特定提交的反向合并+提交(然后不会执行分支替换)
$ git revert <commit_with_wrong_move>
第 2 步(选项 1)。现在您应该重新应用您的更改:移动目录
$ git mv SRC_FOLDER DST_FOLDER
第 2 步(选项 2)。...或者只是再次挑选您的更改:
$ git cherry-pick <commit_with_wrong_move>
第 3 步。然后推送您的更改:
对于 SubGit:用于分支替换(即步骤 1 选项 1):
$ git push -f
对于简单的还原(即步骤 1 选项 2):
$ git push
对于 SmartGit,请按“推送”按钮(如果需要强制推送,它会询问)
撤消 + 重做可能会有所帮助,这看起来很奇怪,但是主要操作(目录移动)是在推送级别执行的(当开始转换为 SVN 时),您应该使用正确的工具来完成。