Как мне переместить теги в Subversion - PullRequest
2 голосов
/ 15 сентября 2008

Хотелось бы, чтобы у Subversion был лучший способ перемещения тегов. Единственный известный мне способ перемещения тега - удалить файл из тега, а затем скопировать его снова. Браузеры дерева ревизий, кажется, не очень хорошо справляются с этим. Это также требует синхронизации структуры каталогов под стволом и тегом.

Вариант использования: у нас есть тысячи «карт», и мы хотим отметить, какая версия каждой карты является «производственной» версией. Нам нужно легко получить производственную версию всех карт.

Может кто-нибудь предложить лучший способ решения нашего варианта использования? Я также рассмотрел свойства, но тогда мы не сможем легко получить версию всех файлов. Слияние с тегом тоже не кажется легким. (Первоначально отправлено на http://jamesjava.blogspot.com/2007/12/subversion-moving-tags.html)

Ответы [ 7 ]

3 голосов
/ 15 сентября 2008

Я не думаю, что вы когда-либо сможете сделать это так, как работает Subversion. Я считаю, что лучшим решением было бы взглянуть на такой инструмент, как git , который, похоже, подходит для вашего случая использования. Ваша производственная система может «тянуть» в «карты», которые принимаются. Хотя я понимаю, что это не подрывная деятельность, использование git может лучше соответствовать вашему шаблону использования, чем svn.

Действительно хорошая статья о том, почему модель разработки на основе git по принципу pull лучше соответствует вашему сценарию, здесь .

Существуют также учебные пособия о том, как начать миграцию, например this .

2 голосов
/ 15 сентября 2008

Я не вижу необходимости «удалять» файл из производственного тега. Вы должны скопировать новый файл поверх существующего и зарегистрировать его. Таким образом, вы сохраните историю.

Конечно, для этого вам понадобится проверить производственный тег.

1 голос
/ 19 марта 2009

Я думаю, что вы пытаетесь решить не ту проблему.

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

Предполагая, что это так, создайте ветку под названием «Release». (Попробуйте создать новый пустой каталог и скопировать каждую необходимую версию карты (с отдельными командами svn cp), если это будет быстрее).

Теперь у вас есть текущая версия в ветке. Пометьте его (svn cp весь каталог) «Выпуском XXX», где XXX - значимый идентификатор вашего последнего выпуска.

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

Во время следующего выпуска вы можете пометить снова.

Теперь вы знаете, что такое последние утвержденные карты и что было в каждом выпуске. Если вы действительно не можете вспомнить номер последнего выпуска, и вы можете найти время, которое вам нужно знать, не просто заглядывая в каталог тегов, вы можете создать тег, который svn cp последний отпустите, затем сдуйте и скопируйте заново, когда будете делать следующий выпуск.

1 голос
/ 15 сентября 2008

Это не очень хорошее применение для подрывной деятельности.

Теги Subversion предназначены для присвоения имени экземпляру дерева, как на определенном снимке в его истории, и должны оставаться статическими.

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

Сегодняшнюю версию можно найти на

/svn/tags/production/2008/09/15/mapproject
0 голосов
/ 15 сентября 2008

Если я хорошо понимаю ваши потребности, я думаю, что лучший способ сделать это - это иметь все карты как внешние элементы основного ствола, а затем создать сценарий, который рекурсивно помечает каждую карту (внешнюю) для ее текущей версии в рабочая копия (или сервер, если вы этого хотите).

0 голосов
/ 15 сентября 2008

Один из способов - перейти к модели «стабильного ствола».

  • Сделайте ветку из ствола, чтобы использовать в качестве рабочей области.
  • Прекратите делать коммиты напрямую на транк - пусть все переключатся на ветку разработки.
  • Проверьте транки людьми, управляющими стабильными выпусками, убедитесь, что они имеют права коммитов.
  • Если вы хотите «освободить» карту, используйте «reintegrate merge», чтобы внести изменения в этот файл / каталог и зафиксировать изменения.

Это может показаться немного перевернутым, но вполне выполнимо. Вы можете сделать так, чтобы производственные машины извлекались прямо из ствола, или создавали новый тег из ствола для каждого выпуска. Для последнего вам понадобится какой-то способ сообщить новый тег производственным машинам. Может работать какой-то тип обмена сообщениями, общая конфигурация или соглашение об именах.

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

0 голосов
/ 15 сентября 2008

Почему бы вам не сделать новый тег для текущей рабочей версии? Помните, Subversion не является CVS. Так что создание копии полного дерева каталогов ничего вам не стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...