Wie finde ich heraus, welche CVS-Tags welche Dateien und Pfade abdecken?
-
09-06-2019 - |
Frage
Es gibt ein altes CVS-Repository, das eine große Anzahl von Verzeichnissen, Unterverzeichnissen und Pfaden enthält.Es gibt auch eine große Anzahl von Zweigen und Tags, die nicht unbedingt alle Pfade und Dateien abdecken – normalerweise eine Teilmenge.Wie kann ich herausfinden, welcher Zweig/Tag welche Dateien und Pfade abdeckt?
Das CVS-Protokoll stellt bereits die Liste der Tags pro Datei bereit.Die Aufgabe erfordert, dass ich dies pro Tag in Dateien umwandele.Ich konnte eine solche Funktionalität in der aktuellen WinCVS-Implementierung (CVSNT) nicht finden.Wenn genügend leere Zyklen vorhanden sind, kann ich ein Perl-Skript schreiben, das dies tun würde. Der Algorithmus ist nicht komplex, aber er muss ausgeführt werden.
Ich könnte mir vorstellen, dass es einige Leute gibt, die solche Informationen brauchten und dieses Problem gelöst haben.Daher denke ich, dass es dafür ein leicht verfügbares (Open Source/kostenloses) Tool geben sollte.
Lösung
Um festzustellen, welche Tags für eine bestimmte Datei gelten, verwenden Sie Folgendes:
cvs log <filename>
Dadurch werden alle Versionen der Datei und die auf die Version angewendeten Tags ausgegeben.
Um festzustellen, welche Dateien in einem einzelnen Tag enthalten sind, kann ich mir nur vorstellen, mithilfe des Tags auszuchecken und zu sehen, welche Dateien zurückkommen.Der Befehl dafür ist einer von:
cvs update -r <tagname>
cvs co <modulename> -r <tagname>
cvs export <modulename> -r <tagname>
Andere Tipps
Um Tags in einer Datei aufzulisten, kann man auch Folgendes tun:
cvs status -v <file>
Die oben beschriebene Methode hat bei mir nicht funktioniert
cvs -q rdiff -s -D 2000-01-01 -r yourTagName
Aber nach langem Herumprobieren ist mir das klar geworden
cvs -q rdiff -s -D 2000-01-01 -r yourTagName ModuleName
funktioniert
Sie müssen keinen tatsächlichen Checkout durchführen.Mit der Option -n können Sie dies nur simulieren:
cvs -n co -rTagName ModuleName
Dadurch erhalten Sie die Namen aller mit TagName gekennzeichneten Dateien im Modul ModuleName.
Der folgende Befehl gibt eine Liste der Dateien aus, die sich in diesem Tag „yourTagName“ befinden.Die Dateien sind alle als neu markiert, die Revisionsinformationen in „yourTagName“.
Dieser Befehl macht einen Unterschied zwischen dem 01.01.2000 und Ihrem Tag. Sie können gerne ein anderes Datum verwenden, das früher liegt.
cvs -q rdiff -s -D 2000-01-01 -r yourTagName
Ich kenne kein Tool, das Ihnen helfen kann, aber wenn Sie Ihr eigenes schreiben, kann ich Ihnen einen Kopfzerbrechen ersparen:Verzeichnisse in CVS können nicht mit Tags versehen werden.Nur die darin enthaltenen Dateien verfügen über Tags (und diese bestimmen, was ausgecheckt wird, wenn Sie ein Verzeichnis mit einem bestimmten Tag auschecken).