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

71
задан Community 23 May 2017 в 12:25
поделиться

5 ответов

Введение

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

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

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

Решение по сравнению с проектом

Visual Studio использует информацию о привязке управления исходным кодом и из файла решения и из каждого файла проекта во время начальной загрузки решения. Эта информация о привязке затем хранится в name.suo файле (предполагающий, что мы используем name.sln в качестве решения) - отмечают, что suo файлы отмечены со скрытым флагом, таким образом, они не будут видимы в файловом менеджере (если Вы не переопределите опцию "Hidden files and folders").

Самый легкий способ снова переплести поставщику управления исходным кодом, если что-нибудь идет не так, как надо, состоит в том, чтобы удалить соответствующий suo файл и вновь открыть решение. После suo файл был создан, изменения в <Scc*>, элементы не имеют никакого эффекта.

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

alt text

Почему Visual Studio нарушает DRY (не Повторяйте Себя), принцип?Понятия не имею. Я предполагаю, что это имеет исторические причины и сильно связывается к потребностям того кошмара под названием Визуальный Безопасный Источник :-).

Как настроить его "правильно"?

При добавлении или новых или существующих решений/проектов По необходимости, я всегда запускаю путем создания пустого решения (см. раздел "Source-controlling a blank solution"). Я затем добавляю проекты к этому пустому решению, один за другим. Шаги отличаются немного на основе того, существует ли проект, добавляемый уже, (см. "Управляющие источником существующие (несвязанные) проекты" и "Управляющие источником существующие (связанные) проекты" разделы), или я должен создать новый (см. раздел "Source-controlling new projects").

Управление источника пустое решение

Для добавления нового пустого решения управления исходным кодом сделайте следующее:

  1. Запустите Visual Studio, "Новую"-> "Проект..."-> "Другие типы проекта"-> "Пустое решение"; заполните название решения и местоположение, кнопку "OK"
  2. "Файл"-> "Управление исходным кодом"->, "Добавляют Решение Управления исходным кодом..."
  3. В соединении диалоговое окно вводит соответствующий порт сервера P4, клиент и пользователь (обратите внимание, что представление выбранного клиента должно включать местоположение, которое Вы выбрали на шаге 1),
  4. "Представление"-> "Ожидающий Checkins"-> "Регистрация"-> в отправлять диалоговом окне вместо того, чтобы нажать кнопку "Submit", используйте "Отмену".
    Причина: "Регистрация" действия создаст новый файл, "name.vssscc", затем добавить и "name.sln" и "name.vssscc" к значению по умолчанию Perforce changelist; путем отмены отправлять диалогового окна мы сохраним "добавить" операционное ожидание и сможем отредактировать файлы прежде, чем отправить P4
  5. Близкая Visual Studio
  6. Откройте name.sln файл в своем любимом редакторе (блокнот, если Вы являетесь действительно отчаянными :-)), и добавьте две новых строки (SccProjectName0 и SccProvider0) - пустой файл решения должен теперь иметь раздел управления исходным кодом следующим образом:

    GlobalSection(SourceCodeControl) = preSolution
        SccNumberOfProjects = 1
        SccLocalPath0 = .
        SccProjectName0 = Tutorial
        SccProvider0 = MSSCCI:Perforce\u0020SCM
    EndGlobalSection
    

    Значения должны быть выбраны следующим образом:

    • SccProjectName0: произвольная строка, которая будет отображена в "диалоговом окне" Управления исходным кодом Изменения как "Привязка Сервера". Это имя используется для определения, какие файлы проектов/решения могут совместно использовать то же соединение управления исходным кодом. Я рекомендую не использовать пространство для этого имени, поскольку выходящие правила для пробелов отличаются в решении и файлах проекта.
    • SccProvider0: трудно кодированное значение "MSSCCI:Perforce\u0020SCM".
  7. Отправьте два незаконченных файла с помощью По необходимости клиент по Вашему выбору (p4.exe, P4Win, P4V)

