Вопрос

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

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

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

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

Стеллаж Subversion

Одна из замечательных особенностей TFS Shelve — это простота использования...

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

См. эту ссылку для получения более подробной информации и эквивалента командной строки, приведенного выше:
Полки в Subversion

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top