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에서는 솔루션의 각 프로젝트에 대한 프로젝트 파일 (예 : [project] .csproj))에서 찾을 수 있습니다.
SccProjectName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SccAuxPath = "x"
SccLocalPath = "xxx"
SccProvider = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
여기에 표시된 답변과 다른 의견에 감사드립니다.
Visual Source Safe-Visual Studio에서 열기없이 솔루션에서 바인딩을 제거하는 방법
이것을 Tabish의 답변과 결합하는 것이 소스 제어에서 솔루션을 수동으로 제거하는 가장 완벽한 방법 인 것 같습니다.
대부분의 답변은 솔루션을 제공했지만 Visual Studio 2017에서 제공하는 솔루션을 사용하고 싶습니다.
Visual Studio의 메뉴 모음에서 Team으로 이동하고 Team Foundation Server 에서 연결 끊기를 선택합니다. 합니다. 그게 다야.
저는 M & A 인수 및 기술 이전에 이어 TeamFoundation 프로젝트 컬렉션을 상속 받았습니다. 30 개 이상의 솔루션과 * .vssscc 및 * .vspscc 파일이 너무 많았습니다.
위의 모든 사람의 입력을 기반으로 지정된 루트 폴더를 반복하고 파일을 삭제 한 다음 솔루션 파일을 편집하여 TeamFoundationVersionControl 섹션을 제거하는 PowerShell 함수를 작성했습니다.
사용법은 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"
}
}
}