репозиторий svn в общей сетевой папке Windows

Безопасно ли для нескольких компьютеров одновременный доступ к репозиторию svn, хранящемуся в общей файловой системе?

Я создаю приложение, в котором каждый клиентский компьютер Windows имеет локальный рабочий набор файлов и может периодически синхронизироваться с остальной частью команды. С точки зрения сервера, я бы не хотел полагаться ни на что, кроме общей точки монтирования Windows. Поддерживает ли протокол URL svn file: // общие файловые системы или он предполагает, что файловая система является локальной?

В документах по Subversion упоминаются проблемы с BDB и FSFS в средах Win9x, но мне это не ясно являются ли репозитории, к которым одновременный доступ осуществляется через URL-адреса file: //, безопасными в более поздних версиях Windows (или других операционных системах, если на то пошло).

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


person Patrick Linskey    schedule 17.08.2009    source источник
comment
Какую проблему вы на самом деле пытаетесь решить / какие ограничения вам нужно обойти?   -  person Jim T    schedule 18.08.2009
comment
Хороший вопрос. Я создаю настольное приложение для Windows с функциями совместной работы. Приложение должно работать в среде, в которой единственным гарантированным общедоступным средством связи является монтирование Windows (CIFS). Прямо сейчас у меня есть решение, которое работает, но я бы предпочел использовать абстракцию вроде SVN, чем заниматься обслуживанием всех проблем с блокировкой и обработкой файлов самостоятельно по ряду причин. По сути, моя модель сохранения - это список записей журнала транзакций, которые я воспроизводю при запуске приложения. Так что все, что мне нужно, это способ совместно вести упорядоченный список и неизбежные конфликты.   -  person Patrick Linskey    schedule 20.08.2009


Ответы (7)


Документы Tortoise SVN на самом деле сильно отговаривают его - см. это ссылка. .

Обобщить:

file: // доступ предназначен только для локального однопользовательского доступа, в частности для тестирования и отладки.

