Удалить соединение TFS из решения

82

Как сделать решение как чистую копию без сопоставления с TFS? Проблема в том, что это сообщение появляется, когда я пытаюсь его открыть. Я хочу открыть его как обычно, без подключения к TFS.

введите описание изображения здесь

чемпион
источник

Ответы:

51

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

  1. Нажмите кнопку «Нет», чтобы не подключаться к TFS.
  2. В меню файла перейдите к параметрам управления версиями и снимите привязки. Вам, в частности, понадобится File - Source Control - Advanced - Change Source Control ...
  3. Сохраните решение.

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

Ричард Бэнкс
источник
1
В моем случае было необходимо использовать VS2013, чтобы отделить TFS от решения VS2010.
bvj 01
Мне пришлось повторно включить Javascript (отключенный для тестирования) в Chrome, чтобы отобразить этот параметр. Справедливости ради, MSVC упомянул, что на экране журнала TFS появляется предупреждающее сообщение.
Энтони,
Это не работает должным образом, поскольку не удаляет файлы привязок, что затрудняет повторное подключение к системе управления версиями позже.
ЛуКОС
В моем случае кнопка "Отключить" отключена, на две записи.
Б. Клей Шеннон
2
В VS2017 это не действует, в следующий раз, когда вы откроете решение, вам снова придется выбрать «не связываться с tfs» и «ОК» в следующем сообщении об ошибке.
Gerard
193

Чтобы полностью удалить привязку системы управления версиями TFS, выполните следующие два шага:

  1. Перейдите в папку вашего решения, в найти и удалить все файлы с *.vsssccи *.vspsccрасширения.
  2. Откройте .slnфайл вашего решения в Блокноте, найдите и удалите GlobalSection(TeamFoundationVersionControl)раздел.

Подробнее по ссылке Ссылка

Табиш Усман
источник
Решил и для меня. Я думаю, вы не можете полностью извлечь TFS из одной только Visual Studio.
Руди Скоггинс
3
Это сработало для меня, за исключением того, что в выходных данных Team Foundation по-прежнему говорится: «Сопоставления для решения не могут быть найдены. Сопоставления для решения не могут быть найдены. Активное решение было временно отключено от системы управления версиями, поскольку сервер недоступен. попытайтесь повторно подключиться к системе управления версиями, закройте, а затем снова откройте решение, когда сервер будет доступен. Если вы хотите подключить это решение к другому серверу, используйте диалоговое окно «Изменить управление исходным кодом».
EngineerWithJava54321
2
Это сработало для меня. Я следовал инструкциям по "ссылочной ссылке".
Лэй Ши
Все файлы * .vs * означают папки решений и проектов.
ourmandave
42

Отредактируйте файл решения и удалите из него следующий раздел. Это будет не то же самое, но будет похоже.

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

GlobalSection(TeamFoundationVersionControl) = preSolution
    SccNumberOfProjects = 2
    SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
    SccTeamFoundationServer = <YourTFSURL>
    SccLocalPath0 = .
    SccProjectUniqueName1 = .
    SccLocalPath1 = .
EndGlobalSection
Хамид Шахид
источник
19

У меня недостаточно репутации для комментариев, но я просто хотел добавить, что решение Табиша действительно работает правильно, чтобы полностью удалить решение из системы управления версиями, особенно когда сервер TFS недоступен по той или иной причине (например, вы загрузили проект, который автор не удалил из своей системы управления версиями перед загрузкой).

Однако, чтобы полностью удалить все следы управления версиями из проекта и избежать предупреждений, отмеченных в других комментариях к этому ответу (например, «Не удалось найти сопоставления для решения ...»), вы также должны удалить следующие строки из каждого файла проекта в решении (по-видимому, они были в файле решения в более ранних версиях VS, но в VS2017 они находятся в файле проекта для каждого проекта в решении - например, [project] .csproj):

SccProjectName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SccAuxPath = "x"
SccLocalPath = "xxx"
SccProvider = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Благодаря отмеченному ответу и другим комментариям здесь за указание на это:

Visual Source Safe - как удалить привязки из решения без открытия в Visual Studio

Объединение этого с ответом Табиша кажется наиболее полным методом ручного удаления решения из системы контроля версий.

dwillis77
источник
8
  • Чтобы удалить привязку, вы можете использовать Visual Studio: Меню File / Source Control / Advanced / Change Source Control.

  • Вы также можете сделать это самостоятельно, удалив любой SCC ... из sln и csproj.

  • Если вы часто экспортируете исходные файлы, вы можете использовать ExportSrc . У него есть много опций, таких как удаление привязки TFS (по умолчанию включено).

мезианто
источник
4

Большинство ответов предоставили решение, но я бы предпочел использовать решение, предоставленное Visual Studio 2017.

В строке меню Visual Studio перейдите в раздел «Команда» и выберите « Отключиться от Team Foundation Server» . Вот и все.

Абубакар Ахмад
источник
2
Это только закрывает ваше решение ..?
jan4co
0

Я только что унаследовал коллекцию проектов TeamFoundation после выкупа слияния и поглощения и передачи технологий. Было около 30+ решений и множество файлов * .vssscc и * .vspscc.

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

Использование Remove_TFSfiles "pathname" $booleanflag .

Чтобы узнать, какие файлы будут затронуты, используйте $false(использует -whatif):

Remove_TFSfiles "C:\MyDevFolder" $false

Чтобы удалить эти файлы, используйте $true :

Remove_TFSfiles "C:\MyDevFolder" $true

Вот функция:

Function Remove_TFSfiles { 
    param(
        [string]$FolderName = $(throw "-FolderName is required."),
        [bool]$RemoveFiles = $(throw "-RemoveFiles (either $true or $false) is required.")
    )
    $TFSExtensions = '*.vspscc', '*.vssscc'                          

    if ($RemoveFiles) {
        Get-ChildItem -path $FolderName -force -include $TFSExtensions -Recurse | Remove-Item -Force        
        # Now iterate through any solution files, and whack the TeamFoundationVersionControl section
        Get-ChildItem -Path $FolderName -Filter "*.sln" -Recurse | ForEach-Object {
            $slnFilename = $_.Fullname
            Write-Host -NoNewline "Editing $slnFilename... "
            $File = Get-Content $slnFilename -raw
            $Filestr = [regex]::escape("" + $File + "")
            # The regex escapes must themselves be meta-escaped, therefore "\(" becomes "\\" + "\(" = "\\\(". Did I mention I hate regex?
            $Result = $Filestr -replace "\\tGlobalSection\\\(TeamFoundationVersionControl\\\).*?EndGlobalSection\\r\\n", ""
            $result = [regex]::unescape($result)
            Set-ItemProperty $slnFilename IsReadOnly $false
            $result | Set-Content $slnFilename 
            Write-Host "Done"
        }
        Write-Host -f red "Finished actually removing files and editing *.sln files"
    }
    else {
        Get-ChildItem -path $FolderName -force -include $TFSExtensions -Recurse | Remove-Item -WhatIf
        Write-Host -f green "Finished pretending to remove files"
        # Now iterate through any solution files, and whack the TeamFoundationVersionControl section
        Get-ChildItem -Path $FolderName -Filter "*.sln" -Recurse | ForEach-Object {
            $slnFilename = $_.Fullname 
            Write-Host "Not Editing $slnFilename"
        }
    }
}
Дэвид в HotspotOffice
источник