Как ограничить доступ к папкам в All Tags Subversion?

У меня есть структура каталогов в Subversion.

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

Нужно сделать что-то общее.

[Repo:/tags/**/folder]
developers = 
Administrator = rw 

Проблема в том, что не работает, разработчики продолжают с разрешения.

Есть выход или мне нужно сделать настройку для каждого сгенерированного тега?

2 ответа

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

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

Две вещи:

  • Не создавайте так много тегов. Вы всегда можете использовать номера ревизий в качестве тегов, и на многих сайтах это то, что они делают. Кто-то скажет: "Был ли у нас обзор кода на ревизии 54220?" Использование номеров ревизий в качестве тегов избавит вас от создания такого количества из них. Если вы используете систему CI, такую ​​как Jenkins, вы можете использовать номера сборки в качестве тегов, поскольку они указывают на конкретную версию Subversion.

  • Почему вы пытаетесь ограничить доступ к тегам? Есть ли вдруг какая-то сверхсекретная информация, которая была в этом теге, которая ранее не была в том месте, откуда появился этот тег? Вы не можете использовать подстановочные знаки в svnaccess файл.

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

Но разве это не значит, что мы потеряем информацию? Что если я узнаю, что мне нужен этот тег?

Subversion ничего не удаляет навсегда. Вы всегда можете вернуть старую ревизию, если вам это нужно. Допустим, вы удалили старый тег:

 $ svn delete http://repo/svn/tags/2.4

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

Сначала вы узнаете, в какой ревизии он был удален:

$ svn log -v http://repo/svn/tags

...
----------------------------------------------------------------------
r32394 | alroc | 2003-01-17 22:56:19 -0600 (Fri, 17 Jan 2003) | 1 line
   Changed Paths:
      D /tags/2.4
Deleted obsolete tag that's no longer needed
----------------------------------------------------------------------

Там! Он был удален в ревизии -r32394. Это означает, что в предыдущей версии Subversion (32393) он все еще существовал. Давайте извлечем этот тег из ревизии 32393:

$ svn checkout -r32393 http://repo/svn/tags/2.4@32393

Все сделано. У нас есть этот старый код обратно. Что если вам понадобится этот тег обратно в хранилище, скопируйте его обратно в /tags:

$ svn copy -r32393 http://repo/svn/tags/2.4@32393 http://repo/svn/tags

Сейчас, /tags/2.4 вернулся.


Если вы действительно, действительно, не любите удалять теги, то создайте где-нибудь каталог архива тегов и перенесите туда устаревшие теги. Таким образом, вы не удаляете тег, но потом не видите его, когда делаете svn ls http://repo/svn/tags,

Проблема в том, что если вы хотите сделать дамп и загрузить (например, вы разделяете проект на другое хранилище), svndumpfilter все портится, если вы не включите архивные теги.

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

Другие вопросы по тегам