Jak stworzyć rozwiązanie jako czystą kopię bez mapowania na TFS? Problem polega na tym, że ten komunikat pojawia się, gdy próbuję go otworzyć. Chcę otworzyć go jak zwykle bez połączenia TFS.
Odpowiedzi:
Jeśli chcesz trwale i całkowicie odłączyć rozwiązanie od kontroli źródła, wypróbuj następujące rozwiązania:
Następnym razem, gdy otworzysz rozwiązanie, nie zostanie wyświetlony monit o połączenie z TFS.
Aby całkowicie usunąć powiązanie kontroli źródła TFS, wykonaj następujące dwa kroki:
*.vssscc
i *.vspscc
..sln
plik rozwiązania w Notatniku, znajdź i usuń GlobalSection(TeamFoundationVersionControl)
sekcję.Więcej szczegółów na temat odniesienia link
Edytuj plik rozwiązania i usuń z niego następującą sekcję. To nie będzie to samo, ale będzie podobne.
Uwaga : aby edytować plik rozwiązania, przejdź do folderu projektu, a następnie otwórz YouSolutionName.sln
plik w notatniku.
GlobalSection(TeamFoundationVersionControl) = preSolution
SccNumberOfProjects = 2
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
SccTeamFoundationServer = <YourTFSURL>
SccLocalPath0 = .
SccProjectUniqueName1 = .
SccLocalPath1 = .
EndGlobalSection
Nie mam wystarczającej reputacji, aby komentować, ale chciałem tylko dodać, że rozwiązanie Tabish w rzeczywistości działa poprawnie, całkowicie usuwając rozwiązanie z kontroli źródła, zwłaszcza gdy serwer TFS jest nieosiągalny z tego czy innego powodu (np. Pobrałeś plik projekt, którego autor nie usunął z własnej kontroli źródła przed przesłaniem).
Aby jednak całkowicie usunąć wszystkie ślady kontroli źródła z projektu i uniknąć ostrzeżeń, które są odnotowane w innych komentarzach do tej odpowiedzi (np. „Nie można znaleźć mapowań rozwiązania ...”), należy również usunąć następujące wiersze z każdego pliku projektu w rozwiązaniu (najwyraźniej znajdowały się one w pliku rozwiązania we wcześniejszych wersjach VS, ale w VS2017 znajdują się w pliku projektu dla każdego projektu w rozwiązaniu - np. [projekt] .csproj):
SccProjectName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
SccAuxPath = "x"
SccLocalPath = "xxx"
SccProvider = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Dzięki zaznaczonej odpowiedzi i innym komentarzom za zwrócenie na to uwagi:
Visual Source Safe - jak usunąć wiązania z rozwiązania bez otwierania w Visual Studio
Połączenie tego z odpowiedzią Tabish wydaje się być najbardziej kompletną metodą ręcznego usuwania rozwiązania z kontroli źródła.
Aby usunąć powiązanie, możesz użyć programu Visual Studio: menu Plik / Kontrola źródła / Zaawansowane / Zmień kontrolę źródła.
Możesz także zrobić to samodzielnie, usuwając dowolny SCC ... ze sln i csproj.
Jeśli często eksportujesz pliki źródłowe, możesz użyć ExportSrc . Ma wiele opcji, takich jak usuwanie powiązania TFS (domyślnie włączone).
Większość odpowiedzi zawierało rozwiązanie, ale wolałbym skorzystać z rozwiązania dostarczonego przez Visual Studio 2017.
Na pasku menu programu Visual Studio przejdź do zespołu i wybierz opcję Odłącz od Team Foundation Server . Otóż to.
Właśnie odziedziczyłem kolekcję projektów TeamFoundation po wykupie M&A i transferze technologii. Było około 30 rozwiązań i mnóstwo plików * .vssscc i * .vspscc.
Opierając się na danych wszystkich powyżej, napisałem funkcję PowerShell, aby powtórzyć określony folder główny, usunąć pliki, a następnie edytować pliki rozwiązania, aby usunąć sekcję TeamFoundationVersionControl.
Wykorzystanie jest Remove_TFSfiles "pathname" $booleanflag
.
Aby zobaczyć, które pliki zostaną dotknięte, użyj $false
(używa -whatif):
Remove_TFSfiles "C:\MyDevFolder" $false
Aby faktycznie usunąć te pliki, użyj $true
:
Remove_TFSfiles "C:\MyDevFolder" $true
Oto funkcja:
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"
}
}
}