Git: перемещать файлы в истории тоже - PullRequest
8 голосов
/ 14 апреля 2011

Возможно ли с помощью инструментов Git перемещать файлы в новую папку при изменении полной истории, как если бы файлы были там с момента их первого добавления?

Я пришел к этому после объединения нескольких репозиториев вместеЯ переместил файлы из нескольких репозиториев в отдельные папки внутри одного «супер» репозитория, однако объединенная история ведет себя очень плохо с инструментами git rebase и git svn, поскольку совершенно разные файлы могут конфликтовать в их старых местах.

Ответы [ 3 ]

7 голосов
/ 15 апреля 2011

Итак, теперь это сделано:

git filter-branch --tree-filter '(ls -A; mkdir TheSubdir; echo TheSubdir) | xargs mv'

Странно, но приятно: .git dir остается на своем месте;может быть, мерзавец как-то мешает его движению?

5 голосов
/ 14 апреля 2011

Чтобы изменить всю историю, вам нужно будет переписать каждый коммит.git filter-branch - лучший способ сделать это.В частности, для вашего случая git filter-branch --tree-filter some-command проверит каждую версию вашей истории, запустит команду, в которой вы можете изменить рабочее дерево по своему усмотрению (например, перемещение соответствующих каталогов), а затем переписать этот коммитсодержать новое содержимое дерева.

0 голосов
/ 08 августа 2017

Команда в принятом ответе не будет выполнена для файлов / каталогов, содержащих пробелы и т. Д. Следующая версия безопасна:

git filter-branch -f --tree-filter 'mkdir TheSubdir; \
find . -maxdepth 1 -name TheSubdir -prune -o -name . -true -o -print0 | \
xargs -0 mv -t TheSubdir'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...