Подтвердить что ты не робот

Может ли Git реструктурировать мои папки без потери истории?

Я получил ток репо git, я единственный, кто его использует. Я хочу взять все файлы и папки под корневую папку и поместить их в новую папку, например:

текущий корень desc

main ->
  src
  res

новый корень

main ->
  app1
    src
    res

Как я могу сделать это в git на окнах без потери моей истории?

4b9b3361

Ответ 1

TL; DR

Вперед: перемещайте файлы и каталоги. Просто убедитесь, что вы не делаете никаких изменений в файлах в одном и том же коммитах, как ваша реструктуризация каталога.

Почему это работает

Git - это трекер контента, а не трекер. Если вы перемещаете/переименовываете файлы, но не делаете никаких других изменений в содержимом этих файлов, тогда Git just перезаписывает древовидные объекты. Файловые капли не изменяются операциями каталога; информация о местоположении каталога хранится отдельно в древовидных объектах.

Фактическое обнаружение переименования обрабатывается отличными блоками и деревьями и ищет настраиваемый процент сходства между файлами. Это означает, что Git на самом деле не сохраняет ходы или переименовывает напрямую; он вычисляет их из различий между фиксациями.

Результат всего этого заключается в том, что ваша история не привязана к определенному имени файла или структуре каталогов. Это работает очень хорошо для большинства случаев использования, но контрастирует с такими системами, как Bazaar, которые отслеживают переименование как операции первого класса.

Ответ 2

Вы можете просто переместить файлы, и Git будет (или должен) заметить, что это произошло. Он сохранит историю.

Если по какой-то причине он не заметил движения, вы можете попробовать использовать diff с опцией --find-copies-harder.