Как ограничить доступ к папкам в 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
все портится, если вы не включите архивные теги.
Лучше всего не создавать проблему в первую очередь. Создавайте теги только для релизов, а затем удаляйте теги, если вы все еще чувствуете, что их слишком много.