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

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

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

старый добрый вопрос. Однако ответ остается неизменным до сегодняшнего дня. Невозможно изменить chmod на файл SVN, кроме + x. Брожу, если в git можно

confiq 28.11.2010 19:14

@confiq Очень возможно в git. Фактически, вы можете зафиксировать изменение, которое изменяет только разрешения. Однако я не знаю, что произойдет, если вы отправите этот коммит в svn :)

lmat - Reinstate Monica 25.09.2013 18:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
40
2
35 983
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Рассмотрите возможность использования svn lock, чтобы запретить другим запись в файл.

Блокировка не решит эту проблему. Блокировка запрещает другим редактировать файл. Это стороннее приложение, которое запускается как часть процесса сборки, которое пытается записать в файл - изменить его - что прерывает процесс сборки. Поэтому нам нужно запретить программе изменять файл, который просто помечает файл как доступный только для чтения. Мы хотели бы, чтобы эта информация хранилась в репозитории и передавалась через чекины, ветки и т. д.

Ответ принят как подходящий

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

Этот скрипт просматривает вашу копию кодовой базы и устанавливает разрешения на чтение для определенных файлов.

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

Сюрприз: Subversion, похоже, действительно имеет разрешения изменять при фиксации :(

Luke-Jr 17.03.2014 23:53

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

Мне очень нравится идея Morechilli о том, чтобы список файлов и разрешений регистрировался в самом репозитории.

Для этого мы создали командный файл. Хотя предпочел бы реальную поддержку в подрывной деятельности ...

Нет собственного способа хранить права доступа к файлам в SVN.

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

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

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

Официальная версия asvn (на данный момент), похоже, не работает с большим количеством игнорируемых файлов в рабочем каталоге (у нее очень шумный вывод), вот патч, исправляющий это mail-archives.apache.org/mod_mbox/subversion-dev/201005.mbox‌ /…; по какой-то причине он все еще не попал в основное репо.

Nickolay 15.05.2011 20:27

Приведенная выше ссылка asvn была изменена на: asvn И, следуя приведенным выше рекомендациям, я нашел несколько альтернатив, которые могут работать лучше: http://fsvs.tigris.org/ и, возможно,: https://trac.dass-it.de/pub/wiki/dasscm

Damian Green 10.04.2014 05:38

SVN действительно имеет возможность хранить метаданные (характеристики) вместе с файлом. Свойства в основном представляют собой пары ключ / значение, однако есть некоторые специальные ключи, такие как 'svn: executable', если это свойство существует для файла, Subversion установит исполняемый бит файловой системы для этого файла при извлечении файла. Хотя я знаю, что это не совсем то, что вы ищете, этого может быть достаточно (для меня).

Есть и другие свойства для окончания строки (svn: eol-style) и mime-типа (svn: mime-type).

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

MarkHu 06.07.2012 02:33

@morechilli:

Обертка asvn из моего предыдущего сообщения и блог в сообщении OP, похоже, делает то, что вы предлагаете. Хотя он хранит разрешения в свойствах репозитория соответствующих файлов, а не в одном внешнем файле.

Этот - это обновленная ссылка на патч SVN, который правильно обрабатывает права доступа к файлам в стиле unix. Я тестировал Fedora12 и, похоже, работает так, как ожидалось:

Я просто сохранил его / usr / bin / asvn и использую asvn вместо команды svn, если мне нужно правильно обрабатывать разрешения.

Кажется, работает и на ubuntu 12.04. Но обратите внимание, что когда вы обновляете свою песочницу, если в репозитории есть какие-либо файлы с разрешениями или информацией о группе, на которую у вас нет прав (возможно, потому, что вы создали или обновили их с помощью sudo), тогда процедура, которая устанавливает эти разрешения может не воспроизвести исходную рабочую область, которая была последней зафиксирована, если вы не запустите: судо asvn update.

Damian Green 10.04.2014 04:22

Я бы рекомендовал сгенерировать карту разрешений с помощью утилиты mtree (она есть во FreeBSD по умолчанию), сохранить карту в репозитории и, как упоминалось выше, запустить скрипт, который восстановит правильные права доступа к файлам с карты в качестве первого шага процесс сборки.

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

  1. chmod 755 badpermission.dll
  2. mv badpermission.dll ../
  3. svn update
  4. svn rm badpermission.dll
  5. svn commit badpermission.dll -m "Удалить dll для исправления разрешений"
  6. mv ../badpermission.dll.
  7. svn добавить badpermission.dll
  8. svn commit badpermission.dll -m "Добавить dll обратно, чтобы исправить разрешения"
  9. rm badpermission.dll
  10. svn update
  11. badpermission.dll возвращается с разрешениями на выполнение

Хотя вышеперечисленное почти работает, это, безусловно, менее эффективно, чем простой запуск svn propset svn:executable ON your-pesky-file.ext, который существует уже много лет (это был первый результат поиска google.com/search?q=svn+chmod.) Я говорю почти, потому что удаление разрешений на групповую запись в открывающем chmod 755 не делает не "прилипать". Вы можете подумать, что это происходит в вашей локальной песочнице, но попробуйте проверить файл заново, и вы увидите, что SVN установил g + w.

MarkHu 06.07.2012 02:16

Поскольку это еще не было полностью сказано в предыдущих ответах. Я ненавижу воскрешать зомбированные темы.

Поскольку добавление поддержки разрешений для 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

Другие вопросы по теме