Добавление ссылки на проект в перенаправлениях 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
вернуться к MSB
Project1 не будет сливаться с MSB
со всем остальным.
Мне непонятно, что случилось бы... или этот проект просто не слился с чем-либо, или он вернулся к TeamProjectB
папка. Я очень сомневаюсь, что последний случай, но первый тоже не имеет особого смысла... Я бы почти ожидал, что TFS каким-то образом закоротит.
Я предполагаю (полный WAG), что, так как вы смогли разветвляться Project1
от TPB
в TPA
что вы не разветвляетесь /Main
или же /Main/Enterprise
... Я надеюсь, что ответ таков TFS
не позволит вам перейти в подпапку другой ветви.
Чтобы исправить это
сливаться
Project1
вернуться кTPB
, Регистрироваться.сливаться
TPB/Project1
вернуться кMSB
, Регистрироваться.Выбрать
TPA/Project1
, Идти кFile -> Source Control -> Branching and Merging -> Reparent
, ВыбиратьMSB's Project 1
как новый родитель. Если ваши ветви сделаны из/Main
или же/Main/Enterprise
вам придется переписываться от того, какой корень ветки есть.
(Обратите внимание, что еслиTPB/Project1
не был укоренен изMSB
, это не будет вариант... Перейти к плану "B")Не уверен, что вы можете / должны проверить эти изменения в... выполните проверку на TPA и MSB, чтобы быть в безопасности
План "Б": если это не сработает, вам придется удалить TPA/Project1
и переориентироваться из MSB
, Убедитесь, что все объединено весь путь назад к MSB
(и проверил), прежде чем сделать это.
TFS может жаловаться на повторное ветвление в уже существующий каталог (потому что он хранит историю удаления TPA/Project1
)... я не думаю, что это произойдет, но если это произойдет, вам придется использовать инструмент командной строки, чтобы навсегда удалить TPA/Project1
, Команда tf destroy
... убедитесь, что вы запускаете его из местного TPA/Project1
Папка, или TF может не быть в состоянии разрешить сервер / путь TFS.
НТН!
Джеймс
Ссылки на проекты не имеют ничего общего с TFS. Они являются ссылками относительно вашего локального диска.
Теперь, если ваши проекты расположены в рабочей области TFS на локальном диске, у вас будут ссылки относительно рабочей области.
Загляните в отдельные файлы.csproj или.vbproj, чтобы увидеть ссылки на них. Я подозреваю, что вы обнаружите, что у вас есть относительные ссылки, такие как../../../../SomeProject.csproj, где относительный путь идет вверх из вашей рабочей области, а затем обратно.