Сплит файлы, сохраняя историю в SVN - PullRequest
16 голосов
/ 15 февраля 2011

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

Например, пусть A будет исходным файлом, а B1 и B2 новыми файлами.

Можно ли сказать SVN, что B1 и B2 должны оба «наследовать» полную историю файлаA, поэтому, когда я просматриваю оба журнала истории B1 и B2, я вижу, что они были получены из A, и журналы выглядят так:

A                B1                  B2
- change A3      - change B1.2       - change B2.2
- change A2      - change B1.1       - change B2.2
- change A1      - change A3         - change A3
                 - change A2         - change A2
                 - change A1         - change A1

Я знаю, как сохранитьистория, когда я переименовываю файл (как обсуждено здесь на SO ), но AFAIK, это только способ сохранить историю A, связанную либо с B1, либо с B2, но не с обоими.

В настоящее времяЯ использую Tortoise SVN 1.6.12 на Windows.

1 Ответ

24 голосов
/ 15 февраля 2011

Просто сделайте 2 SVN-копии файла A, а затем SVN удалите файл A.

Я только что сделал быстрый тест с новым репо, и, похоже, он отлично работает.

  1. Я создал файл A.txt с двумя классами B1 и B2 внутри и зафиксировал файл a.txt
  2. Я сделал SVN-копию A.txt в B1.txt и удалил объявление класса B2 из B1.txt
  3. Я сделал еще одну SVN-копию A.txt в B2.txt и удалил объявление класса B1 из B2.txt
  4. Я SVN удалил A.txt
  5. Закомментировал всеи история выглядит хорошо.
...