Сохранение прав доступа к файлам в репозитории Subversion
Как сохранить права доступа к файлам в репозитории? Несколько файлов должны быть доступны только для чтения, чтобы остановить работу сторонней программы, но после проверки из репозитория они настроены на чтение-запись.
Я посмотрел на google и нашел сообщение в блоге с 2005 года, в котором говорится, что Subversion не сохраняет разрешения файлов. Есть патчи и списки крючков (только один url все еще существует). Три года спустя Subversion все еще не сохраняет права доступа к файлам и является ли крючки единственным способом сделать это? (Я никогда не делал крючков и, скорее, использовал что-то, что является родным для Subversion.)
Ответы
Ответ 1
Одним из возможных решений было бы написать script, который вы проверите с остальной частью вашего кода и который запускается как первый шаг процесса сборки.
Этот script проходит через вашу копию базы кода и устанавливает разрешения на чтение для определенных файлов.
В идеале script будет читать список файлов из простого входного файла.
Это упростило бы поддержание и упрощение для других разработчиков понимания того, какие файлы будут отмечены как доступные только для чтения.
Ответ 2
SVN имеет возможность хранить метаданные (свойства) вместе с файлом. Свойства в основном представляют собой пары "ключ/значение", однако существуют специальные клавиши, такие как "svn: executable", если это свойство существует для файла, Subversion будет устанавливать исполняемый бит файловой системы для этого файла при проверке файла. Хотя я знаю, что это не совсем то, что вы ищете, этого может быть достаточно (было для меня).
Существуют другие свойства для окончания строки (svn: eol-style) и тип mime (svn: mime-type).
Ответ 3
В SVN нет собственного способа хранения прав доступа к файлам.
Оба asvn и патч из этого сообщение в блоге, похоже, вверх (и размещено в официальном репозитории SVN), и это хорошо, но я не думаю, что они будут иметь такую обработку метаданных в базовой версии в ближайшее время.
SVN имеет возможность обрабатывать символические ссылки и исполняемые файлы специально долгое время, но не работает должным образом на Win32. Я бы не затаил дыхание для еще одной такой не переносной функции (хотя было бы не слишком сложно реализовать поверх уже существующей системы метаданных.)
Я хотел бы написать оболочку script, чтобы вручную настроить права доступа к файлам, а затем поместить их в репозиторий.
Ответ 4
Так как это еще не было сказано в предыдущих ответах. Я ненавижу воскрешать зомбированные темы, хотя.
Поскольку добавление поддержки разрешений для SVN должно было бы учитывать несколько типов ОС и разрешений, NFS, POSIX, ARWED и RACF
Это сделает SVN раздутым, возможно, столкнется с конфликтующими типами разрешений, такими как NFS и POSIX, или откроет возможные уязвимости/уязвимости безопасности.
Существует несколько способов обхода.
pre-commit, post-commit, start-commit являются наиболее часто используемыми и являются частью системы Subversion.
Но вы сможете контролировать разрешения с помощью любого языка программирования, который вам нравится.
Система, которую я реализовал, - это то, что я называю упаковщиком, который проверяет зафиксированные файлы рабочей копии, затем анализирует файл метаданных, в котором перечислены разрешения по умолчанию, необходимые для файлов/папок, и любые изменения, которые они также желают.
Owner, Group, Folders, Files
default: <user> www-user 750 640
/path/to/file: <user> non-www 770 770
/path/to/file2: <user> <user> 700 700
Вы также можете расширить это и разрешить такие вещи, как автоматическое перемещение, переименование, пометка ревизий по типам, например альфа, бета, релиз, выпуск
Что касается поддержки клиентов для проверки файлов вашего репозитория с прикрепленными к ним разрешениями. Вам лучше изучить создание установщика вашего пакета и предложить его как ресурс.
Представьте, что люди устанавливают свои репозитории с исполняемым в нем набором с правами root: www-user 4777
Ответ 5
Это - обновленная ссылка для патча SVN, которая правильно обрабатывает разрешения файла стиля unix. Я тестировал на fedora12 и, похоже, работал, как ожидалось:
Я только что сохранил его /usr/bin/asvn и использовал asvn вместо команды svn, если мне нужно правильно обработать разрешения.
Ответ 6
Многие ответы утверждают, что svn не сохраняет права доступа к файлам. Это может быть правдой, но я смог решить DLL файл без разрешения разрешений без выполнения этих действий:
- chmod 755 badpermission.dll
- mv badpermission.dll../
- Обновление svn
- svn rm badpermission.dll
- svn commit badpermission.dll -m "Удалить dll для исправления разрешений"
- mv../badpermission.dll.
- svn add badpermission.dll
- svn commit badpermission.dll -m "Добавить dll обратно для исправления прав доступа"
- rm badpermission.dll
- Обновление svn
- badpermission.dll возвращается с разрешениями на выполнение
Ответ 7
@morechilli:
Оболочка asvn из моей предыдущей публикации и блога в сообщении OP, похоже, делает то, что вы предлагаете. Хотя он сохраняет разрешения в свойствах репозитория соответствующих файлов, а не один внешний файл.
Ответ 8
Я бы рекомендовал создать карту разрешений с помощью утилиты mtree (по умолчанию у FreeBSD есть), сохранить карту в репозитории и, как уже упоминалось выше, запустить script, который будет восстанавливать правильные разрешения файлов с карты как первый шаг процесса сборки.
Ответ 9
Блокировка не решит эту проблему. Блокировка запрещает другим редактировать файл. Это стороннее приложение, которое запускается как часть процесса сборки, который пытается записать в файл - его изменение, что нарушает процесс сборки. Поэтому нам нужно остановить программу от изменения файла, который просто маркирует файл только для чтения. Мы хотели бы, чтобы эта информация хранилась в репозитории и переносилась через проверки, ветки и т.д.
Ответ 10
Graham, svn
не сохраняет разрешения. Единственный вариант - обернуть свой вызов на svn
в script. script должен вызывать svn
своими аргументами, а затем устанавливать разрешения после этого. В зависимости от вашей среды вам может потребоваться позвонить script svn
и настроить ваш PATH
, чтобы он вызывался.
Мне очень нравится идея morechilli, чтобы список файлов и разрешений был проверен в самом репозитории.
Ответ 11
Мы создали командный файл для этого. Предпочитает фактическую поддержку в подрывной деятельности, хотя...
Ответ 12
Рассмотрите возможность использования svn lock
, чтобы запретить другим писать в файл.