将文件连同 git 中的历史记录一起移动到不同的文件夹

Moving a file to different folder along with history in git

首先,我看了一下问题中给出的这个question which is exactly the same what I am addressing here. But the problem is the solution,对我不起作用。

给出的解决方案是这样的:

git filter-branch --tree-filter "cd x; mkdir -p p/q; mv [files & sub-dirs] p/q" HEAD

x 下的文件和子目录移动到 x/p/q

这正是我想要的。但这在我尝试时不起作用。

我的目录结构是:

mdwtest

   |-src
   |   |-main
   |   |    |-java
   |   |    |    |-a.txt
   |   |-test
   |   |    |-java

我在 mdwtest 目录中的 cmd.exe 中尝试了此命令,该目录是我的 git 本地存储库。我 运行 cmd.exe 作为管理员。

git filter-branch --tree-filter "cd D:/gittraining/mdwtest/src; mv main/java/ /test/java/" HEAD

但它在 cmd.exe 控制台中给出了以下输出:

D:\gittraining\mdwtest>git filter-branch --tree-filter "cd

D:/gittraining/mdwtest/src; mv main/java/  /test/java/" HEAD Rewrite
09a1198eeb1bf26a1245ea00cae38f22e91fd708 (1/15)mv: cannot move
`main/java/' to `/test/java' tree filter failed: cd

D:/gittraining/mdwtest/src; mv main/java/ /test/java/ rm: cannot
remove `/d/gittraining/mdwtest/.git-rewrite/revs': Permission denied
rm: cannot remove directory `/d/gittraining/mdwtest/.git-rewrite':
Directory not empty

我能从中得到的是,它在将 main/java 移动到 test/java 时遇到了一些问题,我不知道是什么阻止了它这样做。

实际上我希望 src/main/java/a.txt 文件与历史记录一起移动到 src/test/java

虽然该解决方案似乎对很多人都有效,但我的情况似乎出了问题。

你能帮我解释一下我在这里遗漏了什么吗?

mv main/java/ /test/java/ 好像很奇怪。应该是

mv main/java/ test/java/

(test, 不是 /test)

除此之外,请确保 a.txt 未在某些编辑器或 Windows 资源管理器中打开。