Как интеграция системы управления версиями Visual Studio работает с Perforce?


мы используем Perforce и Visual Studio. Всякий раз, когда мы создаем ветку, некоторые проекты не будут привязаны к системе управления версиями, если мы не используем "Open from Source Control", но другие проекты работают независимо. Из моих исследований я знаю некоторые вещи, связанные с этим:

в наши .csproj файлы, есть такие настройки:

иногда они все настроены на "SAK", иногда нет. Кажется, что вещи скорее всего будут работать, если они говорят "Сак".

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

  • SccLocalPath#
  • SccProjectFilePathRelativizedFromconnection#
  • SccProjectUniqueName#

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

Итак, чтобы, наконец, добраться до деталей, которые я хотел бы знать:

  • что происходит, когда вы делаете "изменение системы управления версиями" и привязка проектов? Как Visual Studio решает, что поместить в проект а файлы решений?
  • что происходит, когда вы делаете "открыть из системы управления версиями"?
  • что это за папка "соединение", на которую ссылаются SccLocalPath и SccProjectFilePathRelativizedFromconnection? Как визуальная студия/волей-неволей забрать его?
  • есть ли какой-то рекомендуемый способ заставить привязки системы управления версиями продолжать работать даже при создании новой ветви решения?

Добавлено В Июне 2012 Года: Я не использую волей-неволей больше, поэтому я не могу ручаться за это, но взгляните на ответ KCD ниже. Видимо есть новый плагин P4 VS в стадии разработки. Надеюсь, это должно прояснить весь этот беспорядок!

9 70

9 ответов:

введение

Я бы не согласился с утверждением, что принудительная интеграция в Visual Studio "ужасна". Скорее, я бы определил его как "из коробки опыт менее оптимален": -). В следующих разделах обсуждается мое понимание интеграции и рекомендации по настройке проекта/решения.

если вас не интересуют подробности того, как работает интеграция с системой управления версиями, вы можете перейти к концу этого ответа, где я суммирую ответы Вопрос неваляшка по.

отказ от ответственности: следующие разделы - это просто образованные догадки, основанные на моем эмпирическом опыте, однако я использовал эту технику на протяжении многих лет во многих проектах (каждый проект имеет несколько экспериментальных/магистральных/обслуживающих/выпускающих ветвей, иногда даже несколько файлов решений, без проблем). Недостатком является то, что вы должны вручную обновление файлов проекта-но 2-минутные инвестиции амортизируются в течение всего срока службы из проекта довольно красиво ИМХО: -).

решение и проект

Visual Studio использует информацию привязки системы управления версиями как из файла решения, так и из каждого файла проекта во время начальной загрузки решения. Эта информация привязки затем хранится в имя.СУО

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

кроме того, P4SCC имеет огромную стоимость производительности в большом решении, поскольку он извлекает информацию из системы управления версиями для каждого файла при запуске, и сохраняет это состояние в памяти на протяжении всего сеанса разработки. Это создает дополнительную крафт в виде информации-бесплатно .файлы vsscc & vssscc для поддержки некоторых функций SCC, которые (AFAICT) волей-неволей не используются.

идеальная интеграция Perforce выглядит так:

  • если я создаю новое решение, проект или элемент проекта, запустите 'P4 add'.
  • если я изменю файл, запустите 'P4 edit'.
  • некоторые панели инструментов/контекстное меню интеграции для истории изменений, график изменений, timelapse / blame и "показать в графическом интерфейсе P4".
  • (приятно иметь) если я переименую файл, который существует в депо, запустите "P4 integrate" и "P4 delete". Если я переименовать файл открывается для добавления, а затем вернуться Р4 и Р4 добавить'.
  • вот и все

мы полностью отошли от P4SCC и его странных требований и бремени. Вместо этого мы используем NiftyPerforce. Есть некоторые ошибки, но мы находим, что работа вокруг этих ошибок будет намного меньше разочарование, чем работа вокруг дефектов дизайна в модели Perforce VSSCC.

просто чтобы сохранить этот ток-плагин P4VS был переписан около 2012 года

теперь вы можете выполнять все ваши ежедневные взаимодействие с Perforce естественно, как проверка кода и просмотр истории файлов, непосредственно из IDE.

Если вы опытный пользователь ищет немного больше, P4VS не разочарует. P4VS полностью совместим с потоками Perforce и потоковым графом доступен из среды IDE, а также с временным представлением и ревизией Диаграмма. Если вы отвечаете за управление филиалами, вы можете объединить из P4VS, а также.

и, если вы работаете удаленно или хотите сделать немного частные ветвления, P4Sandbox можно настроить через P4VS.

использование Perforce с Visual Studio можно упростить с помощью переменной среды P4CONFIG.

в основном вы заходите в Visual Studio, Tools - > Options - > Source Control- > Plug-in Settings, Advanced button. Это вызовет диалоговое окно Конфигурации Perforce, специфичное для интеграции SCC. Перейдите на вкладку подключение и установите переключатель под названием "привязать рабочее пространство, соответствующее вашим настройкам среды Perforce". Это скажет волей-неволей предпочесть использование Переменная среды P4CONFIG для определения среды, в которой вы находитесь. Этот же диалог существует в P4V под Edit - > Preferences, но влияет только на поведение p4v.

