Введение
Я бы не согласился с утверждением, что интеграция Perforce в Visual Studio «ужасна». Скорее, я бы определил это как «нестандартный опыт менее чем оптимален» :-). В следующих разделах обсуждается мое понимание интеграции и рекомендации по настройке проекта / решения.
Если вас не интересуют подробности того, как работает интеграция с системой управления версиями, вы можете перейти к концу этого ответа, где я резюмирую ответы на вопрос Weeble.
Заявление об ограничении ответственности: следующие разделы представляют собой просто предположения, основанные на моем эмпирическом опыте, однако я использовал эту технику на протяжении многих лет во многих проектах (каждый проект имеет несколько экспериментальных / основных / обслуживающих / выпускающих ветвей, иногда даже несколько файлов решений без проблем). Недостатком является то, что вам нужно вручную обновлять файлы проекта, но 2-х минутные вложения окупаются в течение всего жизненного цикла проекта, ИМХО :-).
Решение против проекта
Visual Studio использует информацию привязки системы управления версиями как из файла решения, так и из каждого файла проекта во время начальной загрузки решения. Эта информация о привязке затем сохраняется в файле name.suo (при условии, что мы используем name.sln в качестве решения). Обратите внимание, что файлы suo отмечены флажком скрытые, поэтому они не будут видны в проводнике (если вы не переопределите параметр «Скрытые файлы и папки»).
Самый простой способ повторно привязать к поставщику системы контроля версий, если что-то пойдет не так, - это удалить соответствующий файл suo и повторно открыть решение. После создания файла suo изменения в элементах ‹Scc *› не действуют.
Если во время первоначального открытия решения есть несоответствие между информацией привязки, хранящейся в файле решения, и информацией, хранящейся в файле проекта, Visual Studio попытается исправить это (иногда даже будет предложено выбрать, будет ли информация в решении или информацию в проекте следует использовать как «мастер» для устранения несоответствия):
![alt text](https://i.stack.imgur.com/AUf7n.png)
Почему Visual Studio нарушает принцип DRY (Don't Repeat Yourself)? Я понятия не имею. Я предполагаю, что это имеет исторические причины и тесно связано с потребностями того кошмара, который называется Visual Source Safe :-).
Как настроить "правильно"?
Добавляя в Perforce новые или существующие решения / проекты, я всегда начинаю с создания пустого решения (см. Раздел «Управление исходным кодом пустого решения»). Затем я добавляю проекты к этому пустому решению один за другим. Шаги немного различаются в зависимости от того, существует ли уже добавляемый проект (см. Разделы «Управление исходным кодом существующих (несвязанных) проектов» и «Управление исходным кодом существующих (связанных) проектов») или мне нужно создать новый (см. Раздел «Источниковый контроль новых проектов»).
Источник-контроль пустого решения
Чтобы добавить новое пустое решение в систему управления версиями, сделайте следующее:
- Запустите Visual Studio, «Создать» -> «Проект ...» -> «Другие типы проектов» -> «Пустое решение»; введите название и местоположение решения, нажмите кнопку «ОК»
- «Файл» -> «Система управления версиями» -> «Добавить решение в систему управления версиями ...»
- В диалоговом окне подключения введите соответствующий порт сервера P4, клиента и пользователя (обратите внимание, что вид выбранного клиента должен включать местоположение, которое вы выбрали на шаге 1)
- «View» -> «Pending Checkins» -> «Check In» -> в диалоговом окне отправки вместо нажатия кнопки «Submit» используйте «Cancel».
Причина: действие «Вернуть» создаст новый файл «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: an arbitrary string that will be displayed in "Change Source Control" dialog as "Server Binding". This name is used to determine what projects/solution files can share the same source control connection. I recommend not using space for this name as escaping rules for spaces are different in solution and project files.
- SccProvider0: жестко заданное значение «MSSCCI: Perforce \ u0020SCM».
- Отправьте два ожидающих файла с помощью клиента Perforce по вашему выбору (p4.exe, P4Win, P4V)
Теперь вы можете протестировать привязки:
- Убедитесь, что Visual Studio закрыта
- Удалите ** все * файлы, кроме name.sln (особенно name.suo)
- Откройте Visual Studio и используйте его, чтобы открыть name.sln
- Должно появиться диалоговое окно подключения, используйте соответствующий порт / клиент / пользователя и нажмите OK.
- В обозревателе решений теперь должен отображаться узел решения со значком наложения замка:
![Пустое решение, управляемое источником](https://i.stack.imgur.com/KmfTd.png)
- Теперь вы можете проверить состояние системы управления версиями решения, используя «Файл» -> «Управление исходным кодом» -> «Изменить элемент управления исходным кодом ...»:
Примечание. В столбце« Привязка сервера »отображается значение, которое мы выбрали для« SccProjectName0 ».
Исходный контроль новых проектов
Если вы создаете совершенно новый проект и хотите немедленно начать его отслеживание в хранилище Perforce, выполните следующие действия:
- Откройте решение с исходным кодом в Visual Studio
- «Файл» -> «Добавить» -> «Новый проект ...» - выберите тип проекта, который вы добавляете, имя и местоположение (местоположение должно быть подкаталогом каталога, в котором хранится файл решения).
- «Файл» -> «Сохранить все» (это зафиксирует все изменения в памяти в файле решения и вновь созданном файле проекта на диске)
Вручную отредактируйте файл проекта, который вы только что создали, используя любой редактор по вашему выбору (давай, СНОВА, блокнот? ;-)). Добавьте следующие элементы свойств в PropertyGroup (любую группу свойств):
<PropertyGroup>
...
<SccProjectName>Tutorial</SccProjectName>
<SccLocalPath>..\..</SccLocalPath>
<SccProvider>MSSCCI:Perforce SCM</SccProvider>
...
</PropertyGroup>
Значения следует выбирать следующим образом:
- SccProjectName - this is the value that is displayed in "Change Source Control" dialog as "Server Binding"; should be the same as the value you used for SccProjectName0 in blank solution; if not the same, solution and this project won't be able to share the same source control provider connection
- SccLocalPath - относительный путь к справочному каталогу (отображается в диалоговом окне «Изменить источник управления» как «Локальная привязка»); поскольку я рекомендую использовать каталог решения в качестве справочного каталога, это фактически относительный путь от каталога, содержащего файл проекта, до каталога, содержащего файл решения (мой пример хранит проекты в "(solutionDir) /Source/ProjectName/projectName.csproj", таким образом относительный путь - «два уровня вверх»)
- SccProvider - жестко заданное значение «MSSCCI: Perforce SCM»; это используется, чтобы определить, какой поставщик SCCAPI является значениями привязки Scc *, действительными для
Вернитесь в Visual Studio; он должен автоматически определять, что файл проекта был обновлен извне, и предлагать перезагрузить его (в противном случае выгрузить и перезагрузить проект вручную)
- «Просмотр» -> «Ожидающие проверки»
- «Вернуть» -> Я рекомендую щелкнуть правой кнопкой мыши файл (solutionName) .vssscc и выбрать «Вернуть, если не изменилось» (даже если Visual Studio открывает его для редактирования, он остается без изменений); предоставьте описание и отправьте изменение
Чтобы убедиться, что новый добавленный проект привязан правильно, вы можете выполнить следующие действия:
- Убедитесь, что Visual Studio закрыта
- Удалите файл (solutionName) .suo, а также MSSCCPRJ.SCC (в каталоге решения)
- Откройте Visual Studio и используйте его, чтобы открыть (solutionName) .sln
- Должно появиться диалоговое окно подключения, используйте соответствующий порт / клиент / пользователя и нажмите OK.
- В обозревателе решений теперь должен отображаться узел проекта со значком наложения замка:
![Проекты с исходным кодом](https://i.stack.imgur.com/vyRH4.png)
Теперь вы можете проверить состояние системы управления версиями решения, используя «Файл» -> «Управление исходным кодом» -> «Изменить систему управления версиями ...»: ![Статус проектов с исходным кодом](https://i.stack.imgur.com/3V33X .png )
В отношении этого снимка экрана состояния следует отметить, что, когда я выбрал строку решения, все оставшиеся строки также были «выбраны» (синяя подсветка). Это связано с тем, что все эти записи имеют одинаковую «привязку сервера» + «локальную привязку» и, таким образом, используют одно и то же соединение с поставщиком управления источником (P4).
Также обратите внимание, что «Относительный путь» для обоих проектов имеет два уровня и относится к одной и той же «локальной привязке» - каталогу, в котором находится файл решения.
Исходный контроль существующих (несвязанных) проектов
Если у вас есть существующие проекты, которые еще не использовались в каком-либо другом решении Perforce, выполните следующие действия, чтобы добавить их в Perforce (т. Е. Импортировать проекты, которые ранее не контролировались исходным кодом (загрузки из Интернета и т. Д.) Или использовали другой элемент управления исходным кодом. провайдера (Visual Source Safe и т. д.).
- Скопируйте проект в соответствующее место
- Clean-up existing source control bindings (if any):
- Remove existing project-file bindings, i.e. all properties starting with "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. Он определяется на основе привязок в каждом файле проекта (я предполагаю, что теоретически, если файл проекта по какой-то причине теряет информацию привязки, он может быть восстановлен из информации о решении ...)
Есть ли какой-либо рекомендуемый способ заставить привязки системы управления версиями продолжать работать даже при создании новой ветки решения?
Я надеюсь, что приведенные выше разделы дадут вам некоторое представление о способе, который мне очень подходит :-).
person
Milan Gardian
schedule
09.02.2009