Добавление ссылки на проект в перенаправлениях TFS к ранее разветвленной версии проекта ♦

У меня есть структура TFS, которая выглядит примерно так:

$

-MainSoftwareBranch

-dev

-Главный

-Enterprise

-Project1

-Тестовое задание

-TeamProjectA

-Главный

-Enterprise

-Project1

-TeamProjectB

-Главный

-Enterprise

-Project1

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

Когда-то в прошлом кто-то, кто не был очень знаком с нашей стратегией ветвления, разветвлял Project1 напрямую из TeamProjectB в TeamProjectA вместо MSB. Я попытался это исправить и удалил ссылку на проект на $/TeamProjectB/Main/Enterprise/Project1, откуда он был указан в TeamProjectA. Я разветвил Project1 из $/MSB/Main/Enterprise/Project1 и попытался добавить проект в решение, используя "Добавить существующий проект..." и перейдя по локальному пути, где находится файл csproj. Загруженный проект - это проект из $ / TeamProjectB. Я удалил привязки управления исходным кодом, как в TFS, так и вручную в файлах csproj и sln, но ничего не изменилось. Он всегда "перенаправляет" мой запрос на открытие правильного файла csproj к старому, который недопустим.

Кто-нибудь имеет представление о том, что может быть причиной этого странного поведения?

2 ответа

Решение

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

Один момент, который мне нужно уточнить, чтобы полностью ответить вам... какие подпапки разветвляются?  IE бы ты нормально разветвлял MSB/Main в TeamProjectA/Mainили вы бы разветвляли отдельные проекты, например MSB/Main/Enterprise/Project1, Project2, так далее.?


Во-первых: проверьте сопоставления рабочей области... в Visual Studio откройте проводник управления источниками. В верхней части окна есть раскрывающееся рабочее пространство... выберите "Управление рабочими областями..." и отредактируйте основное рабочее пространство.

В идеале существует только одна рабочая папка, которая отображает корневой каталог вашего проекта TFS (в вашем случае '$') в корневую локальную рабочую папку. Если у вас более одной рабочей папки, убедитесь, что вторая (-ые) папка (-и) не являются подпапками корня. То есть у вас не должно быть отдельной папки для $/TeamProjectA/Main/Enterprise/Project1, Если вы это сделаете, удалите его и сделайте последнюю версию из корня.

Это мое первое предположение, потому что если TeamProjectB/Project1 сопоставлен с TeamProjectA папку, не важно, сколько раз вы меняете ссылки, вы всегда будете загружать проект команды B.


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

Это значит, что до тех пор, пока Project1 был разветвлен от TeamProjectB, вы всегда будете привязаны к TeamProjectB... Вы можете исправить ссылки в TFS для каждой команды и для проекта, но при объединении TeamProjectA вернуться к MSBProject1 не будет сливаться с MSB со всем остальным.

Мне непонятно, что случилось бы... или этот проект просто не слился с чем-либо, или он вернулся к TeamProjectBпапка. Я очень сомневаюсь, что последний случай, но первый тоже не имеет особого смысла... Я бы почти ожидал, что TFS каким-то образом закоротит.

Я предполагаю (полный WAG), что, так как вы смогли разветвляться Project1 от TPB в TPA что вы не разветвляетесь /Main или же /Main/Enterprise... Я надеюсь, что ответ таков TFS не позволит вам перейти в подпапку другой ветви.


Чтобы исправить это

  1. сливаться Project1 вернуться к TPB, Регистрироваться.

  2. сливаться TPB/Project1 вернуться к MSB, Регистрироваться.

  3. Выбрать TPA/Project1, Идти к File -> Source Control -> Branching and Merging -> Reparent, Выбирать MSB's Project 1 как новый родитель. Если ваши ветви сделаны из /Main или же /Main/Enterpriseвам придется переписываться от того, какой корень ветки есть.
    (Обратите внимание, что если TPB/Project1 не был укоренен из MSB, это не будет вариант... Перейти к плану "B")

  4. Не уверен, что вы можете / должны проверить эти изменения в... выполните проверку на TPA и MSB, чтобы быть в безопасности


План "Б": если это не сработает, вам придется удалить TPA/Project1 и переориентироваться из MSB, Убедитесь, что все объединено весь путь назад к MSB (и проверил), прежде чем сделать это.

TFS может жаловаться на повторное ветвление в уже существующий каталог (потому что он хранит историю удаления TPA/Project1)... я не думаю, что это произойдет, но если это произойдет, вам придется использовать инструмент командной строки, чтобы навсегда удалить TPA/Project1, Команда tf destroy... убедитесь, что вы запускаете его из местного TPA/Project1 Папка, или TF может не быть в состоянии разрешить сервер / путь TFS.

НТН!
Джеймс

Ссылки на проекты не имеют ничего общего с TFS. Они являются ссылками относительно вашего локального диска.

Теперь, если ваши проекты расположены в рабочей области TFS на локальном диске, у вас будут ссылки относительно рабочей области.

Загляните в отдельные файлы.csproj или.vbproj, чтобы увидеть ссылки на них. Я подозреваю, что вы обнаружите, что у вас есть относительные ссылки, такие как../../../../SomeProject.csproj, где относительный путь идет вверх из вашей рабочей области, а затем обратно.

Другие вопросы по тегам