Как сделать решение как чистую копию без сопоставления с TFS? Проблема в том, что это сообщение появляется, когда я пытаюсь его открыть. Я хочу открыть его как обычно, без подключения к TFS.
Ответы:
Если вы хотите навсегда и полностью отделить решение от системы управления версиями, попробуйте следующее:
В следующий раз, когда вы откроете решение, вам не будет предложено подключиться к TFS.
Чтобы полностью удалить привязку системы управления версиями TFS, выполните следующие два шага:
*.vssscc
и *.vspscc
расширения..sln
файл вашего решения в Блокноте, найдите и удалите GlobalSection(TeamFoundationVersionControl)
раздел.Подробнее по ссылке Ссылка
Отредактируйте файл решения и удалите из него следующий раздел. Это будет не то же самое, но будет похоже.
Примечание . Чтобы отредактировать файл решения, перейдите в папку проекта, затем откройте YouSolutionName.sln
файл с помощью блокнота.
GlobalSection(TeamFoundationVersionControl) = preSolution
SccNumberOfProjects = 2
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccTeamFoundationServer = <YourTFSURL>
SccLocalPath0 = .
SccProjectUniqueName1 = .
SccLocalPath1 = .
EndGlobalSection
У меня недостаточно репутации для комментариев, но я просто хотел добавить, что решение Табиша действительно работает правильно, чтобы полностью удалить решение из системы управления версиями, особенно когда сервер TFS недоступен по той или иной причине (например, вы загрузили проект, который автор не удалил из своей системы управления версиями перед загрузкой).
Однако, чтобы полностью удалить все следы управления версиями из проекта и избежать предупреждений, отмеченных в других комментариях к этому ответу (например, «Не удалось найти сопоставления для решения ...»), вы также должны удалить следующие строки из каждого файла проекта в решении (по-видимому, они были в файле решения в более ранних версиях VS, но в VS2017 они находятся в файле проекта для каждого проекта в решении - например, [project] .csproj):
SccProjectName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SccAuxPath = "x"
SccLocalPath = "xxx"
SccProvider = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Благодаря отмеченному ответу и другим комментариям здесь за указание на это:
Visual Source Safe - как удалить привязки из решения без открытия в Visual Studio
Объединение этого с ответом Табиша кажется наиболее полным методом ручного удаления решения из системы контроля версий.
Чтобы удалить привязку, вы можете использовать Visual Studio: Меню File / Source Control / Advanced / Change Source Control.
Вы также можете сделать это самостоятельно, удалив любой SCC ... из sln и csproj.
Если вы часто экспортируете исходные файлы, вы можете использовать ExportSrc . У него есть много опций, таких как удаление привязки TFS (по умолчанию включено).
Большинство ответов предоставили решение, но я бы предпочел использовать решение, предоставленное Visual Studio 2017.
В строке меню Visual Studio перейдите в раздел «Команда» и выберите « Отключиться от 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) {
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"
}
}
}