Xóa kết nối TFS khỏi giải pháp


82

Làm thế nào để tạo giải pháp dưới dạng bản sao sạch mà không cần ánh xạ tới TFS? Vấn đề là thông báo này hiển thị khi tôi đang cố mở nó. Tôi muốn mở nó như bình thường mà không cần kết nối TFS.

nhập mô tả hình ảnh ở đây

Câu trả lời:


50

Nếu bạn muốn tách vĩnh viễn và hoàn toàn giải pháp khỏi kiểm soát nguồn, hãy thử các cách sau:

  1. Nhấp vào nút 'Không' để tránh kết nối với TFS.
  2. Trong menu tệp, chuyển đến tùy chọn điều khiển nguồn và xóa các ràng buộc. Đặc biệt bạn sẽ muốn Kiểm soát Tệp - Nguồn - Nâng cao - Thay đổi Kiểm soát Nguồn ...
  3. Lưu giải pháp.

Lần tới khi mở giải pháp, bạn sẽ không được nhắc kết nối với TFS.


1
Trong trường hợp của tôi, cần phải sử dụng VS2013 để tách TFS khỏi giải pháp VS2010.
bvj

Tôi đã phải bật lại Javascript (đã tắt để thử nghiệm) trong Chrome để hiển thị tùy chọn này. Công bằng mà nói, MSVC đã đề cập đến việc flash một thông báo cảnh báo trên màn hình nhật ký TFS.
Anthony

Điều này không hoạt động đúng cách vì nó không loại bỏ các tệp liên kết, khiến việc kết nối lại với điều khiển nguồn sau này khó khăn.
Lukos

Trong trường hợp của tôi, nút "Ngắt kết nối" bị tắt đối với hai mục nhập.
B. Clay Shannon

1
Trong VS2017, điều này không có hiệu lực, lần sau khi bạn mở giải pháp, bạn sẽ phải chọn 'không liên hệ với tfs' và 'đồng ý' với thông báo lỗi sau đó.
Gerard

192

Để loại bỏ hoàn toàn ràng buộc điều khiển nguồn TFS, hãy làm theo hai bước sau:

  1. Đi tới thư mục của giải pháp của bạn, tìm và xóa tất cả các tệp có *.vssscc*.vspsccphần mở rộng.
  2. Mở .slntệp giải pháp của bạn trong Notepad, tìm và xóa GlobalSection(TeamFoundationVersionControl)phần này.

Thông tin chi tiết về liên kết tham khảo


Giải quyết nó cho tôi là tốt. Tôi đoán bạn không thể trích xuất đầy đủ TFS từ trong Visual Studio một mình.
Rudy Scoggins

3
Điều này có hiệu quả với tôi ngoại trừ đầu ra của Team Foundation vẫn cho biết "Không thể tìm thấy ánh xạ cho giải pháp. Không thể tìm thấy ánh xạ cho giải pháp. Giải pháp đang hoạt động đã tạm thời bị ngắt kết nối khỏi kiểm soát nguồn vì máy chủ không khả dụng. Để cố gắng kết nối lại với điều khiển nguồn, đóng và sau đó mở lại giải pháp khi máy chủ khả dụng. Nếu bạn muốn kết nối giải pháp này với một máy chủ khác, hãy sử dụng hộp thoại Thay đổi Điều khiển Nguồn. "
EngineerWithJava54321

2
Điều này đã làm việc cho tôi. Tôi đã làm theo hướng dẫn trên "liên kết tham khảo".
Lei Shi

Tất cả các tệp * .vs * có nghĩa là các thư mục giải pháp dự án.
ourmandave 23/12/19

42

Chỉnh sửa tệp giải pháp và xóa phần sau khỏi nó. Nó sẽ không giống nhau nhưng sẽ tương tự.

Lưu ý : Để chỉnh sửa tệp giải pháp, hãy chuyển đến thư mục dự án, sau đó mở YouSolutionName.slntệp bằng notepad.

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

19

Tôi không có đủ danh tiếng để nhận xét, nhưng chỉ muốn nói thêm rằng giải pháp của Tabish trên thực tế hoạt động chính xác để xóa hoàn toàn giải pháp khỏi kiểm soát nguồn, đặc biệt là khi máy chủ TFS không thể truy cập được vì lý do này hay lý do khác (ví dụ: bạn đã tải xuống dự án mà tác giả đã không xóa khỏi kiểm soát nguồn của riêng họ trước khi tải lên).

Tuy nhiên, để xóa hoàn toàn tất cả các dấu vết của kiểm soát nguồn khỏi dự án và tránh các cảnh báo được ghi chú trong các nhận xét khác cho câu trả lời đó (ví dụ: "Không thể tìm thấy ánh xạ cho giải pháp ..."), bạn cũng phải xóa các dòng sau từ mọi tệp dự án trong giải pháp (dường như những dòng này từng có trong tệp giải pháp trong các phiên bản VS trước đó, nhưng trong VS2017, chúng được tìm thấy trong tệp dự án cho từng dự án trong giải pháp - ví dụ: [dự án] .csproj):

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

Cảm ơn câu trả lời được đánh dấu và các nhận xét khác ở đây vì đã chỉ ra điều này:

nguồn trực quan an toàn - cách xóa các ràng buộc khỏi giải pháp khi mở trong studio trực quan

Kết hợp điều này với câu trả lời của Tabish dường như là phương pháp hoàn chỉnh nhất để xóa thủ công giải pháp khỏi kiểm soát nguồn.


8
  • Để loại bỏ ràng buộc, bạn có thể sử dụng Visual Studio: Menu File / Source Control / Advanced / Change Source Control.

  • Bạn cũng có thể tự làm điều đó bằng cách xóa mọi SCC ... khỏi sln và csproj.

  • Nếu bạn thường xuyên xuất các tệp nguồn, bạn có thể sử dụng ExportSrc . Nó có nhiều tùy chọn như loại bỏ ràng buộc TFS (ON theo mặc định).


4

Hầu hết các câu trả lời đều cung cấp giải pháp, nhưng tôi muốn sử dụng giải pháp do Visual Studio 2017 cung cấp.

Trên thanh Menu của Visual Studio, đi tới Nhóm và chọn Ngắt kết nối khỏi Máy chủ Team Foundation . Đó là nó.


2
Nó chỉ đóng giải pháp của bạn ..?
jan4co

0

Tôi vừa thừa kế một bộ sưu tập các dự án TeamFoundation sau khi mua lại và chuyển giao công nghệ. Có hơn 30 giải pháp và một lượng lớn các tệp * .vssscc và * .vspscc.

Dựa trên đầu vào của mọi người ở trên, tôi đã viết một hàm PowerShell để đệ quy một thư mục gốc được chỉ định, xóa các tệp, sau đó chỉnh sửa các tệp giải pháp để loại bỏ phần TeamFoundationVersionControl.

Cách sử dụng là Remove_TFSfiles "pathname" $booleanflag.

Để xem những tệp nào sẽ bị ảnh hưởng, hãy sử dụng $false(using -whatif):

Remove_TFSfiles "C:\MyDevFolder" $false

Để thực sự xóa các tệp đó, hãy sử dụng $true:

Remove_TFSfiles "C:\MyDevFolder" $true

Đây là chức năng:

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"
        }
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.