Введение
Я бы не согласился с утверждением, что интеграция Perforce в Visual Studio "ужасна". Скорее, я бы определил это как «опыт из коробки ниже оптимального» :-). В следующих разделах обсуждается мое понимание интеграции и рекомендации по настройке проекта / решения.
Если вас не интересуют подробности того, как работает интеграция управления исходным кодом, вы можете перейти к концу этого ответа, где я суммирую ответы на вопрос Уибла.
Отказ от ответственности : Следующие разделы представляют собой просто образованные догадки, основанные на моем эмпирическом опыте, однако я использовал эту технику в течение многих лет во многих проектах (каждый проект имеет несколько экспериментальных / магистральных / обслуживающих / выпускных веток , иногда даже несколько файлов решений, без проблем). Недостатком является то, что вам нужно вручную обновить файлы проекта - но 2-минутные инвестиции амортизируются в течение всего срока жизни проекта, ИМХО: -).
Решение против проекта
Visual Studio использует информацию привязки управления исходным кодом как из файла решения, так и из каждого файла проекта во время начальной загрузки решения. Эта информация о привязке затем сохраняется в файле name.suo (при условии, что мы используем name.sln в качестве решения) - обратите внимание, что suo файлы помечены скрыт флаг, чтобы они не были видны в проводнике (если вы не переопределите параметр «Скрытые файлы и папки»).
Самый простой способ повторно связаться с поставщиком контроля версий, если что-то пойдет не так, - это удалить соответствующий файл suo и заново открыть решение. После создания файла suo изменения в элементах не действуют.
Если во время первоначального открытия решения есть несоответствие между информацией о привязке, хранящейся в файле решения, и информацией, хранящейся в файле проекта, Visual Studio попытается это исправить (иногда она даже запрашивает ваше решение выбрать, будет ли информация в Решение или информация в проекте должна использоваться как «мастер» для устранения несоответствия):
Почему Visual Studio нарушает принцип СУХОЙ (не повторяй себя)? Я понятия не имею. Я предполагаю, что это имеет исторические причины и тесно связано с потребностями этого кошмара, называемого Visual Source Safe: -).
Как правильно его настроить?
При добавлении новых или существующих решений / проектов в Perforce я всегда начинаю с создания пустого решения (см. Раздел «Управление исходным кодом пустого решения»). Затем я добавляю проекты в это пустое решение, один за другим. Шаги немного различаются в зависимости от того, существует ли уже добавляемый проект (см. Разделы «Управление исходными кодами существующих (несвязанных) проектов» и «Управление исходными кодами существующих (связанных) проектов»), или мне нужно создать новый (см. Раздел «Управление исходными кодами новых проектов»).
Источник-контроль пустого раствора
Чтобы добавить новое пустое решение в систему контроля версий, выполните следующие действия:
- Запустите Visual Studio, «Создать» -> «Проект ...» -> «Другие типы проектов» -> «Пустое решение»; введите название и местоположение решения, кнопка «ОК»
- «Файл» -> «Контроль источника» -> «Добавить решение в контроль источника ...»
- В диалоговом окне подключения введите соответствующий порт сервера P4, клиента и пользователя (обратите внимание, что представление выбранного клиента должно включать местоположение, выбранное вами на шаге 1)
- «Просмотр» -> «Ожидание регистрации» -> «Регистрация» -> в диалоговом окне отправки вместо нажатия кнопки «Отправить» используйте «Отмена».
Причина : действие «Регистрация» создаст новый файл «name.vssscc», а затем добавит «name.sln» и «name.vssscc» в список изменений по умолчанию для Perforce; Отменив диалог отправки, мы оставим операцию «Добавить» в ожидании и сможем редактировать файлы перед отправкой в P4
- Закрыть Visual Studio
Откройте файл name.sln в вашем любимом редакторе (блокнот, если вы действительно в отчаянии :-)) и добавьте две новые строки ( SccProjectName0 и SccProvider0 ) - пустой файл решения теперь должен иметь раздел управления исходным кодом следующим образом:
GlobalSection(SourceCodeControl) = preSolution
SccNumberOfProjects = 1
SccLocalPath0 = .
SccProjectName0 = Tutorial
SccProvider0 = MSSCCI:Perforce\u0020SCM
EndGlobalSection
Значения следует выбирать следующим образом:
- SccProjectName0 : произвольная строка, которая будет отображаться в диалоговом окне «Изменить управление исходным кодом» как «Привязка к серверу». Это имя используется для определения того, какие файлы проектов / решений могут совместно использовать одно и то же соединение контроля версий. Я рекомендую не использовать пробел для этого имени, так как экранирующие правила для пробелов различаются в файлах решений и проектов.
- SccProvider0 : жестко закодированное значение "MSSCCI: Perforce \ u0020SCM".
- Отправьте два ожидающих файла, используя клиент Perforce по вашему выбору (p4.exe, P4Win, P4V)
Теперь вы можете проверить привязки:
- Убедитесь, что Visual Studio закрыта
- Удалить ** все * файлы, кроме name.sln (особенно name.suo)
- Откройте Visual Studio и используйте его для открытия name.sln
- Должно появиться диалоговое окно соединения, используйте соответствующий порт / клиент / пользователя и нажмите OK
- В обозревателе решений теперь должен отображаться узел решения со значком наложения замка:
- Теперь вы можете проверить состояние контроля источника решения, используя «Файл» -> «Контроль источника» -> «Изменить контроль источника ...»:
Примечание. В столбце «Привязка к серверу» отображается значение, выбранное для «SccProjectName0».
Управление исходными кодами новых проектов
Если вы создаете новый проект и хотите сразу же начать отслеживать его в хранилище Perforce, выполните следующие действия:
- Открыть решение с управлением исходным кодом в Visual Studio
- «Файл» -> «Добавить» -> «Новый проект ...» - выберите тип проекта, который вы добавляете, имя и местоположение (расположение должно быть подкаталогом каталога, в котором хранится файл решения)
- «Файл» -> «Сохранить все» (это приведет к сохранению всех изменений в памяти файла решения и вновь созданного файла проекта на диск)
Вручную отредактируйте файл проекта, который вы только что создали, с помощью редактора по вашему выбору (давай, блокнот СНОВА? ;-)). Добавьте следующие элементы свойства в PropertyGroup (любая группа свойств):
<PropertyGroup>
...
<SccProjectName>Tutorial</SccProjectName>
<SccLocalPath>..\..</SccLocalPath>
<SccProvider>MSSCCI:Perforce SCM</SccProvider>
...
</PropertyGroup>
Значения следует выбирать следующим образом:
- SccProjectName - это значение, которое отображается в диалоговом окне «Изменить управление исходным кодом» как «Привязка к серверу»; должно совпадать со значением, которое вы использовали для SccProjectName0 в пустом решении; если не одно и то же, решение и этот проект не смогут использовать одно и то же соединение с поставщиком контроля версий
- SccLocalPath - относительный путь к справочному каталогу (отображается в диалоговом окне «Изменить управление исходным кодом» как «Локальная привязка»); поскольку я рекомендую использовать каталог решения в качестве справочного каталога, это фактически относительный путь от каталога, содержащего файл проекта, к каталогу, содержащему файл решения (мой пример - хранение проектов в "(solutionDir) /Source/ProjectName/projectName.csproj", таким образом, относительный путь "на два уровня вверх")
- SccProvider - жестко закодированное значение «MSSCCI: Perforce SCM»; это используется для определения, какой поставщик SCCAPI является значениями привязки Scc *, действительными для
Переключиться обратно в Visual Studio; он должен автоматически определить, что файл проекта был обновлен извне, и предложить перезагрузить его (если нет, выгрузить и перезагрузить проект вручную)
- "Просмотр" -> "Ожидающие проверки"
- «Регистрация» -> Я рекомендую щелкнуть правой кнопкой мыши файл (solutionName) .vssscc и выбрать «Вернуть, если не изменилось» (даже если Visual Studio открывает его для редактирования, оно остается без изменений); предоставить описание и отправить изменение
Чтобы убедиться, что вновь добавленный проект связан правильно, вы можете выполнить следующие действия:
- Убедитесь, что Visual Studio закрыта
- Удалить (имя решения) .suo файл, а также MSSCCPRJ.SCC (в каталоге решения)
- Откройте Visual Studio и используйте его для открытия (solutionName) .sln
- Должно появиться диалоговое окно подключения, используйте соответствующий порт / клиент / пользователя и нажмите OK
- В обозревателе решений теперь должен отображаться узел проекта со значком наложения замка:
Теперь вы можете проверить состояние контроля источника решения, используя «Файл» -> «Контроль источника» -> «Изменить контроль источника ...»:
Одна вещь, которую следует отметить в отношении этого снимка экрана состояния, это то, что когда я выбрал строку решения, все оставшиеся строки также были «выделены» (синяя подсветка). Это связано с тем, что все эти записи имеют одинаковую «привязку к серверу» + «локальную привязку» и, таким образом, совместно используют одно и то же соединение поставщика управления источником (P4).
Также обратите внимание, что «Относительный путь» для обоих проектов имеет два уровня и относится к одному и тому же «Локальному связыванию» - каталогу, в котором находится файл решения.
Управление исходными кодами существующих (несвязанных) проектов
Если у вас есть проекты, которые еще не использовались в каком-либо другом решении Perforce, выполните следующие действия, чтобы добавить их в Perforce (т. Е. Импортировать проекты, которые ранее не контролировались источниками (загрузки из Интернета и т. Д.) Или которые использовали другой поставщик управления исходным кодом (Visual Source Safe и т. д.).
- Скопируйте проект в соответствующее место
- Очистить существующие привязки контроля источника (если есть):
- Удалить существующие привязки файла проекта, то есть все свойства, начинающиеся с "Scc"
- Удалить файл (имя_проекта) .vspscc в том же каталоге, что и файл проекта (если есть)
- Открыть решение с управлением исходным кодом в Visual Studio
- «Файл» -> «Добавить» -> «Существующий проект ...» - перейдите к проекту (копия, созданная на шаге 1)
- «Файл» -> «Сохранить все» (при этом все изменения в памяти будут сохранены в файле решения)
- Выполните шаги 4-7 в разделе «Управление исходными кодами новых проектов» (т. Е. Теперь вы добавите элементы свойства «Scc *» в PropertyGroup )
Шаги проверки точно такие же, как в разделе «Управление исходными кодами новых проектов».
Управление исходными кодами существующих (связанных) проектов
Если у вас есть проекты, которые уже были связаны с Perforce с использованием описанной здесь методики, и вы хотите использовать их в другом решении (новая ветвь, альтернативное решение, повторно использующее проект и т. Д.), Выполните следующие действия:
- Интеграция проекта в нужное место
- Открыть решение с управлением исходным кодом в Visual Studio
- "Файл" -> "Добавить" -> "Существующий проект ..." - перейдите к проекту, созданному на шаге 1, путем интеграции
- «Просмотр» -> «Ожидание регистрации» -> «Регистрация» - добавить описание и отправить
Резюме
- Информация о привязке управления исходным кодом хранится как в решении, так и в проектах, должна быть синхронизирована (в противном случае Visual Studio попытается исправить любые расхождения)
- Я всегда рассматриваю файлы проектов как основной источник информации о связывании, а файлы решений - как одноразовые файлы, которые можно легко воссоздать, сначала контролируя источник пустого решения, а затем добавляя нужные проекты
- Файл решения должен всегда иметь действительные значения SccProvider0 и SccProjectName0 (необходимо добавлять вручную с новыми версиями плагинов P4SCC)
- Файлы проекта всегда должны иметь действительные значения SccProjectName (предпочтительно такие же, как SccProjectName0 ), SccLocalPath и SccProvider (также должны быть отредактировано вручную, поскольку значения по умолчанию для P4SCC не годятся)
Я также включаю ответы на ваши оригинальные вопросы:
Что происходит, когда вы делаете «Изменить управление исходным кодом» и связываете проекты? Как Visual Studio решает, что поместить в файлы проекта и решения?
Это обновляет элементы "Scc *" в файле проекта, который вы привязываете; Затем файл решения также обновляется, так что он синхронизируется с привязками файлов проекта
Что происходит, когда вы делаете «Открыть из контроля источника»?
Позволяет выбрать решение, которое вы хотите открыть. После этого все проекты, включенные в решение, автоматически синхронизируются с головой. Я считаю, что эта функция не очень полезна в мире Perforce, где вам все равно нужно создать клиент, и есть вероятность, что вы синхронизируете этот клиент с P4V / P4Win / P4, а не полагаетесь на Visual Studio. Это было довольно полезно в мире Visual Source Safe, где не было понятия представлений, и вы определяли, где хранилище отправляется во время проверки.
Что это за папка «подключения», на которую ссылаются SccLocalPath и SccProjectFilePathRelativizedFromConnection? Как Visual Studio / Perforce выбирает это?
Это бухгалтерия Visual Studio. Он определяется на основе привязок в каждом файле проекта (теоретически, если файл проекта по какой-либо причине теряет информацию привязки, его можно восстановить из информации решения ...)
Есть ли какой-нибудь рекомендуемый способ, чтобы привязки управления исходным кодом продолжали работать даже при создании новой ветви решения?
Я надеюсь, что приведенные выше разделы дадут вам представление о том, как мне хорошо работать: -).