Erläuterungen zu Label-Einschränkungen

8

Ein Blog gibt an

  

Etiketten kommen allerdings mit einer großen Warnung - Etiketten selbst nicht   Version kontrolliert, was bedeutet, dass es keine Möglichkeit gibt, die   Geschichte der Aktivität auf einem Etikett. Plus, Etiketten halten keine Kopien davon   Versionen im Falle einer Dateilöschung, also wenn eine Datei gelöscht wird, alle   Label, das auf einer Version dieser Datei beruht, ist im Wesentlichen abgesprengt.

Dies ist nicht der einzige Ort, an dem ich ähnliche Informationen zu TFS-Etiketten gelesen habe. Der Mangel an Geschichte ist klar genug. Der zweite Teil "Etiketten halten keine Kopien von Versionen ..." ist unklar. In der Tat habe ich ein Testprojekt erstellt & gt; beschriftet es & gt; löschte eine Datei & gt; führte eine Get by Label aus und die Datei kam zurück. Worauf bezieht sich das? Hat sich die Etikettenfunktionalität in TFS geändert, wie vor kurzem?

Ich verstehe, dass eine Dateilöschung die Geschichte nicht wirklich entfernt, ist das die Ursache? Mit anderen Worten, wenn ich

starte
  

tf zerstöre "$ / MyTeamProject / Project / FileName.cs"

Bedeutet das, eine Datei zu löschen? Wenn dem so ist, scheint das ein außergewöhnlicher Umstand zu sein, den man überhaupt in Betracht ziehen sollte. Ich meine, es ist eine absichtliche, nicht wiederherstellbare Löschung der Geschichte. Changesets werden in einem solchen Fall keine Verbesserung gegenüber Labels darstellen.

    
P.Brian.Mackey 30.03.2012, 17:25
quelle

3 Antworten

2

Wenn wir ein Label anwenden, tun wir dies zu einem Zeitpunkt in einer Version der Quellcodeverwaltung. Intuitiv, weil wir anfänglich einen Snapshot der Quellcodeverwaltung zu einem Zeitpunkt erstellt haben, kann man annehmen, dass der Snapshot den Quellcode zu einem bestimmten Zeitpunkt darstellt.

Das ist falsch. Labels können nach der Erstellung bearbeitet werden.

Konzeptionell definiert ein Label ein Produkt und die Bugfixes des Produkts ( Quelle) ). Ein Beispiel aus der realen Welt kann helfen. Nehmen wir an, wir haben ein Produkt namens AlphaBoogerBear. AlphaBoogerBear ist ein Produkt, keine Version (denke vor Windows-Namen). AlphaBoogerBear kann zu einem Label, AlphaBoogerBearLabel, gemacht werden. Wir führen eine Veröffentlichung von AlphaBoogerBear durch. Es gibt einige Fehler. Wir reparieren sie.

Nun gehen wir zurück und bearbeiten AlphaBoogerBearLabel, um die Bugfixes hinzuzufügen. Das Label repräsentiert zu einem bestimmten Zeitpunkt keine Momentaufnahme mehr. Stattdessen stellt es die stabilste Version von AlphaBoogerBear dar.

Schließlich gehen wir zu BetaBoogerBear. Wir haben die Möglichkeit, zurückzugehen und ein Etikett zu nehmen, das das alte Produkt in seiner besten Version rechtzeitig darstellt.

Meiner Meinung nach ist es besser, wenn man eine Momentaufnahme der Version der Quellcodeverwaltung benötigt, zu verzweigen. Wenn Sie einen bearbeitbaren Snapshot benötigen, der eine Produktversion darstellt, ist ein Label nützlich. Trotzdem scheint es eine schwierige Balance zwischen Vertrauen und Bequemlichkeit zu sein.

Was die Absichten des Autors angeht, kann ich es nicht mit Sicherheit sagen. Er könnte sagen, dass Artikel von einem Etikett gelöscht werden können, und wenn Sie also nach Etikett suchen, ist der Artikel verschwunden. Obwohl das Element immer noch im TFS-Verlauf gespeichert ist, ist es nicht verwirrend, obwohl es eine verwirrende Situation ist.

    
P.Brian.Mackey 30.03.2012, 21:42
quelle
1

Ich bin mir nicht sicher, was mit dem Satz gemeint ist, dass Labels von Dateilöschungen betroffen sind. Aber Sie haben es richtig gemacht, ein normales Löschen von Dateien wirkt sich nicht auf Etiketten aus, aber ein Zerstören wird.

Was Sie davor warnt, nicht versionsgesteuert zu sein, ist, dass jemand kommen kann, um ein Label zu bearbeiten, indem er Dateien vom Label einbindet oder ausschließt oder die Versionen von Dateien ändert, die im Label enthalten sind. Und es wird keine Geschichte dieser Änderungen an der Etikettendefinition geben.

    
Dylan Smith 30.03.2012 20:28
quelle
0

Wie ich es verstehe, ist ein Label in TFS im Grunde eine Menge / Sammlung von Changesets .

Nehmen wir an, Sie benennen ein Verzeichnis mit zwei Dateien darin. Das Label würde dann aus drei Änderungsmengen bestehen: eine für das Verzeichnis und eine für jede Datei. Das Löschen einer dieser Dateien in TFS führt zu einem neuen Changeset für das Verzeichnis. Wenn Sie also zu diesem Zeitpunkt Get by Label auswählen, wird die gelöschte Datei zurückgeliefert, da sie vor dem Löschen den Änderungssatz enthält. Zerstören eine Datei würde es aus allen Änderungssatz-Datensätzen entfernen, in denen es aufgetreten ist, und so auch die Informationen in der Bezeichnung zerstören.

Da das Label nur durch seinen Namen identifiziert wird, ist es auch sehr einfach, es mit einem neuen Label zu überschreiben, wodurch die alten Informationen zerstört werden. Der /child -Parameter zu diesem Befehl kann dieses Verhalten etwas ändern: Die Verwendung von /child:merge behält die Änderungssätze, die zuvor zusammen mit dem neuen Datensatz aufgezeichnet wurden, /child:replace wird den alten Änderungssatz durch den neuen ersetzen. Im obigen Beispiel würde keine dieser Alternativen einen Unterschied machen, da Get by Label immer noch den höchsten Änderungssatz abrufen würde.

    
Torbjörn Bergstedt 01.04.2012 20:36
quelle

Tags und Links