Я не согласился бы с заявлением, что По необходимости интеграция в Visual Studio "ужасна". Скорее я определил бы его, поскольку "из опыта поля менее, чем оптимально" :-). Следующие разделы обсуждают мое понимание интеграции и рекомендаций для установки проекта/решения.
Если Вы не интересуетесь деталями того, как интеграция управления исходным кодом работает, можно пропустить в конец этого ответа, где я суммирую ответы на вопрос Weeble.
Отказ от ответственности: Следующие разделы просто образованы предположения на основе моего эмпирического опыта, однако я использовал технику за многие годы во многих проектах (каждый проект, имеющий несколько экспериментальных/соединять магистралью/обслуживаний/выпускать ответвлений, иногда даже несколько файлов решения, без проблем). Недостаток - то, что необходимо вручную обновить файлы проекта - но 2-минутные инвестиции амортизируются за время жизни проекта довольно приятно, по моему скромному мнению, :-).
Visual Studio использует информацию о привязке управления исходным кодом и из файла решения и из каждого файла проекта во время начальной загрузки решения. Эта информация о привязке затем хранится в name.suo файле (предполагающий, что мы используем name.sln в качестве решения) - отмечают, что suo файлы отмечены со скрытым флагом, таким образом, они не будут видимы в файловом менеджере (если Вы не переопределите опцию "Hidden files and folders").
Самый легкий способ снова переплести поставщику управления исходным кодом, если что-нибудь идет не так, как надо, состоит в том, чтобы удалить соответствующий suo файл и вновь открыть решение. После suo файл был создан, изменения в <Scc*>, элементы не имеют никакого эффекта.
Если во время начального решения, открывающегося будет несоответствие между информацией о привязке, хранившей в файле решения и информацией, хранившей в файле проекта, то Visual Studio попытается зафиксировать это (иногда, это даже запросит Ваше решение выбрать, должны ли информация в решении или информация в проекте использоваться в качестве "ведущего устройства" для разрешения несоответствия):
Почему Visual Studio нарушает DRY (не Повторяйте Себя), принцип?Понятия не имею. Я предполагаю, что это имеет исторические причины и сильно связывается к потребностям того кошмара под названием Визуальный Безопасный Источник :-).
При добавлении или новых или существующих решений/проектов По необходимости, я всегда запускаю путем создания пустого решения (см. раздел "Source-controlling a blank solution"). Я затем добавляю проекты к этому пустому решению, один за другим. Шаги отличаются немного на основе того, существует ли проект, добавляемый уже, (см. "Управляющие источником существующие (несвязанные) проекты" и "Управляющие источником существующие (связанные) проекты" разделы), или я должен создать новый (см. раздел "Source-controlling new projects").
Для добавления нового пустого решения управления исходным кодом сделайте следующее:
Откройте name.sln файл в своем любимом редакторе (блокнот, если Вы являетесь действительно отчаянными :-)), и добавьте две новых строки (SccProjectName0 и SccProvider0) - пустой файл решения должен теперь иметь раздел управления исходным кодом следующим образом:
GlobalSection(SourceCodeControl) = preSolution
SccNumberOfProjects = 1
SccLocalPath0 = .
SccProjectName0 = Tutorial
SccProvider0 = MSSCCI:Perforce\u0020SCM
EndGlobalSection
Значения должны быть выбраны следующим образом:
Можно теперь протестировать привязку:
Если бы Вы создаете совершенно новый проект и хотели бы сразу начать отследить его в По необходимости склад, выполнять эти шаги:
Вручную отредактируйте файл проекта, Вы просто создали использование редактора по Вашему выбору (продвиньтесь, блокнот СНОВА? ;-)). Добавьте следующие элементы свойства в PropertyGroup (любая группа свойства):
<PropertyGroup>
...
<SccProjectName>Tutorial</SccProjectName>
<SccLocalPath>..\..</SccLocalPath>
<SccProvider>MSSCCI:Perforce SCM</SccProvider>
...
</PropertyGroup>
Значения должны быть выбраны следующим образом:
Переключитесь назад на Visual Studio; это должно автоматически обнаружить, что файл проекта был обновлен внешне, и предложение перезагрузить его (в противном случае разгружают и перезагружают проект вручную),
Чтобы проверить, что недавно добавленный проект связывается правильно, можно выполнить эти шаги:
Можно теперь проверить состояние управления исходным кодом решения при помощи "Файла"->, "Управление исходным кодом"-> "Изменяет Управление исходным кодом...":
Одна вещь отметить об этом снимке экрана состояния состоит в том, что, когда я выбрал строку решения, все остающиеся строки были "выбраны" также (синее выделение). Это вызвано тем, что все те записи имеют ту же "Привязку Сервера" + "Локальная Привязка" и таким образом совместно используют того же поставщика управления исходным кодом (P4) соединение.
Также обратите внимание, что "Относительный путь" для обоих проектов имеет два уровня и относительно той же "Локальной Привязки" - каталог, где файл решения находится.
Если у Вас есть существующие проекты, которые еще не использовались ни в каком другом По необходимости решение, выполните эти шаги для добавления их к По необходимости (т.е. проекты импорта, которые не управлялись источником прежде (интернет-загрузки и т.д.) или использовали поставщика управления другим источником (Визуальный Безопасный Источник, и т.д.).
Шаги проверки являются точно тем же как в разделе "Source-controlling new projects".
Если у Вас есть проекты, которые были уже связаны с по необходимости использованием техники, обсужденной здесь, и Вы хотите использовать их в другом решении (новое ответвление, альтернативное решение, снова использующее проект, и т.д.) используют следующие шаги:
Я также включаю ответы на Ваши исходные вопросы:
Что происходит, когда Вы действительно "Изменяете управление исходным кодом" и связываете проекты? Как Visual Studio решает, что вставить файлы решения и проект?
Это обновляет "Scc*" элементы в файле проекта, который Вы снова переплетаете; файл решения затем обновляется также так, чтобы это было в синхронизации с привязкой файла проекта
Что происходит, когда Вы действительно "Открываетесь от управления исходным кодом"?
Позволяет Вам выбирать решение, которое требуется открыть. Впоследствии все проекты, включенные в решение, автоматически синхронизируются для заголовка. Я нахожу эту функцию не очень полезной в По необходимости мире, где необходимо создать клиент так или иначе, и возможности, Вы синхронизируете этот клиент от P4V/P4Win/P4 вместо того, чтобы полагаться на Visual Studio. Это было довольно полезно в Визуальном Источнике Безопасный мир, где не было никакого понятия представлений, и Вы определяли, где репозиторий идет на время контроля.
Какова эта папка "соединения", к которой обращаются SccLocalPath и SccProjectFilePathRelativizedFromConnection? Как делает Visual Studio/, По необходимости выбирают его?
Это - бухгалтерия Visual Studio. Это определяется на основе привязки в каждом файле проекта (я предполагаю в теории, если файл проекта теряет информацию о привязке по некоторым причинам, это могло бы быть восстановлено от информации о решении...),
Разве существует ли некоторый рекомендуемый способ заставить привязку управления исходным кодом продолжить работать, даже когда Вы создаете новое ответвление решения?
Я надеюсь, что разделы выше дают Вам некоторое представление о пути, который работает очень хорошо на меня :-).
Поддержка переименования файла или перемещения его к новому каталогу папки ужасна и болезненный при использовании интеграции плагина Visual Studio P4. Никакая встроенная функция не существует, который предупреждает P4 к переименованию файла или что это было перемещено.
проблема - то, что переименование файла требует не просто обновления связанного файла проекта VS, но и По необходимости должно быть сообщено также изменения, если Вы хотите поддержать надлежащую историю пересмотра.
В настоящее время, я не вижу способ сделать обоих в единственной операции при использовании интеграции VS. Вместо этого Вы имеете к:
, Если Вы будете использовать непрерывный процесс сборки интеграции, и Вы отправляете изменения в любой точке до последнего шага, у Вас, как гарантируют, будет поврежденная сборка.
проблема увеличивает значительно больше файлов, которые требуют переименования или перемещения. Это не гладкий процесс вообще.
Очень плохо. Я знаю это, разве ответ не к Вашим вопросам, которые Вы искали (в будущем, возможно, Вы могли сузить фокус?), но интеграция управления исходным кодом с Visual Studio просто сосет. Причина, являющаяся этим, они все должны использовать ужасный интерфейс SCC Microsoft. Это вызывает жалость! Они помещают информацию об управлении исходным кодом в файлы проекта! Почему они сделали бы это?
Просто отказываются от интеграции Visual Studio и используют По необходимости клиент. It не так много дополнительной работы. Вы не можете сэкономить 30 секунд в день, чтобы переключиться на По необходимости клиент и проверить в файлы из там?
Я могу ответить на последний.
, Чтобы заставить привязку управления исходным кодом работать, даже когда Вы создаете новое ответвление, следуйте за строгой иерархической структурой:
/Solution
/library1
/library2
/product1
/product2
/subsolution
/sublibrary1
/subproduct1
Каждый файл должен быть точно в одном .vcproj. У Вас может быть несколько .vcproj в том же каталоге, но если они совместно используют файлы, совместно используемые файлы должны войти в свой собственный .vcproj.
, Если Вы являетесь неустанными в этом, весь материал Scc будет относительным путем, таким образом, новое ответвление будет работать (потому что это только изменяет каталог самого верхнего уровня).
Сообщение Милана хорошо изучено и написано, но его объем без тени сомнения демонстрирует, что модель P4SCC не работает. Хранить информацию о привязке системы управления версиями в файлах проекта и решения просто нелепо. Столь же нелепо принуждать (через sccprojectname), чтобы проект был частью только одного решения.
Кроме того, P4SCC требует огромных затрат производительности в большом решении, поскольку он извлекает информацию из системы управления версиями для каждого файла при запуске и поддерживает это состояние в памяти на протяжении всего сеанса разработки. Он создает лишний мусор в виде файлов .vsscc и vssscc без информации для поддержки некоторых функций SCC, которые (AFAICT) Perforce не использует.
Идеальная интеграция Perforce выглядит так:
Мы полностью отошли от P4SCC и его странных требований и обременений. Вместо этого мы используем NiftyPerforce . Есть некоторые ошибки, но мы считаем, что работа над ними доставляет гораздо меньше разочарований, чем работа над дефектами конструкции в модели Perforce <-> VSSCC.