как изменить удалить + добавить, чтобы двигаться в истории Git - PullRequest
2 голосов
/ 04 декабря 2009

У меня есть репозиторий git, представляющий собой смесь некоторых старых репозиториев SVN. когда я смешал все, что я не понял, чтобы сделать git mv вместо простого перемещения файлов, теперь история svn для большинства файлов теряется. Есть ли способ исправить это?

старая структура была что-то вроде:

svn1
|_apps/
|_tests/
|_...

svn2
|_src
|_libs

svn3
|_src
|_libs

и сейчас:

   root
   |_libs
   |  |_svn1_name
   |  |  |_apps
   |  |  |_tests
   |  |  |_...
   |_addons
   |  |  |_svn2_name
   |  |  |  |_src
   |  |  |  |_libs
   |  |  |_svn3_name
   |  |  |  |_src
   |  |  |  |_libs

Я пытался выполнить извлечение предыдущего коммита для этого mv, сделать git mv, создать новую ветвь и перебазировать master против этого, но структура довольно сложная, и объединение является проблемой. Есть ли более простой способ сделать это?

Ответы [ 2 ]

4 голосов
/ 06 декабря 2009

Обычно Git не отслеживает переименование иначе, чем удаление и добавление. Когда это происходит в рамках одного и того же коммита , Git может быстро сделать вывод, что переименование выполнено, и соответствующим образом отобразить переименование в git log. Однако, если удаление и добавление одного и того же файла происходит в различных фиксациях , вам необходимо использовать переключатель --find-copies-harder git log:

- поиск ксерокопии-сложнее

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

0 голосов
/ 01 марта 2012

с помощью git log - следите за одним файлом. Я могу отслеживать его историю за пределами переименований, которые были зафиксированы как add + remove

...