Subversion создает каталоги ревизий со слишком строгими разрешениями

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

Can't move '/svn/db/txn-protorevs/21000-ga9.rev' to '/svn/db/revs/21/21001':
Permission Denied

Глядя на каталог revs, я заметил, что кто-то зафиксировал 21000-ю ревизию, и по какой-то причине отсутствует групповое разрешение на запись для нового каталога.

    drwxrwsr-x  2 svn    svn  24K 2008-10-27 10:04 19
    drwxrwsr-x  2 svn    svn  24K 2008-12-18 07:13 20
    drwxr-sr-x  2 jeff   svn 4.0K 2008-12-18 11:18 21

Установка группового разрешения на запись в этот каталог позволяет мне зафиксировать, так что я готов еще на 1000 ревизий. Но почему это происходит и что я могу изменить, чтобы это не повторилось?


person Apocalisp    schedule 18.12.2008    source источник


Ответы (3)


Если у вас есть более одного разработчика, получающего доступ к репозиторию через протокол file://, вы можете рассмотреть возможность настройки сервера Subversion (используя svnserve или Apache). При таком решении сервер сам отвечает за все права доступа и разрешения для файлов репозитория, и вы не столкнетесь с этой проблемой.

Из книги SVN:

person Greg Hewgill    schedule 18.12.2008

Лучший способ решить эту проблему — получить доступ к репозиторию через сервер.

Если вы не возражаете против незашифрованной связи (что, кажется, имеет место, поскольку вы используете file://), svnserve очень легко настроить:

svnserve -d -r /svn

См. эту ссылку, чтобы получить помощь в настройке и настройка аутентификации.

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

Чтобы подключиться к аутентификации вашей ОС, вам нужно настроить сервер Apache SVN, что немного сложнее, см. эти общие инструкции. Вы можете найти конкретные инструкции для вашей ОС, погуглив.

Наконец, если вам нужен самый быстрый путь к предотвращению сброса прав группы на запись при использовании file://, просто попросите всех установить правильный umask (002) при запуске оболочки или используйте svn через скрипт-оболочку, который устанавливает его:

#!/bin/bash
# svnwrapper.sh
umask 002
/usr/bin/env svn $*

Убедитесь, что этот umask не является проблемой безопасности в вашей среде.

person orip    schedule 18.12.2008

Наиболее вероятная причина, как сказал Грег. Кто-то обращается к репозиторию по протоколу file:// и имеет чрезмерно ограничительный umask.

person Zoredache    schedule 18.12.2008
comment
Нет, у всех одинаковый umask, и они используют протокол ssh. - person Apocalisp; 19.12.2008