Можно теперь протестировать привязку:

  1. Удостоверьтесь, что Visual Studio закрывается
  2. Удалите ** все* файлы кроме name.sln (особенно name.suo)
  3. Откройте Visual Studio и используйте его для открытия name.sln
  4. Диалоговое окно соединения должно появиться, использовать соответствующий порт/клиент/пользователя и нажать "OK"
  5. Проводник решения должен теперь отобразить узел решения со значком наложения замка: Source-controlled blank solution
  6. Можно теперь проверить состояние управления исходным кодом решения при помощи "Файла"->, "Управление исходным кодом"-> "Изменяет Управление исходным кодом..."Source control status of blank solution:Примечание: столбец "Server Binding" показывает значение, которое мы выбрали для "SccProjectName0".

Управляющие источником новые проекты

Если бы Вы создаете совершенно новый проект и хотели бы сразу начать отследить его в По необходимости склад, выполнять эти шаги:

  1. Откройте управляемое источником решение в Visual Studio
  2. "Файл"-> "Добавляет"-> "Новый Проект..." - выбирают тип проекта, который Вы добавляете, название и местоположение (местоположение должно быть подкаталогом каталога, где файл решения хранится),
  3. "Файл"-> "Сохраняет Все" (это передаст все изменения в оперативной памяти в файле решения и недавно созданном файле проекта к диску),
  4. Вручную отредактируйте файл проекта, Вы просто создали использование редактора по Вашему выбору (продвиньтесь, блокнот СНОВА? ;-)). Добавьте следующие элементы свойства в 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* обязательные значения, допустимые
  5. Переключитесь назад на Visual Studio; это должно автоматически обнаружить, что файл проекта был обновлен внешне, и предложение перезагрузить его (в противном случае разгружают и перезагружают проект вручную),

  6. "Представление"-> "Ожидающий Checkins"
  7. "Регистрация"-> я рекомендую щелкнуть правой кнопкой по (solutionName) .vssscc по файлу, и выбор "Возвращаются, если неизменный" (даже при том, что Visual Studio открывает его для редактирования, это остается неизменным); предоставьте описание и отправьте изменение

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

  1. Удостоверьтесь, что Visual Studio закрывается
  2. Удалите (solutionName) .suo файл, а также MSSCCPRJ.SCC (в каталоге решения)
  3. Откройте Visual Studio и используйте его для открытия (solutionName) .sln
  4. Диалоговое окно соединения должно появиться, использовать соответствующий порт/клиент/пользователя и нажать "OK"
  5. Проводник решения должен теперь отобразить узел проекта со значком наложения замка: Source-controlled projects
  6. Можно теперь проверить состояние управления исходным кодом решения при помощи "Файла"->, "Управление исходным кодом"-> "Изменяет Управление исходным кодом...": Status of source-controlled projects

    Одна вещь отметить об этом снимке экрана состояния состоит в том, что, когда я выбрал строку решения, все остающиеся строки были "выбраны" также (синее выделение). Это вызвано тем, что все те записи имеют ту же "Привязку Сервера" + "Локальная Привязка" и таким образом совместно используют того же поставщика управления исходным кодом (P4) соединение.

    Также обратите внимание, что "Относительный путь" для обоих проектов имеет два уровня и относительно той же "Локальной Привязки" - каталог, где файл решения находится.

Управляющие источником существующие (несвязанные) проекты

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

  1. Скопируйте проект в соответствующее местоположение
  2. Очистка существующая привязка управления исходным кодом (если таковые имеются):
    • Удалите существующую привязку файла проекта, т.е. все свойства, запускающиеся с "Scc"
    • Удалите файл (projectName) .vspscc в том же каталоге как файл проекта (если таковые имеются)
  3. Откройте управляемое источником решение в Visual Studio
  4. "Файл"-> "Добавляет"-> "Существующий проект..." - обзор к проекту (копия, которую Вы создали на шаге 1),
  5. "Файл"-> "Сохраняет Все" (это передаст все изменения в оперативной памяти в файле решения),
  6. Следуйте за шагами 4-7 от "Управляющих источником новых проектов" (т.е. Вы теперь добавите элементы свойства "Scc *" в PropertyGroup),

Шаги проверки являются точно тем же как в разделе "Source-controlling new projects".

Управляющие источником существующие (связанные) проекты

