Warum Warum WARUM erhalten TFS nicht immer die neueste Arbeit?
Sie hätten gedacht, dass diese Funktion gründlich getestet worden wäre.
Was ich tun muss, ist, eine bestimmte Version zu erhalten und dann beide überschreibbaren beschreibbaren Dateien zu überprüfen + alle Dateien zu überschreiben.
Ist mein lokales Setup durcheinander oder machst du das auch?
Antworten:
TFS hat neu definiert, was "Get Latest" macht. In TFS-Begriffen bedeutet "Neueste abrufen", dass die neueste Version der Dateien abgerufen wird. Ignorieren Sie jedoch diejenigen, von denen der Server glaubt, dass sie sich bereits in Ihrem Arbeitsbereich befinden. Was für mich und fast alle anderen auf dem Planeten falsch ist.
Siehe diesen Link: http://blogs.microsoft.co.il/blogs/srlteam/archive/2009/04/13/how-get-latest-version-really-works.aspx
Die einzige Möglichkeit, das Ziel zu erreichen, besteht darin, eine bestimmte Version abzurufen und dann beide Kontrollkästchen "Überschreiben ..." zu aktivieren.
quelle
Manchmal erhalten Sie nicht einmal die neueste Datei, wenn Sie
Get specific version
beide Kontrollkästchen aktivieren . Sie haben wahrscheinlich eine Änderung an einer Datei vorgenommen und möchten diese Änderungen rückgängig machen, indem Sie die neueste Version erneut abrufen. Nun ... das ist wasUndo pending changes
und nicht der Zweck vonGet specific version
.Wenn im Zweifel:
Und das ist mein Favorit, den ich gerade entdeckt habe:
Halten Sie im
Output
Fenster Ausschau nach Nachrichten wie diesen:Warnung - R: \ TFS-PROJECTS \ www.example.com \ ExampleMVC \ Example MVC \ Example MVC.csproj kann nicht aktualisiert werden, da eine Bearbeitung aussteht.
Diese kritische Meldung wird im Ausgabefenster angezeigt. Keine weiteren Benachrichtigungen! Nichts in ausstehenden Änderungen und keine andere Dialogmeldung, die Sie darüber informiert, dass die gerade angeforderte Datei nicht abgerufen wurde! Und ja - Sie lösen dieses Problem, indem Sie einfach
Undo pending changes
die Datei ausführen und abrufen.quelle
Undo pending changes
) hat bei mir funktioniert.TFS tut dies wie einige andere Versionsverwaltungsanbieter wie Perforce, da das System weiß, welche Version Sie zuletzt erfolgreich erhalten haben. Die neuesten Versionen werden also zu "Änderungen seit x abrufen". Wenn Sie sich an die Regeln halten und die Dinge tatsächlich überprüfen, bevor Sie sie bearbeiten, verwirren Sie die Dinge nicht, und "Get Recent" macht wirklich das, was es sagt.
Wie Sie gesehen haben, können Sie es zwingen, alles neu zu bewerten, was eine viel größere Bandbreitennutzung hat, sich aber näher verhält als früher bei SourceSafe.
quelle
Es ist schwierig, auf eine Anweisung ohne Beispiele zu antworten, wie sie nicht funktioniert, aber es ist wichtig zu verstehen, dass TFVC (im Modus "Server Workspace", der vor TFS 2012 der Mechanismus war) den Status Ihres lokalen Dateisystems nicht untersucht . TFVC-Server-Arbeitsbereiche sind Systeme vom Typ "Auschecken, Bearbeiten, Einchecken", bei denen dies beabsichtigt ist. Dies ist eine absichtliche Entscheidung, um die Menge an Datei-E / A, die zur Bestimmung des Status Ihres Arbeitsbereichs erforderlich ist, massiv zu reduzieren. Stattdessen werden die Arbeitsbereichsinformationen auf dem Server gespeichert.
Dadurch können TFVC Server-Arbeitsbereiche auf sehr skaliert werden sehr effizient große Codebasen werden. Wenn Sie sich in einer Multi-Gigabyte-Codebasis befinden (wie Visual Studio oder der Windows-Quellbaum), muss Ihr Client Ihr lokales Dateisystem nicht scannen und nach Dateien suchen, die sich möglicherweise geändert haben, da Sie mit TFS einen Vertrag haben wird eine Datei explizit auschecken, wenn Sie sie bearbeiten möchten.
Sie erwarten nicht , eine Datei als schreibgeschützt markiert und ändern , ohne es zunächst explizit heraus zu überprüfen. Wenn Sie diesen Weg gehen, weiß der Server nicht, dass Sie Änderungen an Ihrer Datei vorgenommen haben, und durch Ausführen eines Vorgangs "Neueste abrufen" wird Ihr lokaler Arbeitsbereich nicht aktualisiert, da Sie dem Server nicht mitgeteilt haben, dass Sie Änderungen vorgenommen haben Änderungen.
Wenn Sie tun , diesen Mechanismus unterlaufen , dann können Sie das verwenden
tfpt reconcile
Befehl Ihren lokalen Arbeitsbereich für Änderungen zu prüfen , dass Sie vor Ort gemacht haben.Wenn Sie "Spezifische Version abrufen" verwenden und die Optionen "Erzwingen" und "Überschreiben" auswählen, ist es sehr wahrscheinlich, dass Sie die Gewohnheit haben, alle von TFS implementierten Durchsetzungsmaßnahmen zu umgehen, um zu verhindern, dass Sie sich selbst verletzen. und Sie sollten wahrscheinlich lokale TFVC-Arbeitsbereiche in Betracht ziehen.
TFVC Local Workspaces bieten ein Versionskontrollsystem vom Typ "Edit-Merge-Commit". Dies bedeutet, dass Sie Dateien vor dem Bearbeiten nicht explizit auschecken müssen und sie nicht schreibgeschützt auf der Festplatte sind. Stattdessen müssen Sie lediglich die Datei bearbeiten, und Ihr Client scannt das Dateisystem, bemerkt die Änderung und präsentiert sie als ausstehende Änderung.
TFVC Local Workspaces werden für kleine Projekte empfohlen, für die keine differenzierte Berechtigungssteuerung erforderlich ist, da sie einen wesentlich besseren Workflow bieten. Sie müssen nicht online sein und müssen Dateien nicht explizit auschecken, bevor Sie sie bearbeiten.
Lokale TFVC-Arbeitsbereiche sind die Standardeinstellungen in TFS 2012. Wenn sie für Sie nicht aktiviert sind, sollten Sie Ihren Serveradministrator fragen. (Organisationen mit sehr großen Codebasen oder strengen Prüfanforderungen können TFVC Local Workspaces deaktivieren.)
Eric Sinks ausgezeichnetes Buch " Versionskontrolle anhand eines Beispiels" beschreibt die Unterschiede zwischen Checkout-Edit-Check-In- und Edit-Merge-Commit-Systemen und wann eines geeigneter ist als das andere.
Das Professional Team Foundation Server 2013- Buch enthält außerdem hervorragende Informationen zu den Unterschieden zwischen TFVC Server-Arbeitsbereichen und lokalen TFVC-Arbeitsbereichen. Die MSDN-Dokumentation und die Blogs enthalten außerdem detaillierte Informationen:
quelle
Team Foundation Server (TFS) verfolgt seine lokale Kopie in einem versteckten Verzeichnis namens $ TF. Wenn Sie die "Neueste Version abrufen" ausgeben, überprüft TFS diesen Ordner und stellt fest, ob ich die neueste Kopie habe oder nicht. In diesem Fall wird die neueste Kopie nicht heruntergeladen. Es spielt keine Rolle, ob Sie die Originaldatei haben oder nicht. Möglicherweise haben Sie sogar den gesamten Ordner gelöscht (wie in meinem Fall), und TFS ruft nicht die neueste Kopie ab, da nicht die eigentliche Datei, sondern das versteckte Verzeichnis, in dem Änderungen aufgezeichnet werden, angezeigt wird. Der Fehler bei diesem Design ist, dass alles, was außerhalb des Systems ausgeführt wird, nicht in TFS aufgezeichnet wird. Sie können beispielsweise in den Windows Explorer gehen, einen Ordner oder eine Datei löschen und TFS erkennt sie nicht. Es wird total blind sein. Zumindest würde ich dort erwarten, dass Windows Sie diese Datei nicht löschen lässt, aber es tut!
Eine Möglichkeit, die neueste Kopie zu erzwingen, besteht darin, den versteckten $ TF-Ordner manuell zu löschen. Gehen Sie dazu zur Eingabeaufforderung und navigieren Sie zu dem Stammordner, in dem Ihr Projekt ausgecheckt wurde, und geben Sie diesen Befehl aus
Wenn Sie nur den versteckten Ordner überprüfen möchten, können Sie dies mit tun
Hinweis: Wenn Sie dies tun, wird der tf denken, dass Sie keine lokale Kopie haben, obwohl Sie sie in Dateien haben, und alles wird erneut synchronisiert.
Achtung: Verwenden Sie diese Methode auf eigenes Risiko. Bitte verwenden Sie es nicht bei kritischen Arbeiten.
quelle
"Neueste Version abrufen" lädt standardmäßig nur die Dateien herunter, die sich seit dem letzten Ausführen von "Neueste Version abrufen" auf dem Server geändert haben. TFS verfolgt die von Ihnen heruntergeladenen Dateien, sodass es keine Zeit damit verbringt, dieselbe Version der Dateien erneut herunterzuladen. Wenn Sie die Dateien außerhalb von Visual Studio ändern, kann dies zu Konsistenzproblemen führen, die anscheinend angezeigt werden.
quelle
Leider muss es in TFS 2008 einen oder mehrere Fehler geben, da dieses Problem regelmäßig auf Entwicklercomputern auftritt und Server erstellt, auf denen ich auch arbeite.
Ich kann Get Latest ausführen. In der Verlaufsliste des Projekts kann ich sehen, dass nach dem letzten Get Latest-Vorgang Commits durchgeführt wurden. Ich habe die Dateien auf der Festplatte in keiner Weise berührt, sondern nach der Funktion "Get Latest" Abgeschlossen, wenn ich die Registerkarte TFS überprüfe, sagen einige der Dateien immer noch, dass sie nicht die neueste Version sind.
Offensichtlich kann TFS feststellen, dass ich lokal alte Dateien habe, da dies in der Liste angegeben ist. Get Latest tut dies jedoch nicht. Holen Sie sich die neueste Version. Wenn ich das tue, was Sie getan haben, verwenden Sie die Version "Spezifisch abrufen" und aktivieren Sie die beiden Kontrollkästchen am unteren Rand des Dialogfelds. Anschließend werden die Dateien abgerufen.
Wir haben unsere Build-Server so geändert, dass stattdessen immer der Funktionstyp Get Specific version verwendet wird. Daher funktioniert dieser Teil jetzt. Da unser Build-Server (TeamCity) jedoch auch darauf angewiesen ist, zu überprüfen, ob Änderungen an den Dateien vorgenommen wurden, um einen Build zu starten Manchmal verfällt es in den Modus "Nichts geändert, hier nichts zu sehen, weiterzumachen" und es wird nichts unternommen, bis wir die Build-Konfiguration zwangsweise ausführen.
Beachten Sie, dass dieses Problem auf einem Computer aufgetreten ist, der nie berührt wird, mit Ausnahme des neuesten Builds, beide manuell, sodass die Dateien nicht manipuliert werden. Es ist nur TFS, das verwirrt wird.
Einmal, als dies auftauchte, stellte ich sicher, dass die Dateien auf der Festplatte tatsächlich binär identisch mit der zuvor abgerufenen Version waren, sodass keine manuellen Manipulationen an den Dateien vorgenommen wurden.
Außerdem kann ich nicht erkennen, wie TFS "wissen" kann, ob sich Dateien auf der Festplatte geändert haben oder nicht, ohne den Inhalt tatsächlich zu betrachten. Wenn ein Teil von TFS erkennen kann, dass die Dateien tatsächlich nicht die neueste Version sind, sollte die Version "Neueste Version" unbedingt die neueste Version erhalten können. Dies in Bezug auf Kommentare zu anderen Antworten hier.
quelle
Dies kann daran liegen, dass Sie TFS als denselben Benutzer anmelden und der Name des Arbeitsbereichs (standardmäßig basierend auf dem Computernamen) ebenfalls derselbe ist. TFS geht also davon aus, dass Sie sich auf demselben Computer und demselben Arbeitsbereich befinden, sodass Sie bereits über die neueste Version von verfügen die Dateien, so dass es sie nicht für Sie bekommt.
Versuchen Sie, Ihren Computer umzubenennen, und erstellen Sie einen neuen Arbeitsbereich als neuen Computer.
quelle
Ich hatte das gleiche Problem mit Visual Studio 2012. Unabhängig davon, was ich getan habe, wurde der Code nicht von der TFS-Quellcodeverwaltung abgerufen.
In meinem Fall war die Ursache, dass ein Ordner + Unterordner von der Quellcodeverwaltung separat, aber demselben Baum in meiner lokalen Festplatte zugeordnet wurde.
Die Lösung bestand darin, die Unterordnerzuordnung mithilfe des Fensters "Arbeitsbereiche verwalten" zu entfernen.
quelle
Die meisten Probleme, die ich bei Entwicklern gesehen habe, die sich darüber beschwert haben, dass Get Latest nicht das tut, was sie erwarten, sind darauf zurückzuführen, dass sie ein Get Latest vom Projektmappen-Explorer und nicht vom Quellcodeverwaltungs-Explorer ausführen. Der Projektmappen-Explorer ruft nur die Dateien ab, die Teil der Lösung sind, und ignoriert alle Elemente, die möglicherweise von Dateien innerhalb der Lösung und damit Teil der Quellcodeverwaltung benötigt werden, während der Quellcodeverwaltungs-Explorer Ihren lokalen Arbeitsbereich mit dem Repository auf dem Server vergleicht, um festzustellen, welche Dateien vorhanden sind wird gebraucht.
quelle
Wenn ich auf dieses Problem stoße, weil es nicht auf dem neuesten Stand ist und die Version nicht übereinstimmt, setze ich zuerst eine "Get Specific Version" (Spezifische Version abrufen), setze es auf "Changeset" und füge 1 ein. Dadurch werden alle Dateien aus Ihrem lokalen Arbeitsbereich entfernt (für dieses Projekt, Ordner, Datei usw.) und es wird auch ein TFS-Update geben, damit es weiß, dass Sie jetzt KEINE VERSION HERUNTERGELADEN haben. Sie können dann ein "Get Latest" und eine Bratsche machen, Sie werden tatsächlich die neueste haben
quelle
Dies kann passieren, wenn Sie TFS von zwei verschiedenen Computern mit demselben Konto verwenden. Wenn dies der Fall ist, sollten Sie vergleichen, um geänderte Dateien anzuzeigen und sie auszuchecken. Dann erhalten Sie die neuesten Informationen und machen ausstehende Änderungen rückgängig, um das Auschecken zu entfernen
quelle
Dies funktionierte für mich:
1. Beenden Sie Visual Studio.
2. Öffnen Sie ein Befehlsfenster und navigieren Sie zum Ordner: "% localappdata% \ Local \ Microsoft \ Team Foundation \".
3. Navigieren Sie zu den Unterordnern für jede Version und löschen Sie den Unterordner "Cache" und sein Inhalt
4. Starten Sie Visual Studio neu und stellen Sie eine Verbindung zu TFS her.
5. Testen Sie die neueste Version.
quelle
Ich möchte nur TFS hinzufügen. MSBuild unterstützt keine Sonderzeichen in Ordnern, dh "@".
Ich hatte in der Vergangenheit erlebt, dass einer unserer Projektordner External @ Project1 heißt
Wir haben eine TFS-Build-Definition erstellt, um eine benutzerdefinierte msbuild-Datei auszuführen. Dann erhält der Arbeitsbereichsordner während des Arbeitsbereichs-Abrufs keinen Inhalt im Ordner External @ Project1. Es scheint, dass tfs get fehlschlägt, aber keinen Fehler anzeigt.
Nach einigem Ausprobieren und Umbenennen des Ordners in _Project1. voila wir haben Dateien auf dem Ordner (_Project1).
quelle
Werkzeug: TFS-Elektrowerkzeuge
Quelle: http://dennymichael.net/2013/03/19/tfs-scorch/
Befehl: tfpt scorch / recursive / deletes C: \ LocationOfWorkspaceOrFolder
Daraufhin wird ein Dialogfeld angezeigt, in dem Sie aufgefordert werden, eine Liste von Dateien zu löschen oder herunterzuladen. Wählen Sie die Dateien entsprechend aus oder deaktivieren Sie sie und drücken Sie OK. Darstellung im Raster (CheckBox, FileName, FileAction, FilePath)
Ursache: TFS wird nur mit Elementen im Arbeitsbereich verglichen. Wenn Änderungen außerhalb des Arbeitsbereichs vorgenommen wurden, sind sie TFS nicht bekannt.
Hoffentlich findet das jemand nützlich. Ich habe diesen Beitrag gefunden, nachdem ich eine Handvoll Ordner an verschiedenen Orten gelöscht habe. Wenn ich mich nicht daran erinnere, welche Ordner ich gelöscht habe, wurde die übliche Option zum Abrufen / Ersetzen erzwingen ausgeschlossen, die ich verwendet hätte.
quelle
In meinem Fall funktionierte es nicht, eine bestimmte Version abzurufen, selbst wenn beide Kontrollkästchen aktiviert und alle ausstehenden Änderungen rückgängig gemacht wurden.
Überprüfte die Arbeitsbereiche. Bearbeiten Sie den aktuellen Arbeitsbereich. Überprüfen Sie alle Pfade. Der Lösungspfad war falsch und zeigte auf einen gelöschten Ordner.
Der Pfad wurde korrigiert und die neuesten Funktionen wurden ordnungsgemäß ausgeführt.
quelle
Klicken Sie mit der rechten Maustaste: Erweitert> Bestimmte Version abrufen . Wählen Sie "Letest Version" und markieren Sie jetzt zwei wichtige Punkte:
Die Überprüfungen sind:
Überschreiben Sie beschreibbare Dateien, die nicht überprüft werden
Überschreiben Sie alle Dateien, auch wenn die lokale Version mit der angegebenen Version übereinstimmt
quelle