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

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

6 ответов

Решение

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

  1. Нажмите кнопку "Нет", чтобы избежать подключения к TFS.
  2. В меню "Файл" перейдите к параметрам управления исходным кодом и очистите привязки. Вы определенно захотите Файл - Контроль источника - Дополнительно - Изменить контроль источника...
  3. Сохраните решение.

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

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

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

Ссылка Ссылка

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

GlobalSection(TeamFoundationVersionControl) = preSolution
    SccNumberOfProjects = 2
    SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
    SccTeamFoundationServer = <YourTFSURL>
    SccLocalPath0 = .
    SccProjectUniqueName1 = .
    SccLocalPath1 = .
EndGlobalSection

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

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

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

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

визуальный источник безопасен - как удалить привязки из решения без открытия в visual studio

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

  • Чтобы удалить привязку, вы можете использовать Visual Studio: Меню Файл / Контроль источника / Дополнительно / Изменить контроль источника.

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

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

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

В строке меню Visual Studio перейдите в Team и выберите Disconnect from Team Foundation Server. Вот и все.

Я только унаследовал коллекцию проектов 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) {
    dir -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)
        sp $slnFilename IsReadOnly $false
        $result | set-content $slnFilename 
        write-host "Done"
    }
    write-host -f red "Finished actually removing files and editing *.sln files"
} else {
    dir -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"
    }
}

}

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