2008-08-26 2 views
8

Es gibt ein veraltetes CVS-Repository, das eine große Anzahl von Verzeichnissen, Unterverzeichnissen und Pfaden enthält. Es gibt auch eine große Anzahl von Verzweigungen und Tags, die nicht notwendigerweise alle Pfade abdecken & Dateien - in der Regel eine Teilmenge. Wie kann ich herausfinden, welche Branch/Tag-Cover, welche Dateien und Pfade?Wie finde ich heraus, welche CVS-Tags welche Dateien und Pfade abdecken?

CVS-Protokoll enthält bereits die Liste der Tags pro Datei. Die Aufgabe erfordert, dass ich dies in Dateien pro Tag umsetze. Ich konnte solche Funktionalität in der aktuellen WinCVS (CVSNT) Implementierung nicht finden. Bei genügend leeren Zyklen kann ich ein Perl-Skript schreiben, das das tun würde, der Algorithmus ist nicht komplex, aber es muss getan werden.

Ich könnte mir vorstellen, dass es einige Leute gibt, die solche Informationen brauchen und dieses Problem gelöst haben. Daher sollte ich ein leicht verfügbares (Open Source/Free) Tool dafür sein.

Antwort

7

Um zu ermitteln, welche Tags auf eine bestimmte Datei Verwendung gelten:

cvs log <filename> 

Dies gibt alle Versionen der Datei und welche Tags wurden auf die Version angewendet.

Um festzustellen, welche Dateien in einem einzelnen Tag enthalten sind, ist das Einzige, was ich mir vorstellen kann, mit dem Tag auszuchecken und zu sehen, welche Dateien zurückkommen. Der Befehl hierfür lautet:

cvs update -r <tagname> 
cvs co <modulename> -r <tagname> 
cvs export <modulename> -r <tagname> 
0

Ich weiß nichts von einem Tool, das Ihnen helfen kann, aber wenn Sie Ihre eigenen schreiben, kann ich Sie von einem Kopf retten: Verzeichnisse in CVS können nicht getagt werden. Nur die Dateien in ihnen haben Tags (und das bestimmt, was ausgecheckt wird, wenn Sie ein Verzeichnis auf einem bestimmten Tag auschecken).

2

Sie müssen keine tatsächliche Kasse ausführen. Sie können die Option -n verwenden, um nur diese zu simulieren:

cvs -n co -rTagName ModuleName 

Dies gibt Ihnen die Namen aller Dateien TagName in Modul Module markiert.

+0

Konnte das nicht zum Funktionieren bringen. cvs zurückgegeben: Es gibt keine Version hier; Führen Sie "cvs checkout" zuerst aus –

+0

@Joseph: Sie müssen ein CVSROOT entweder über die Umgebungsvariable oder über das Argument '-d' angeben.Andernfalls weiß CVS nicht, welches Repository abgefragt werden soll. –

+0

Danke für die Antwort. Ich war mir nicht sicher, ob ich das hinzugefügt hatte, aber ich versuchte es erneut mit der -d und einem Pfad zu einem cvs-Repository und erhielt die gleiche Nachricht. Ich führe Version 1.1.22 von cvs. Interessant ist jedoch, wenn ich ein nicht vorhandenes Tag gebe, sagt es mir, dass das Tag nicht existiert. –

1

Der folgende Befehl gibt eine Liste der Dateien in diesem Tag "yourTagName". Die Dateien sind alle als neu markiert, die Versionsinformationen in "yourTagName".

Dieser Befehl macht einen Unterschied zwischen 2000-01-01 und Ihrem Tag, fühlen Sie sich frei, ein anderes Datum zu verwenden, das früher ist.

cvs -q rdiff -s -D 2000-01-01 -r yourTagName 
11

Um Tags auf einer Dateiliste ein auch tun können:

cvs status -v <file> 
4

die oben beschriebene Methode nicht für mich

cvs arbeitet -q rdiff es -D 2000-01 hat zitiert -01 -r yourTagName

aber nach vielen rumgespielt habe ich erkannt, dass

cvs -q rdiff es -D 2000-01- 01 -r yourTagName ModuleName

funktioniert

Verwandte Themen