如何在不映射到TFS的情况下将解决方案作为干净副本?问题是,当我尝试打开它时,此消息显示。我想在没有TFS连接的情况下正常打开它。
答案 0 :(得分:142)
要完全删除TFS源代码控制绑定,请执行以下两个步骤:
*.vssscc
和*.vspscc
扩展名的文件。.sln
文件,然后找到&删除GlobalSection(TeamFoundationVersionControl)
部分。答案 1 :(得分:37)
如果要永久完全从源代码管理中分离解决方案,请尝试以下操作:
下次打开解决方案时,系统不会提示您连接到TFS。
答案 2 :(得分:32)
编辑解决方案文件并从中删除以下部分。它不会是相同的,但会是相似的。
GlobalSection(TeamFoundationVersionControl) = preSolution
SccNumberOfProjects = 2
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccTeamFoundationServer = <YourTFSURL>
SccLocalPath0 = .
SccProjectUniqueName1 = .
SccLocalPath1 = .
EndGlobalSection
答案 3 :(得分:14)
我没有足够的声誉来评论,但只是想补充一点,Tabish的解决方案确实可以正常工作以完全从源代码控制中删除解决方案,尤其是当TFS服务器因某种原因无法访问时(例如您下载了一个项目,作者在上传之前没有从他们自己的源代码控制中删除。)
但是,要从项目中完全删除所有源代码控制的痕迹,并避免在该答案的其他注释中记录的警告(例如“无法找到解决方案的映射......”),您必须还从解决方案中的每个项目文件中删除以下行(显然这些行曾经在VS的早期版本的解决方案文件中,但在VS2017中,它们可以在项目文件中找到解决方案 - 例如[project] .csproj):
SccProjectName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SccAuxPath = "x"
SccLocalPath = "xxx"
SccProvider = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
感谢这里有明确的答案和其他评论,指出了这一点:
visual source safe - how to remove bindings from solution w/o opening in visual studio
将此与Tabish的答案相结合似乎是从源代码管理中手动删除解决方案的最完整方法。
答案 4 :(得分:8)
要删除绑定,您可以使用Visual Studio:菜单文件/源代码管理/高级/更改源代码管理。
您也可以通过从sln和csproj中移除任何SCC来自行完成。
如果您经常导出源文件,则可以使用ExportSrc。它有许多选项,例如删除TFS绑定(默认为ON)。
答案 5 :(得分:3)
大多数答案都提供了解决方案,但我宁愿使用Visual Studio 2017提供的解决方案。
在Visual Studio的菜单栏上,转到团队,然后选择从Team Foundation Server断开连接。 就是这样。
答案 6 :(得分: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) {
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"
}
}
}