Мы используем Perforce и Visual Studio. Всякий раз, когда мы создаем ветвь, некоторые проекты не привязаны к исходному контролю, если мы не будем использовать "Open from Source Control", но другие проекты работают независимо. Из моих исследований я знаю некоторые вещи:
В наших файлах .csproj есть следующие настройки:
- <SccProjectName>
- <SccLocalPath>
- <SccAuxPath>
- <SccProvider>
Иногда они все настроены на "SAK", иногда нет. Кажется, что с большей вероятностью будут работать, если они говорят "SAK".
В нашем .sln файле есть настройки для многих проектов:
- SccLocalPath #
- SccProjectFilePathRelativizedFromConnection #
- SccProjectUniqueName #
(# - число, которое идентифицирует каждый проект.) SccLocalPath - это путь относительно файла решения. Часто это ".", Иногда это папка, в которой находится проект, а иногда это ".." или ".. \..", и кажется, что это плохо для того, чтобы указать на папку выше папку решения. Релятивизация - это путь из этой папки в файл проекта. Это будет отсутствовать полностью, если SccLocalPath указывает на папку проекта. Если у SccLocalPath есть "..", этот путь может включать имена папок, которые не совпадают между ветвями, что, я думаю, вызывает проблемы.
Итак, чтобы, наконец, перейти к особенностям, которые я хотел бы знать:
- Что происходит, когда вы выполняете "Изменить контроль источника" и связываете проекты? Как Visual Studio решает, что добавить в проект и файлы решений?
- Что происходит, когда вы делаете "Open from source control"?
- Что это папка "connection", к которой относятся SccLocalPath и SccProjectFilePathRelativizedFromConnection? Как Visual Studio/Perforce выбирает его?
- Есть ли какой-нибудь рекомендуемый способ заставить привязки управления версиями продолжать работать, даже когда вы создаете новую ветвь решения?
Добавлено июнь 2012: Я больше не использую Perforce, поэтому я не могу ручаться за него, но посмотрите ответ KCD ниже. По-видимому там новый плагин P4 VS в разработке. Надеюсь, он должен очистить весь этот беспорядок!