Лучшие практики для проектов Subversion и Visual Studio

Недавно я начал работать над различными проектами С# в Visual Studio в рамках плана для крупномасштабной системы, которая будет использоваться для замены нашей текущей системы, построенной из бурения различных программ и скриптов, написанных на C и Perl. Проекты, над которыми я сейчас работаю, достигли критической массы за то, что они были преданы подрывной деятельности. Мне было интересно, что должно и не должно быть привязано к хранилищу проектов Visual Studio. Я знаю, что он собирается генерировать различные файлы, которые являются просто сборщиками артефактов и на самом деле не нужно их фиксировать, и мне было интересно, есть ли у кого-нибудь советы по правильному использованию SVN с Visual Studio. На данный момент я использую сервер SVN 1.6 с бета-версией Visual Studio 2010. Любые советы, мнения приветствуются.

Ответ 1

Согласно MSDN:

Вы можете добавить следующие файлы в исходный элемент управления Visual Studio:

  • Файлы решений (*.sln).
  • Файлы проекта, например, *.csproj, *.vbproj.
  • Файлы конфигурации приложения на основе XML, используемые для управления временем выполнения проекта Visual Studio.

Файлы, которые вы не можете добавить в исходное управление, включают следующее:

  • Файлы параметров пользователя решения (*.suo).
  • Файлы параметров проекта Project, например *.csproj.user, *.vbproj.user.
  • Файлы веб-информации, например *.csproj.webinfo, *.vbproj.webinfo, которые управляют местоположением виртуального корня веб-проекта.
  • Создайте выходные файлы, например, *.dll и *.exe.

Ответ 2

Я бы предложил использовать AnkhSVN - плагин для управления исходным кодом Subversion для Visual Studio 2008/2010.

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

Ответ 3

Поместите следующие файлы в управление версиями:

  • .dsw(рабочее пространство VS6)
  • .dsp(проект VS6)
  • .sln(решение VS)
  • . * proj (файлы проекта VS различных типов)
  • конечно, ваши исходные файлы и другие созданные вами артефакты.

Не добавляйте следующие файлы в управление версиями:

  • .ncb(что-то делать с просмотром или intellsense)
  • .suo(настройки рабочего пространства пользователя, такие как размещение окон и т.д.), я думаю)
  • .user(параметры пользовательского проекта, такие как точки останова и т.д.), я думаю)

Кроме того, не помещайте никаких объектных файлов, исполняемых файлов, автоматически сгенерированных файлов (например, заголовков, которые могут быть сгенерированы).

Что касается исполняемых файлов и других сгенерированных файлов - может быть исключение, если вы хотите иметь возможность архивировать выпуски. Это может быть хорошей идеей, но вы, вероятно, захотите управлять этим немного по-другому и, возможно, в другом месте, чем ваш исходный код. Если вы это сделаете, также заархивируйте файлы .pdb, чтобы позже вы могли отлаживать материал. вы можете использовать Symbol Server для хранения архивных символов (см. Инструменты отладки для Windows для сервера символов и его документации).

Вот мой список VS-специфических файлов, которые я исключаю из SVN:

Ankh.Load
*.projdata
*.pdb
*.positions
*proj.user
*proj.*.user
*.ncb
*.suo
*.plg
*.opt
*.ilk
*.pch
*.idb
*.clw
*.aps

Ответ 4

Уровень решения:

  • добавить файл решения .sln
  • игнорировать файл параметров пользователя .suo.

Уровень проекта:

  • добавить файлы .csproj, .vbproj (и С++ proj?)
  • игнорировать файлы .csproj.user, .vbproj.user
  • игнорировать каталог bin
  • игнорировать каталог obj
  • игнорировать любые файлы/каталоги, которые генерируются во время выполнения (т.е. журналы)

Если вы используете и добавляет VS, они могут генерировать файлы, которые также необходимо игнорировать (т.е. ReSharper генерирует файлы .resharper и .resharper.user).

Элементы игнорирования могут быть либо проигнорированы явно по имени файла (т.е. MyProject.csproj), либо шаблону подстановочного знака (т.е. *.csproj.user).


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

Ответ 5

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

Мой глобальный шаблон игнорирования:

.dll.pdb.exe.cache.webinfo.snk bin obj debug _Resharper.user resharper

Ответ 6

Если вы используете список игнорирования, SVN чувствителен к регистру. Поэтому не забудьте отдельно игнорировать папки bin и Bin.

Кроме того, у меня возник вопрос... почему требуется много времени, чтобы обновить значок статуса? Время от времени это становится очень запутанным.

Ответ 7

См. Mercurial.hgignore для проектов Visual Studio 2008 для списка игнорирования Mercurial. Я не знаком с синтаксисом списка игнорирования SVN, но в этом потоке есть несколько хороших списков того, что игнорировать в Visual Studio.