person Community    schedule 17.08.2009
comment
Это документы TortoiseSVN, а не сами svn. Интересно, является ли это ограничением / мнением парней TortoiseSVN или проблемой самого svn. Кроме того, я готов пойти на большие уступки в отношении ограничений окружающей среды; если я смогу найти узкий набор требований, которые работают, я с радостью ограничусь им (при условии, что одно из требований не запускает серверный процесс). - person Patrick Linskey; 17.08.2009
comment
Я почему-то подозреваю, что разработчики Tortoise знают о Subveersion немного больше, чем вы или я. Tortoise построен на коде Subversion, так что я предполагаю, что это базовое ограничение Subversion. - person ; 17.08.2009
comment
Они, конечно, знают больше, чем я, но я не удивлюсь, если их рекомендации будут довольно универсальными. Я готов пойти на многие уступки, чтобы не писать собственный распределенный код для совместного использования файлов, поэтому меня больше интересует, что можно делать безопасно, а не то, что рекомендуется. - person Patrick Linskey; 17.08.2009
comment
Что ж, я думаю, вы делаете большую ошибку. Использование однопользовательского программного обеспечения в общих папках Windows несколькими пользователями всегда было сопряжено с проблемами. Но это твои похороны. - person ; 17.08.2009
comment
Понял. Однако мне не ясно, является ли svn + file: // однопользовательской программой. Некоторые распределенные файловые системы поддерживают блокировку, и с ее помощью, безусловно, можно построить правильное решение. Я не уверен, что svn - одно из таких решений. - person Patrick Linskey; 17.08.2009
comment
По личному опыту, я бы НЕ стал этого делать! Просто настройте сервер. Это несложно и избавит вас от многих головных болей. - person Judge Maygarden; 17.08.2009
comment
Судья: какие переживания вы имеете в виду? В моей среде я не могу развернуть сервер, так что это не вариант. - person Patrick Linskey; 18.08.2009
comment
@Patrick: Затем настройте какой-нибудь сервер на виртуальной машине и запустите его на какой-нибудь машине. - person sbi; 18.08.2009
comment
Я думаю, фраза «настроить сервер» заставляет людей с криком убегать. Все, о чем мы здесь говорим, - это запуск svnserve или модуля apache где-нибудь в какой-то системе. Вы можете поместить его на свой рабочий стол, если хотите (не рекомендуется; поместите его на файловый сервер, который вы собирались использовать для file: //). SVN требует очень мало системных ресурсов, ему не нужна выделенная система. - person rmeador; 18.08.2009
comment
@meadow: Вы, наверное, правы насчет термина "сервер". Позвольте мне добавить, что для этого даже не требуется Apache. Протокол svn: хорош и без него. (Преимущество виртуальной машины в том, что ее легко перемещать. Это удобно, когда у вас недостаточно аппаратных ресурсов для запуска выделенной машины или когда вам не разрешено изменять существующую.) - person sbi; 19.08.2009
comment
@rmeador: Полностью согласен. Однако, как вы сказали, настройка сервера вызывает тревогу, поэтому продукт, который я разрабатываю, предназначен для работы в бессерверной среде, в которой единственным пространством для совместной работы является общий диск. - person Patrick Linskey; 20.08.2009
comment
@sbi: для ясности, я рассматриваю возможность использования svn / in / the product, а не / для создания / продукта. Мы уже успешно используем git (на unwuddle.com, что здорово) для SCM. У нашего продукта есть особые потребности в совместной работе, и наш процесс продаж требует для наших клиентов варианта без сервера, в котором нет отдельного серверного процесса, необходимого для включения этих функций. Однако мы можем полагаться на существующее монтирование CIFS (которое мы не контролируем, и наши клиенты не хотят утверждать контроль). Мы рассматриваем svn, поскольку это прекрасная абстракция, которая прекрасно развивается до полнофункциональных развертываний на сервере. - person Patrick Linskey; 21.08.2009
comment
@Patrick: Я не понимал, что SVN предназначен для использования в продукте. Прости. - person sbi; 21.08.2009

Другой вопрос похож, но был задан re: performance: Производительность протокола Subversion

Книга SVN рекомендует не использовать протокол file: // для нескольких пользователей.

Выбор конфигурации сервера:

Не соблазняйтесь простой идеей о том, что все ваши пользователи получают доступ к репозиторию напрямую через URL-адреса file: //. Даже если репозиторий доступен всем через общий сетевой ресурс, это плохая идея. Он удаляет все уровни защиты между пользователями и репозиторием: пользователи могут случайно (или намеренно) повредить базу данных репозитория, становится трудно отключить репозиторий для проверки или обновления, и это может привести к беспорядку проблем с правами доступа к файлам ( см. раздел «Поддержка нескольких методов доступа к репозиторию»). Обратите внимание, что это также одна из причин, по которой мы предостерегаем от доступа к репозиториям через URL-адреса svn + ssh: // - с точки зрения безопасности это фактически то же самое, что и доступ локальных пользователей через file: //, и может повлечь за собой все те же проблемы. если администратор неосторожен

person crashmstr    schedule 17.08.2009
comment
Интересно ... спасибо за ссылку! Интересно, какие проблемы с повреждением репозитория их беспокоят. - person Patrick Linskey; 17.08.2009
comment
IIRC, SVN использует файлы для блокировки, а не фактические блокировки на уровне файловой системы (поскольку они не поддерживаются единообразно для разных файловых систем и операционных систем). Состояние гонки может существовать в общем сетевом ресурсе, потому что операции файловой системы, которые считаются атомарными (т. Е. Перемещение), не гарантируют, что они будут атомарными при доступе по сети. Это было подробно объяснено мне в какой-то момент разработчиками SVN, но я, возможно, забыл некоторые детали, но я думаю, что это суть. - person rmeador; 18.08.2009

С технической точки зрения вполне возможно использовать протокол file: // с несколькими пользователями:

Повреждение НЕ произойдет при стандартном использовании svn, поскольку Subversion использует свои собственные механизмы блокировки в FSFS. В противном случае в книге SVN будет четко указано, чтобы избежать такой настройки, поскольку эта проблема упоминается в бэкэнде BDB.

Однако реальная проблема заключается в том, как ограничить доступ к базе данных репозитория, чтобы не получать доступ к данным репозитория с помощью любого другого произвольного инструмента?

Если вы используете file: //, каждый может открыть каждый файл в вашем репозитории SVN и изменить его содержимое, что обязательно приведет к повреждению репозитория.

Черт возьми, каждый пользователь может удалить весь репозиторий!

Вы не можете ограничить доступ к инструментам svn и поэтому не должны использовать протокол file: //.

person Peter Parker    schedule 17.08.2009
comment
УМ, я думаю, есть разница между FSFS и протоколом file:, разве нет? - person sbi; 18.08.2009
comment
Есть ли у вас какая-либо поддержка того, почему коррупция не происходит, или это основано на (вероятно, законном) предположении, что ребята из SVN смогут избежать повреждения файлов в любой среде? - person Patrick Linskey; 18.08.2009
comment
Как заявил Лугс: состояние гонки может существовать на общем сетевом ресурсе, потому что операции файловой системы, которые считаются атомарными (т. Е. Перемещение), не гарантируют, что они будут атомарными при доступе по сети. Однако у меня нет никаких понимание этого вопроса. - person Peter Parker; 18.08.2009

Я думаю, вы создаете проблемы с этим подходом. Windows CIFS (протокол обмена файлами Windows) имеет много известных проблем с блокировкой и одновременной модификацией, поэтому он будет либо медленным, либо небезопасным, либо и тем, и другим.

Гораздо, намного лучшим решением является установка реального сервера SVN вместо использования URL-адресов file: //.

person Daniel Pryden    schedule 17.08.2009
comment
Как оказалось, я вполне доволен собачьей медлительностью. Даже кошка медленная была бы в порядке. Только не небезопасно. Я понимаю, что установка сервера - лучший подход, но, к сожалению, это не вариант для этого продукта. - person Patrick Linskey; 17.08.2009

Вне всяких сомнений (и я не смог найти никакой информации в Интернете), я бы подумал, что если вы используете клиент SVN, который поддерживает протокол file: // (TortoiseSVN, например), он должен работать правильно.

Однако, к сожалению, я не могу найти документ, я помню, что были определенные проблемы с протоколом file: // и SVN. Если возможно, я бы посоветовал настроить сервер SVN (VisualSVN работает очень хорошо и легко настраивается). чем полагаться на общий ресурс Windows.

Изменить: я нашел это обсуждение на Stackoverflow. Кажется, что с использованием файлового протокола проблем нет.

Редактировать 2: Ссылка Нила - это то, что я читал некоторое время назад, и она не одобряет файловый протокол. Однако, если использование протокола file: // означает разницу между использованием и неиспользованием системы управления версиями, я бы рекомендовал по крайней мере использовать это. Некоторый контроль версий лучше, чем ничего.

person JasCav    schedule 17.08.2009
comment
Я согласен с использованием VisualSVN вместо общего ресурса. - person Nick; 17.08.2009
comment
Я категорически не согласен с вашим вторым редактированием - ненадежный исходный код хуже, чем его отсутствие. - person ; 17.08.2009

Правильно, брат ...

Я был здесь. Я тоже использовал файловую систему, чтобы разделить "svn server" между парой машин ... Единственное, что у меня получилось, это поврежденные файлы и большие головные боли ...

Установил svn-сервер (CollabNetSubversion Server), и теперь все работает гладко ... За исключением тех случаев, когда я сам его накручиваю ... но это уже другая история ....

Ваше здоровье.

Альдо

person aldux    schedule 17.08.2009
comment
С какими видами коррупции вы столкнулись? Вы использовали BDB или FSFS? Какую файловую систему вы использовали? - person Patrick Linskey; 17.08.2009

В Windows мы использовали Apache для обслуживания наших файлов. Здесь Мы очень довольны такой настройкой.

person JBrooks    schedule 17.08.2009
comment
Или вы можете использовать инструмент, который сделает это за вас: сервер VisualSVN. - person reinierpost; 07.10.2009