Если у Вас есть проекты, которые были уже связаны с по необходимости использованием техники, обсужденной здесь, и Вы хотите использовать их в другом решении (новое ответвление, альтернативное решение, снова использующее проект, и т.д.) используют следующие шаги:

  1. Интегрируйте проект в желаемое местоположение
  2. Откройте управляемое источником решение в Visual Studio
  3. "Файл"-> "Добавляет"-> "Существующий проект..." - обзор к проекту, созданному на шаге 1 через интеграцию
  4. "Представление"-> "Ожидающий Checkins"-> "Регистрация" - добавляет описание и отправляет

Сводка

  • Информация о привязке управления исходным кодом хранится и в решении и в проектах, должен быть в синхронизации (в противном случае, Visual Studio попытается зафиксировать любые несоответствия),
  • Я всегда рассматриваю файлы проекта как основной источник информации о привязке и файлы решения как одноразовые файлы, которые могут быть воссозданы легко первым управлением источника пустое решение и затем добавление желаемых проектов
  • Файл решения должен всегда иметь допустимые значения SccProvider0 и SccProjectName0 (должны быть добавлены вручную с новыми версиями плагинов P4SCC),
  • Файлы проекта должны всегда иметь допустимый SccProjectName (предпочтительно то же, поскольку SccProjectName0), SccLocalPath и значения SccProvider (также должны быть отредактированы вручную как значения по умолчанию P4SCC, бесполезны),

Я также включаю ответы на Ваши исходные вопросы:

Что происходит, когда Вы действительно "Изменяете управление исходным кодом" и связываете проекты? Как Visual Studio решает, что вставить файлы решения и проект?

Это обновляет "Scc*" элементы в файле проекта, который Вы снова переплетаете; файл решения затем обновляется также так, чтобы это было в синхронизации с привязкой файла проекта

Что происходит, когда Вы действительно "Открываетесь от управления исходным кодом"?

Позволяет Вам выбирать решение, которое требуется открыть. Впоследствии все проекты, включенные в решение, автоматически синхронизируются для заголовка. Я нахожу эту функцию не очень полезной в По необходимости мире, где необходимо создать клиент так или иначе, и возможности, Вы синхронизируете этот клиент от P4V/P4Win/P4 вместо того, чтобы полагаться на Visual Studio. Это было довольно полезно в Визуальном Источнике Безопасный мир, где не было никакого понятия представлений, и Вы определяли, где репозиторий идет на время контроля.

Какова эта папка "соединения", к которой обращаются SccLocalPath и SccProjectFilePathRelativizedFromConnection? Как делает Visual Studio/, По необходимости выбирают его?

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

Разве существует ли некоторый рекомендуемый способ заставить привязку управления исходным кодом продолжить работать, даже когда Вы создаете новое ответвление решения?

Я надеюсь, что разделы выше дают Вам некоторое представление о пути, который работает очень хорошо на меня :-).

102
ответ дан Spooky 24 November 2019 в 12:59
поделиться

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

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

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

  1. переименовывают/перемещают файл из По необходимости, клиент
  2. удаляет старую ссылку имени файла в файле проекта в VS
  3. , добавляют, что новая ссылка имени файла в файле проекта в VS
  4. отправляет Ваши изменения

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

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

4
ответ дан Ray Vega 24 November 2019 в 12:59
поделиться

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

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

2
ответ дан raven 24 November 2019 в 12:59
поделиться

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

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

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

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

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

1
ответ дан Thomas L Holaday 24 November 2019 в 12:59
поделиться

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

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

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

  • Если я создаю новое решение, проект или элемент проекта, запускаю 'p4 add'.
  • Если я изменяю файл, запустите 'p4 edit'.
  • Некоторая интеграция панели инструментов / контекстного меню для истории ревизий, графика ревизий, интервальной съемки / обвинения и «показать в графическом интерфейсе P4».
  • (приятно иметь) Если я переименовываю файл, который существует в хранилище, запустите «p4 интегрировать» и «p4 delete». Если я переименую файл, открытый для добавления, запустите p4 revert и p4 add.
  • Вот и все

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

22
ответ дан 24 November 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: