Полка в TortoiseSVN?
Я перешел из TFS в SVN (TortoiseSVN) с моей текущей компанией. Я действительно пропускаю функцию "Shelve" TFS. Я читал различные статьи о том, как "Shelve" с SVN, но я ничего не читал, что дает очень простой опыт "откладывания" работы.
В идеале я хотел бы добавить дополнительные элементы в контекстное меню TortoiseSVN - "Shelve" и "Unshelve".
"Shelve" удалит текущий набор полки и загрузит рабочий каталог под подходящий путь, определяемый параметрами пользователя. "Unshelve" объединит набор с рабочей копией.
Есть ли что-то подобное? Может ли кто-нибудь предложить какие-либо способы "взломать" эту функцию в графическом интерфейсе?
Примечание. Следующая ссылка не действительно обеспечивает пользовательский интерфейс, который я искал:
Стекла Subversion
Одна из самых больших вещей о TFS Shelve заключается в том, как легко использовать...
Ответы
Ответ 1
Я не считаю, что SVN имеет эту функцию, встроенную в серверный продукт. Я также не считаю, что что-то вроде этого эмулируется на любых клиентах, которые я использовал, включая TortoiseSVN.
Чтобы обойти эту проблему, я прибегал к использованию DVCS, например git или mercurial, чтобы я мог локализовать/объединить/поместить локально, прежде чем перенаправить содержимое обратно в SVN. Это, возможно, немного клочья, но он работает очень хорошо.
Надеюсь, это поможет. Удачи!
Ответ 2
Если вы понимаете, как работают ветки SVN, эмуляция Shelve в SVN не вызывает затруднений:
- Создайте ветку в репозитории (на сервере)
- Переключите локальную копию
- Перенесите свои изменения в новую ветку
- Переключите локальную копию обратно в магистраль
Когда вы будете готовы вернуться к своим отложенным изменениям ( "unhelve" ), просто объедините ветвь полки обратно в локальную копию.
Если вы не знаете командной строки SVN или Tortoise SVN достаточно хорошо, чтобы сделать выше, вот супер подробную пошаговую инструкцию о том, как это сделать в Tortoise SVN:
- Сделайте "Обновление SVN", чтобы обновить рабочую копию до последней версии соединительной линии. Таким образом, ваши отличия между вашими локальными копиями и багажником являются вашими изменениями.
- В контекстном меню выберите "Branch/Tag"
- По умолчанию выбрана опция "HEAD версия в репозитории". Сохраните это.
- Измените значение "To Url", чтобы указать имя ветки, например.
http://server/repository/project1/branches/shelf1
- Установите флажок "Переключить рабочую копию в новую ветку/тег"
- Нажмите "ОК", чтобы создать ветку и переключиться на нее.
- Сделайте "SVN Commit..." и зафиксируйте изменения во вновь созданной ветке
- В контекстном меню выберите "Switch..."
- Измените "URL" на URL-адрес соединительной линии, например.
http://server/repository/project1/trunk
- Нажмите "ОК", чтобы вернуться к соединительной линии
См. эту ссылку для получения более подробной информации и эквивалента командной строки выше:
Полки в Subversion
Ответ 3
Другой вариант - использовать средство "Создать патч" в TortoiseSvn для создания файла исправления и возврата изменений. Затем файл патча может быть повторно использован, чтобы вернуться туда, где вы были.
Вы все равно можете столкнуться с некоторыми липкими слияниями, если вам нужно обновить версию рабочей копии.
Ответ 4
Вы можете использовать DVCS, но таким образом это kludge. "Стеллажи" в DVCS сохраняют ваши изменения только локально. Это полезно только в том случае, если вы хотите проверить свою работу на откат, если вы разложите ее с дальнейшей работой, но желательно, чтобы вы хотели сохранить свою работу на сервере.
Один из способов сделать это в SVN без явной команды shelve - это переключить вашу рабочую копию в другое местоположение svn и зафиксировать там вместо основного репо. Это эффективно, как создание временной ветки и работа над этим в течение всей вашей работы. Я не думаю, что вам даже придется объединиться, поскольку SVN сделает это для вас, когда вы переключаетесь, так как ваши локальные изменения будут сохранены.
К сожалению, вы не можете переключиться на несуществующее место, поэтому в первый раз, когда вы это сделаете, вам нужно будет создать "ветвь" для перехода на полку. Я думаю, все это может быть автоматизировано.