Хранилище на основе SQL и SVN
Моя команда разрабатывает новое приложение (С#,.Net 4), которое включает в себя репозиторий для контента общих пользователей. Нам нужно решить, где его хранить. Требования следующие:
- Обмен файлами между пользователями.
- Поддерживаемые версии.
- Включить поиск по тегам и поддерживать дополнительные запросы, такие как "все файлы, созданные людьми из группы X"
- Различные представления для разных людей (команда X видит свой контент, а никто другой не может их видеть).
Я не уверен, что лучше всего, поэтому:
- Можно ли выполнять поиск по SVN с помощью тегов (а не тегов SVN, конечно, более похожих на теги stackoverflow)?
- Есть ли смысл думать о дублировании - как SVN, так и SQL - контент?
- Любые другие предложения?
Edit
Приложение позволяет пользователям писать тесты проверки, которые они впоследствии выполняют. Эти тесты распределяются между многими группами на разных сайтах. Нам нужно управлять версиями по обычным причинам - отменять изменения, внезапные удаления и т.д. Это требует SVN.
Дело в том, что мы также хотим добавить опцию, чтобы найти все те тесты, которые помечены как "срочные" и были выполнены к настоящему времени для целей отслеживания.
Надеюсь, теперь я стал более ясным:)
Изменить II
Я столкнулся с SvnQuery, и он выглядит хорошо, но имеет ли он API, который я могу использовать? Я предпочел бы использовать их механизм с моим собственным графическим интерфейсом.
EDIT III
Мой коллега решительно поддерживает использование только базы данных и забывает хранить на основе файлов. Он утверждает, что лучше для сохранения (что необходимо - тест больше, чем список команд для выполнения). Я был бы признателен за материалы по этому вопросу, поскольку я думаю, что это можно сделать так или иначе.
Спасибо!
Ответы
Ответ 1
Вы можете использовать SVN.
- Общие файлы: очевидны и понятны. Он также поддерживает централизованную блокировку, которая может потребоваться для двоичных файлов.
- Версия. Очевидно.
- Поиск... Теперь мы попадаем в сложную территорию. Существует Lucene-аддон, который позволяет осуществлять поиск в Интернете вашего репо-opengrok, svnquery или svn-search. Это были бы ваши лучшие отправные точки для этого.
- Невозможно остановить людей, которые видят то, что присутствует в репозитории svn, но вы можете остановить их доступ к нему. Я не знаю, можно ли легко управлять доступом, чтобы обеспечить скрытые папки, вы можете спросить разработчиков svn.
Есть несколько отличных API для работы с SVN, вероятно, наиболее доступным является SharpSVN, который дает вам сборку .net, но там доступны Python и C и всевозможные типы.
Как уже упоминалось, есть веб-инструменты, которые располагаются поверх SVN, чтобы предоставить ему представление, там Trac и Redmine, а также несколько репо-зрителей, таких как webSVN, поэтому есть много примеров кода, которые можно использовать для создания собственного.
Используете ли вы DVCS как git или меркурий? Я не был. Хотя у них есть хорошие механизмы сами по себе, это не похоже на то, что они делают после. Это позволяет людям работать самостоятельно и делиться с другими на основе однорангового подхода (хотя вы можете установить "центральное" репо и работать с ним, как все. Они не работают централизованно, совместно. Например, если вы и я редактируем тестовый пример локально, а затем нажимаем на центральное репо, у нас могут возникать проблемы слияния. У нас будут проблемы слияния, если файл является двоичным или иным не слиянием. В этом случае у вас есть проблема с потерей одного человека. Это одна из основных причин отказа от использования DVCS в вашем случае.
Если вы пытаетесь объединить общие тесты, просмотрите некоторые приложения, которые уже делают это. Недавно я заметил TestRail, что похоже на то, что вы пытаетесь сделать. Это не бесплатно (увы), но это дешево.
Ответ 2
Во-первых, рассмотрите возможность использования GIT, а не SVN. Это намного быстрее, и я подозреваю, что это более уместно в вашем случае использования: оно предназначено для распространения, что означает, что ваши пользователи смогут использовать его без доступа в Интернет, и у вас не будет никаких накладных расходов, связанных с общением с сервером при сохранении документов.
Кроме этого, я не в полной мере разбираюсь в вашем вопросе, но кажется, что его суть может быть лучше перефразирована так: "Могу ли я выполнить поиск на основе тегов/ограничение доступа на мою систему контроля версий или мне нужно создать слой сверху, чтобы сделать это?"
Если да, ответ заключается в том, что вам нужен слой сверху. Некоторые из них уже существуют как на веб-основе (например, Trac), так и на основе настольных компьютеров (например, GitX). Они не обязательно будут выполнять точно то, что вам нужно, но они могут стать хорошей отправной точкой для того, чтобы делать то, что вы ищете.