Привязка к защищенному репозиторию SVN

Я использовал систему безопасности Windows, чтобы заблокировать для пользователей возможность удаления файлов с сервера на клиентах SVN. (щелкните правой кнопкой мыши каталог репозитория и параметры безопасности).

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

Есть ли другой способ обойти это?


person Oded    schedule 29.07.2009    source источник
comment
Я не уверен, что понимаю ваш вопрос. Вы попытались помешать людям удалять файлы в репозитории SVN, используя безопасность файловой системы (мы пока оставим в стороне вопрос, действительно ли это работает). Затем вы пытаетесь удалить файл из своего репозитория, но это не удается, потому что у вас нет разрешения. Кажется, это именно то, что вы хотели. Что я не понимаю?   -  person Greg Hewgill    schedule 29.07.2009
comment
Сначала я зашел в папку репозитория и отказал в разрешении на удаление. это означает, что если я открываю TortoiseSVN (и вижу файлы в том виде, в каком они находятся на сервере), я не могу их удалить (потому что я отказал в разрешении). Теперь я хочу обойти это. Я проверил репозиторий и локально удалил файлы. теперь, если я зафиксирую репозиторий обратно, файл на сервере должен быть удален. Я хочу, чтобы это произошло, но из-за того, что у меня нет разрешения, я получаю ошибку фиксации.   -  person Oded    schedule 29.07.2009


Ответы (2)


Зачем ты это делаешь? Прежде всего, права безопасности в репозитории (на стороне сервера) на самом деле не имеют ничего общего с правами доступа клиента.

Теперь вы должны спросить себя, действительно ли вы хотите перехватывать удаления. В svn все можно отменить в любой момент. Когда вы фиксируете удаление, svn ничего не удаляет физически, он просто записывает что-то вроде «в ревизии x этого репозитория файл y был удален». Последующие проверки / обновления, очевидно, больше не будут проверять этот файл, но удаление можно легко отменить (см. svn revert).

Если вы все еще уверены, что вам нужно запретить пользователям совершать удаление, вы должны написать сценарий ловушки перед фиксацией, в котором вы можете использовать инструмент svnlook для проверки совершаемой транзакции. Закройте сценарий ловушки с ненулевым значением, если он содержит удаления.

person jeroenh    schedule 29.07.2009
comment
Хук предварительной фиксации будет активирован, если я удаляю локально, а затем выполняю фиксацию. это нормально. я хочу предотвратить, чтобы пользователь открывал TortoiseSVN, щелкал файл (на сервере) и удалял его. что я хочу предотвратить. - person Oded; 29.07.2009
comment
есть ли способ использовать файл authz, чтобы что-то изменить? - person Oded; 29.07.2009
comment
Думаю, вы тут что-то напутали. Удаление файла через обозреватель репозитория TortoiseSVN не удаляет ничего напрямую на сервере, но выполняет удаление на стороне клиента с помощью команды svn delete. Чистый результат точно такой же, как при удалении после проверки (проверка - локальное удаление - фиксация). Просто попробуйте: вам нужно ввести сообщение фиксации, и удаление будет записано в истории вашего репозитория. - person jeroenh; 29.07.2009

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

Однако для внесения любых изменений в репозиторий требуется, чтобы сервер имел возможность удалять файлы из каталога Windows, содержащего репозиторий. Изменения сначала записываются в новый файл транзакции, затем репозиторий модифицируется в соответствии с транзакцией, затем файл транзакции удаляется. Это происходит при каждом изменении, даже если вы просто меняете комментарий в файле. Предотвращение обычных операций с файлами в каталоге репозитория приведет к повреждению репозитория.

Нет функциональной разницы между использованием tortoise svn для удаления файла и извлечением рабочей копии, удалением файла и фиксацией результата. Все необходимые разрешения и структурные изменения идентичны. Все одинаковые крючки запускаются в одном порядке и получают одинаковую информацию. Оба записывают ревизию, в которой говорится, что файл был удален, и эта ревизия может быть отменена в обоих случаях. Вы не можете разделить действия. Если вы предотвратите одно, вы предотвратите и другое.

person Jim T    schedule 30.07.2009