Как сообщить TortoiseSVN, что переименованный файл был переименован (не удален и повторно добавлен)? - PullRequest
12 голосов
/ 04 февраля 2010

Использование VisualSVN и TortoiseSVN здесь.

Я переименовал свой файл. Я заметил, что говорят добавить и удалить, что для меня означает, что история может быть стерта?

Как лучше всего переименовать файл без потери истории в Subversion?

Ответы [ 6 ]

19 голосов
/ 04 февраля 2010

История не будет удалена, но вы потеряете трассировку истории, так как казалось бы, это два несвязанных файла.

С Документы TortoiseSVN :

Если вы хотите сделать простое переименование файла или папки на месте, используйте Контекстное меню → Переименовать ... Введите новое имя для элемента, и все готово.

Восстановление файлов переименовывает

Иногда ваша дружественная IDE переименовывает файлы для вас как часть упражнения по рефакторингу, и, конечно, это не говорит Subversion. Если вы попытаетесь зафиксировать ваши изменения, Subversion увидит старое имя файла как отсутствующее, а новое как неверсионный файл. Вы можете просто проверить новое имя файла, чтобы добавить его, но тогда вы потеряете трассировку истории, поскольку Subversion не знает, какие файлы связаны.

Лучший способ - уведомить Subversion о том, что это изменение на самом деле является переименованием, и это можно сделать в диалоговых окнах «Фиксация» и «Проверка изменений». Просто выберите старое имя (отсутствует) и новое имя (неверсированное) и используйте Контекстное меню → Восстановить перемещение, чтобы связать два файла в качестве переименования .

Многие другие случаи покрыты.

Обновление

История теряется, когда Subversion не знает, что это переименование, например:

  • старое имя файла aa.txt , и оно вручную переименовывается в bb.txt
  • новое имя файла bb.txt добавлено в Subversion
  • в диалоге фиксации, aa.txt отображается как отсутствует и может быть помечено как удалено , и появляется bb.txt добавлено
  • в результате история теряется, Журнал SVN show из контекстного меню будет отображать только bb.txt

Чтобы сохранить историю файлов, вам нужно использовать опцию Rename из контекстного меню (или из командной строки). ЕСЛИ вы уже переименовали файл:

  • старое имя файла cc.txt будет отображаться как отсутствующее
  • установите флажок Показать неверсионные файлы , чтобы увидеть новое имя файла dd.txt , помеченное как не версионное
  • выберите оба имени файла и выберите Восстановить ход из контекстного меню, в результате чего cc.txt будет помечен как удалено и dd. TXT помечается как добавлено (+)
  • после коммита история будет сохранена, и в журнале вы увидите оба имени файла, если уберете отметку с опции Stop on copy / rename .

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

Обновление 2

Когда я говорю, что история потеряна, пожалуйста, поймите, что предыдущая информация все еще существует, но она не будет присутствовать в журнале текущего имени файла, и вы должны отслеживать ее вручную (что не совсем приятно делать).

10 голосов
/ 04 февраля 2010

Щелкните правой кнопкой мыши файл> TortoiseSVN> Переименовать.

5 голосов
/ 04 февраля 2010

История не стирается путем переименования из контекстного меню TortoiseSVN. Если вы хотите увидеть изменения до переименования, убедитесь, что вы не используете флаг --stop-on-copy при просмотре журнала изменений:

svn log -v -r 0:N --limit 100 [--stop-on-copy] PATH
  or
svn log -v -r M:N [--stop-on-copy] PATH

см. Здесь для справки: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-cli-main.html

3 голосов
/ 04 февраля 2010

История файла не будет удалена. Предыдущие коммиты не будут затронуты. Однако вы можете использовать svn move для правильного перемещения файла.

1 голос
/ 04 февраля 2010

Для файловых операций, таких как перемещение и переименование, я обычно предпочитаю использовать TortoiseSVN Repo Browser с последующим локальным обновлением SVN. Конечно, это уместно, только если вы хотите, чтобы ваша операция была немедленно зафиксирована в хранилище.

0 голосов
/ 04 февраля 2010

Удаление и добавление с историей - это ожидаемое событие при переименовании файла в Subversion. История не потеряна.

VisualSvn и AnkhSvn захватывают события из Visual Studio, когда файл переименовывается, и делают правильные действия.

...