Сочетание истории подрывной деятельности после перемещения одного файла поверх другого?

В репозитории subversion существует двоичный файл (документ MS Word) с длинной историей изменений. Недавно файл был изменен следующими проблемными операциями, потерявшими историю. Во-первых, копия была сделана и передана в репозиторий:

$ cp original.docx copy.docx
$ svn add copy.docx
$ svn commit

Затем копия была отредактирована и зафиксирована много раз. (original.docx больше не был изменен).

Наконец, исходный файл был заменен копией с использованием "svn mv":

$ svn mv original.docx oldjunk.docx
$ svn mv copy.docx original.docx
$ svn commit

Это плохо, потому что большая часть истории "original.docx" больше не найдена "svn log original.docx" - история находится в "oldjunk.docx".

Автор намерен в будущем "svn rm oldjunk.docx", который потеряет всю эту историю. Какова наилучшая последовательность операций подрывной деятельности, которая позволила бы выполнить команду:

$ svn log original.docx

показать приложенную историю (то, что теперь называется) original.docx и oldjunk.docx?

Помните, что это двоичные файлы, поэтому мы не можем произвольно объединять контент.

Спасибо.

1 ответ

  1. svn log original.docx теперь должен показать историю copy.docx и original.docx (из-за правильного переименования)
  2. Даже удален из файла репозитория, который все еще хранится в истории, и эта история может быть извлечена из репозитория (прочитайте о PEG-ревизиях): ie, если oldjunk.docx будет удален в $ REVISION (вы можете найти эту версию из svn log -v), для $N = $REVISION - 1 в svn log oldjunk.docx@K вы сможете получить историю оригинала.docx + oldjunk.docx

Вы можете (теоретически) с большим количеством трюков и черной магии переписать историю в репозитории и заменить cp original.docx copy.docx путем правильной ревизии с приятными изменениями, но:

  • Это потребует большой тщательной точной работы
  • Для этого требуется административный уровень доступа к репозиторию и серверу репозитория (промежуточный репозиторий должен быть создан в процессе)

licensed under cc by-sa 3.0 with attribution.