Как вы настраиваете переменную среды P4CONFIG до некоторой степени зависит от вас. Мне нравится, чтобы они назывались одинаково везде, поэтому я установил системную переменную среды P4CONFIG для поиска файла с именем p4config.контекстно-свободная грамматика. Этот файл является просто файлом стиля ini, где вы можете назначить другие переменные, такие как P4USER, P4CLIENT, P4HOST и др. Perforce будет искать этот файл в текущем каталоге и во всех родительских каталогах, пока он не встретит один. В основном вы помещаете этот файл в корневой каталог most вашего, где ваш clientspec отображается на вашем жестком диске, и оставляете его в покое.

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

Если после синхронизации кода от perforce в первый раз или до полностью чистой структуры каталогов и получения диалогового окна, жалующегося на то, что perforce хочет либо временно работать в автономном режиме, либо удалить привязки, вам все еще нужно отредактировать. В первую очередь .сам файл sln должен быть изменен, чтобы он знал, что sln имеет привязки SCC для себя . Это делается, убедившись, что следующие поля помещаются сразу после SccNumberOfProjects в.sln файл.

SccProjectName0 = Perforce\u0020Project
SccProvider0 = MSSCCI:Perforce\u0020SCM

все индивидуальные проекты должны отлично работать с привязками SAK по умолчанию, если вы используете подход P4CONFIG. Исправление этого должно позволить Perforce работать с чистой синхронизацией отлично, а также исключить генерацию MSSCCPRJ.SCC cruft в каждом из каталогов проекта.

поддержка переименования файла или перемещения его в новую папку каталога является Грозный и болезненно при использовании интеграции с подключаемым модулем Visual Studio P4. Нет встроенной функции, которая предупреждает P4 о переименовании файла или о том, что он был перемещен.

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

В настоящее время я не вижу способа сделать оба в одной операции при использовании интеграции VS. Вместо этого, вы должны:

  1. переименовать / переместить файл из клиента Perforce
  2. удалите старую ссылку на имя файла в файле проекта в VS
  3. добавьте новую ссылку на имя файла в файл проекта в VS
  4. внести изменения

Если вы используете процесс сборки непрерывной интеграции и вы отправляете изменения в любой момент до последнего шага, вы гарантированно имеете сломанную сборку.

проблема значительно увеличивает количество файлов, требующих переименования или перемещения. Это не плавный процесс.

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

Как упоминалось Weeble, значения SAK отлично работают, когда все остальное настроено правильно, и они часто являются значениями по умолчанию (но я думаю, что это зависит от того, какой тип проекта это). Если они не отображаются в вашем проекте, просто вставьте эту группу свойств.

<PropertyGroup>
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>

добавьте эти две строки в *.sln в the SourceCodeControl GlobalSection. Пока файлы проекта имеют значения SAK, они должны наследовать имена из решения.

SccProjectName0 = Perforce\u0020Project
SccProvider0 = MSSCCI:Perforce\u0020SCM

нет *.vssscc,*.vspscc все, или *.Файлы SCC должны быть возвращены (хотя они будут сгенерированы при открытии решения).

очень плохо. Я знаю, что это не ответ на ваши вопросы, которые вы искали (в будущем, возможно, вы могли бы сузить?), но интеграция системы управления версиями с Visual Studio просто отстой. Причина в том, что все они должны использовать ужасный интерфейс SCC от Microsoft. Это жалко! Они помещают информацию управления версиями в файлы проекта! Зачем им это делать?

просто откажитесь от интеграции с Visual Studio и используйте клиент Perforce. Дело не в этом много дополнительной работы. Вы не можете сэкономить 30 секунд в день, чтобы переключиться на клиент Perforce и проверить файлы оттуда?

Я могу ответить на последний.

чтобы привязки системы управления версиями работали даже при создании новой ветви, следуйте строгой иерархической структуре:

/Solution
  /library1
  /library2
  /product1
  /product2
  /subsolution
    /sublibrary1
    /subproduct1

каждый файл должен быть ровно один .vcproj. Вы можете иметь несколько .vcproj в том же каталоге, но если они совместно используют файлы, общие файлы должны идти в свои собственные .vcproj.

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

Это не вынужденная проблема, это проблема Visual Studio. Нелепое требование, чтобы исходные файлы были изменены, чтобы позволить Visual Studio понять, что используется инструмент SCM, является идиотским.

простой ответ: "Прекратите использовать интеграцию с системой управления версиями Visual Studio". Это просто отстой. Даже с TFS это просто отстой.

Если вы хотите иметь возможность проверить из Visual Studio, просто создайте пользовательский инструмент. Простой вызов 'P4 edit' с соответствующей переменной VS-это все, что вам нужно. Хотите вернуть файл? Та же идея...вызовите P4 revert с соответствующей переменной. Сделанный.

используйте p4v для управления вашими потребностями в системе управления версиями (представления, история, различия и т. д.) Visual Studio rocks как редактор исходного кода. Это отстой как интерфейс SCM.