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

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


person Alex Marshall    schedule 14.11.2009    source источник
comment
Это VS2010 C #. Например, есть некоторые различия между этим и VS2010 C ++. Дайте ему тег C #.   -  person Bitterblue    schedule 10.04.2014


Ответы (7)


Согласно MSDN:

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

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

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

  • Файлы пользовательских опций решения (*.suo).
  • Файлы опций пользователя проекта, например файлы *.csproj.user, *.vbproj.user.
  • Файлы веб-информации, например *.csproj.webinfo, *.vbproj.webinfo, которые управляют виртуальным корневым расположением веб-проекта.
  • Создавайте файлы вывода, например файлы *.dll и *.exe.
person Justin R.    schedule 14.11.2009
comment
Это хороший список. По сути, вам нужен минимальный набор файлов, необходимых для компиляции проектов. - person Soo Wei Tan; 14.11.2009
comment
Существует случай для фиксации .user, по крайней мере, в некоторых случаях. Те файлы, которые вы не добавляете, должны быть добавлены в svn:ignore. - person PJTraill; 27.05.2015
comment
Те, кто использует Visual Studio 2015, также захотят исключить папку .vs из системы управления версиями. См. stackoverflow.com/q/31526899/2615878. - person Theophilus; 20.04.2016

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

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

person GraemeF    schedule 14.11.2009
comment
Я попробовал AnkhSVN и обнаружил, что он склонен преждевременно интерпретировать действия в среде IDE как действия в системе управления версиями и побуждать разработчиков совершать однофайловые коммиты. Мне гораздо больше нравится Черепаха. - person PJTraill; 27.05.2015
comment
Но полезно то, что он знает, что игнорировать! - person PJTraill; 27.05.2015

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

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

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

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

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

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

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

Ankh.Load
*.projdata
*.pdb
*.positions
*proj.user
*proj.*.user
*.ncb
*.suo
*.plg
*.opt
*.ilk
*.pch
*.idb
*.clw
*.aps
person Michael Burr    schedule 14.11.2009
comment
Придирчивость: вы говорите «не вставляйте ... исполняемые файлы», но в следующем абзаце вы говорите, что можно! - person PJTraill; 27.05.2015

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

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

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

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

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

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


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

person adrianbanks    schedule 14.11.2009

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

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

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

person Andre Gallo    schedule 14.11.2009

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

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

person Manoj    schedule 27.05.2010

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

person CAD bloke    schedule 15.06.2010