Полка в TortoiseSVN?

Я перешел с TFS на SVN (TortoiseSVN) со своей нынешней компанией. Мне очень не хватает функции «полки» в TFS. Я читал различные статьи о том, как «отложить» с помощью SVN, но я не читал ничего, что дало бы очень простой опыт «отложить» работу.

В идеале я бы хотел, чтобы в контекстное меню TortoiseSVN были добавлены дополнительные элементы - «Полка» и «Убрать из полки». «Shelve» удалит текущий набор полок и загрузит рабочий каталог по подходящему пути, определенному параметрами пользователя. "Unshelve" объединит набор с рабочей копией.

Что-то подобное существует? Кто-нибудь может предложить способы "взломать" эту функцию в графическом интерфейсе?

Примечание. Следующая ссылка на самом деле не соответствует тому пользовательскому интерфейсу, который я искал:

Стеллажи Subversion

Одна из самых замечательных особенностей TFS Shelve - это то, насколько легко ею пользоваться ...

Ответов (7)

Решение

Стеллажи в SVN начинают развертываться с версии 1.10, см. Примечания к выпуску

Другой вариант - использовать средство «Создать патч» в TortoiseSvn, чтобы создать файл патча и отменить изменения. Патч-файл можно позже применить повторно, чтобы вернуться на прежнее место.

Вы все равно можете получить несколько липких слияний, если вам нужно обновить ревизию рабочей копии.

Если вы понимаете, как работают ветки SVN, эмулировать Shelve в SVN не составит труда:

  1. Создать ветку в репозитории (на сервере)
  2. Переключите на него свою локальную копию
  3. Зафиксируйте свои изменения в новой ветке
  4. Переключите локальную копию обратно в магистраль

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

Если вы недостаточно хорошо знакомы с SVN командной строки или Tortoise SVN, чтобы сделать это, вот очень подробная пошаговая инструкция о том, как это сделать в Tortoise SVN:

  1. Выполните «Обновление SVN», чтобы обновить вашу рабочую копию до последней версии магистрали. Таким образом, единственная разница между вашей локальной копией и стволом - это ваши изменения.
  2. В контекстном меню выберите «Ветвь / тег».
  3. По умолчанию выбрана опция «ГОЛОВНАЯ версия в репозитории». Оставь это себе.
  4. Измените "To Url", чтобы указать имя ветки, например http://server/repository/project1/branches/shelf1
  5. Установите флажок «Переключить рабочую копию на новую ветку / тег».
  6. Нажмите ОК, чтобы создать ветку и переключиться на нее.
  7. Сделайте «SVN Commit ...» и зафиксируйте свои изменения во вновь созданной ветке.
  8. В контекстном меню выберите «Переключить ...»
  9. Измените "Кому URL" на магистральный URL, например http://server/repository/project1/trunk
  10. Нажмите ОК, чтобы вернуться к стволу.

См. Эту ссылку для получения дополнительных сведений и эквивалента приведенного выше для командной строки:
Полки в Subversion

TortoiseSVN 1.10 теперь поддерживает shelving : https://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-shelving.html

SVN обновила стеллажи https://subversion.apache.org/docs/release-notes/1.11.html#shelving

Виды изменений, которые вы можете отложить, - это фиксируемые изменения файлов и свойств, за исключением следующих видов, которые еще не поддерживаются:

  • копирует и перемещает
  • создание и удаление каталогов

Я не верю, что SVN имеет эту функцию, встроенную в серверный продукт. Я также не верю, что что-либо подобное эмулируется в каких-либо клиентах, которые я использовал, включая TortoiseSVN.

Чтобы обойти эту проблему, я прибег к использованию DVCS, такой как Git или Mercurial , чтобы позволить мне выполнять ветвление / объединение / полку локально перед отправкой контента обратно в SVN. Возможно, это немного запутанный процесс, но он действительно хорошо работает.

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

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

К сожалению, вы не можете переключиться в несуществующее место, поэтому в первый раз, когда вы сделаете это, вам придется создать «ветку», к которой нужно будет отложить. Думаю, все это можно автоматизировать.