从解决方案中删除TFS连接


82

如何在不映射到TFS的情况下使解决方案成为干净副本?问题是当我尝试打开该消息时会显示该消息。我想在没有TFS连接的情况下正常打开它。

在此处输入图片说明

Answers:


50

如果要永久和完全从源代码管理中分离解决方案,请尝试以下操作:

  1. 单击“否”按钮以避免连接到TFS。
  2. 在文件菜单中,转到源代码管理选项并清除绑定。您将特别需要File-Source Control-Advanced-Change Source Control ...
  3. 保存解决方案。

下次打开解决方案时,不会提示您连接到TFS。


1
以我为例,有必要使用VS2013将TFS与VS2010解决方案分离。
bvj

我必须在Chrome中重新启用Javascript(为测试而关闭)才能显示此选项。公平地说,MSVC确实在TFS登录屏幕上提到了闪烁警告消息。
安东尼

这不能正常工作,因为它不会删除绑定文件,因此以后很难重新连接到源代码管理。
卢克斯

就我而言,对于两个条目,“断开连接”按钮被禁用。
B. Clay Shannon

1
在VS2017中,此操作无效,下次打开解决方案时,您将不得不再次选择“不要联系tfs”和“确定”,然后显示以下错误消息。
杰拉德(Gerard)

192

要完全删除TFS源代码管理绑定,请执行以下两个步骤:

  1. 转到解决方案的文件夹,找到并删除所有文件 *.vssscc*.vspscc扩展名的。
  2. .sln在记事本中打开解决方案的文件,然后找到并删除GlobalSection(TeamFoundationVersionControl)部分。

有关参考链接的更多详细信息


也为我解决了。我想您不能仅从Visual Studio中完全提取TFS。
鲁迪·斯科金斯

3
这对我有用,除了Team Foundation输出仍然说:“找不到解决方案的映射。找不到解决方案的映射。由于服务器不可用,活动的解决方案已暂时与源代码控制断开连接。尝试重新连接到源代码管理,请在服务器可用时关闭该解决方案,然后重新打开该解决方案。如果要将此解决方案连接到另一台服务器,请使用“更改源代码管理”对话框。
EngineerWithJava54321

2
这对我有用。我按照“参考链接”上的说明进行操作。
雷石

所有* .vs *文件均表示解决方案项目文件夹。
ourmandave

42

编辑解决方案文件,然后从其中删除以下部分。不会一样,但是会相似。

注意:要编辑解决方案文件,请转到项目文件夹,然后YouSolutionName.sln使用记事本打开文件。

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

19

我没有足够的信誉来发表评论,但是我想补充一点,Tabish的解决方案实际上可以正常工作,以将其从源代码管理中完全删除,尤其是在由于某种原因而无法访问TFS服务器时(例如,您下载了一个上传之前作者没有从自己的源代码管理中删除的项目)。

但是,要从项目中完全删除所有源代码控制痕迹,并避免对该答案的其他注释中提到的警告(例如,“找不到解决方案的映射...”),还必须删除该警告。解决方案中每个项目文件的以下行(显然,这些行以前在VS的早期版本中位于解决方案文件中,但在VS2017中,可以在解决方案中每个项目的项目文件中找到它们-例如[project] .csproj):

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

感谢标记的答案和此处的其他评论指出这一点:

Visual Source Safe-如何从Visual Studio中不打开解决方案的解决方案中删除绑定

将此与Tabish的答案结合起来似乎是从源代码管理中手动删除解决方案的最完整方法。


8
  • 要删除绑定,可以使用Visual Studio:菜单文件/源代码管理/高级/更改源代码管理。

  • 您也可以自己删除sln和csproj中的SCC...。

  • 如果您经常导出源文件,则可以使用ExportSrc。它具有许多选项,例如删除TFS绑定(默认情况下为ON)。


4

大多数答案都提供了解决方案,但我宁愿使用Visual Studio 2017提供的解决方案。

在Visual Studio的菜单栏上,转到“团队”,然后选择“从Team Foundation Server断开连接”。而已。


2
它只会关闭您的解决方案..?
jan4co

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) {
        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"
        }
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.