ASP.NET — Интерфейс веб-загрузки SVN?

#svn #asp.net-mvc-3 #file-upload

#svn #asp.net-mvc-3 #загрузка файла

Вопрос:

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

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

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

Примечание: Я не ищу плагин Visual Studio; он должен быть полностью веб-интерфейсом, поскольку мы используем svn для совместного использования документов, и я предпочитаю не требовать от каждого пользователя установки Tortoise или svn-клиента командной строки.

Ответ №1:

Возможно, лучше всего создать конфигурацию WebDAV для Subversion, которая поддерживает автоматическую фиксацию документов, хранящихся на соответствующих дисках. В Windows это означает наличие дополнительного диска, который является хранилищем WebDAV, а во внутренней части — каталог Subversion. Каждый раз, когда кто-то сохраняет что-то на этом диске, это автоматически выполняет фиксацию. Но ты не устанавливаешь TortoiseSVN на компьютеры…на мой взгляд, это лучшее решение.

Ответ №2:

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

SVN работает с подразделами файловых систем (деревьями каталогов), а не с файлами. HTTP-загрузка воздействует на файлы, а не на деревья каталогов.

Если бы веб-интерфейс SVN существовал, он был бы ограничен подмножеством функций SVN. К сожалению, это подмножество настолько мало, что отнимает у SVN большую часть его мощности. Как вы собираетесь фиксировать изменения разрешений? Как вы собираетесь связать изменение в этом файле с набором изменений, необходимых для интеграции этого файла в проект? Я уверен, что решение можно было бы найти, затратив достаточно времени на веб-разработку; однако лучшие решения, чем те, которые можно было бы создать, уже существуют. Используйте их.

TortiseSVN привяжет иерархию папок Windows к проекту SVN. WebDAV будет привязывать клиент WebDAV к проекту SVN. Инструменты командной строки svn (клиент) привяжут дерево каталогов к проекту SVN. Плагины существуют почти для каждой крупной IDE.

Выберите решение, которое наилучшим образом соответствует вашей рабочей среде; поскольку все они интегрируются с SVN, как и предполагалось для использования. HTTP был разработан задолго до SVN, и его способность передавать информацию на веб-сервер ограничена. Попытка «отправить» diff дерева каталогов и все его содержимое — это один элемент, в котором HTTP просто не хватает достаточной среды для выполнения работы без множества обходных путей (что означает нестабильность и странность, поскольку он не действует как HTTP).

Ответ №3:

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