Перемещение файла в другую папку вместе с историей в git


Прежде всего, я взглянул на этот Вопрос, который в точности совпадает с тем, что я здесь рассматриваю. Но проблема в том, что решение , данное в вопросе, не работает для меня.

Приведенное решение таково:

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

Я попробовал эту команду из cmd.exe в каталоге mdwtest, который является моим локальным репозиторием git. Я побежал cmd.exe как администратор.

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

Но это дало следующий вывод в консоли cmd.exe:

D:gittrainingmdwtest>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 вместе с историей.

В то время как решение кажется работать на многих людей, похоже, что-то идет не так в моем случае.

Не могли бы вы объяснить мне, что я здесь упускаю ?
1 2

1 ответ:

mv main/java/ /test/java/ это кажется странным. Это должно быть

mv main/java/ test/java/

(test, не /test)

Кроме того, убедитесь, что a.txt не открывается в каком-либо редакторе или Проводнике Windows.