Подтвердить что ты не робот

Сохранение прав доступа к файлам в репозитории Subversion

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

Я посмотрел на google и нашел сообщение в блоге с 2005 года, в котором говорится, что Subversion не сохраняет разрешения файлов. Есть патчи и списки крючков (только один url все еще существует). Три года спустя Subversion все еще не сохраняет права доступа к файлам и является ли крючки единственным способом сделать это? (Я никогда не делал крючков и, скорее, использовал что-то, что является родным для Subversion.)

4b9b3361

Ответ 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, чтобы запретить другим писать в файл.