Як зробити рішення як чисту копію без відображення в 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
У мене недостатньо репутації для коментування, але я просто хотів додати, що рішення Tabish насправді працює коректно, щоб повністю видалити рішення з контролю джерела, особливо коли сервер TFS недоступний з тих чи інших причин (наприклад, ви завантажили проект, який автор не видалив із власного контролю джерела перед завантаженням).
Однак, щоб повністю видалити з проекту всі сліди керування джерелами та уникнути застережень, зазначених в інших коментарях до цієї відповіді (наприклад, "Не вдалося знайти відображення рішення ..."), потрібно також видалити наступні рядки з кожного файлу проекту у рішенні (очевидно, вони раніше були у файлі рішення у попередніх версіях VS, але у VS2017 вони знаходяться у файлі проекту для кожного проекту у рішенні - наприклад, [проект] .csproj):
SccProjectName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SccAuxPath = "x"
SccLocalPath = "xxx"
SccProvider = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Дякуємо позначеній відповіді та іншим коментарям за те, що вказуємо на це:
візуальне джерело безпечне - як видалити прив'язки з розчину без відкриття у візуальній студії
Поєднання цього з відповіддю Табіша представляється найбільш повним методом ручного видалення рішення з контролю джерела.
Щоб видалити прив'язку, можна скористатися Visual Studio: Файл меню / Керування джерелом / Додатково / Змінити контроль джерела.
Ви також можете зробити це самостійно, видаливши будь-який 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"
}
}
}