2008-10-10 6 views
7

Eines unseres intern geschrieben Werkzeug zugeführt wird, ein cvs Spur der Form begehen:Wie erhalte ich eine bestimmte Revision einer neu hinzugefügten Datei von CVS über die Befehlszeile?

Checking in src/com/package/AFile.java; 
    /home/cvs/src/com/package/AFile.java,v <-- Afile.java 
    new revision: 1.1.2.56; previous revision: 1.1.2.55 
    done 

Das Tool übernimmt dann die Datei von cvs durch einen cvs update -r 1.1.2.56 Befehl in einem Arbeitsverzeichnis Ausgabe, die bereits bestimmten Zweig des Code hat geprüft -aus.

Diese Befehle funktionieren ordnungsgemäß, wenn eine vorhandene Version von AFile.java im Arbeitsverzeichnis vorhanden ist. Wenn jedoch eine Datei gefunden wird, die keine Version im Arbeitsverzeichnis hat, kann der Befehl die Datei nicht erfassen.

Gibt es eine Möglichkeit, es zu tun?

Antwort

21

Es ist nicht klar, was Ihr Endziel ist: das gesamte Repository in den gewünschten Zustand zu bringen (ausgewählte Revision der gewählten Verzweigung) oder die einzelne Datei aus dem Repository zur weiteren Verarbeitung zu übernehmen. Ich nehme an, es ist Letzteres.

Dann müssen Sie diesen Befehl ein:

cvs checkout -r <revision> -p filename.ext > ~/tmp/filename.ext 

Dies wird Dump angegeben Revision der angegebenen Datei (oder Dateien) nach stdout, die in temporären Speicherort und verarbeitet werden umgeleitet werden könnten.

Oder könnten Sie:

cvs export -r <revision> -d ~/tmp module/filename.ext 

, die (Teil) Repository angegebene Zielverzeichnis exportieren würde.

+1

Danke. Ich gehe mit cvs co- /module/path/to/file.txt ohne die Option -p –

+0

Wenn Sie die Option -p nicht verwenden, wird es die Sticky-Flag setzen, so dass alle fugure-Checkouts verwenden die alte Überarbeitung. – CpnCrunch

+0

Der Befehl checkout funktioniert nicht für mich: Er sagt "Modul nicht gefunden" für die angegebene Datei. – CpnCrunch

1

Eine Lösung wäre, das Tool so zu ändern, dass ein "cvs co" für die Datei ausgegeben wird, wobei die Revision so angegeben wird, wie sie jetzt mit dem Update ist. Der Checkout-Befehl müsste von oben in der Baumstruktur ausgeführt werden, nicht in dem Verzeichnis, das die Datei enthält. Ich bin auf ähnliche Fälle gestoßen, in denen das Update keine neue Datei findet, die wie beschrieben einen Checkout der Datei erfordert.

+0

Danke. Ich habe das sofort nach dem Posten der Frage versucht und es hat funktioniert. –

2

cvs --help

sagt Ihnen, dass Sie die -H arg verwenden können, wie so Hilfe zu einem bestimmten CVS-Befehl anzuzeigen:

$ cvs -H checkout 
Usage: 
    cvs checkout [-ANPRcflnps] [-r rev] [-D date] [-d dir] 
    [-j rev1] [-j rev2] [-k kopt] modules... 
     -A  Reset any sticky tags/date/kopts. 
     -N  Don't shorten module paths if -d specified. 
     -P  Prune empty directories. 
     -R  Process directories recursively. 
     -c  "cat" the module database. 
     -f  Force a head revision match if tag/date not found. 
     -l  Local directory only, not recursive 
     -n  Do not run module program (if any). 
     -p  Check out files to standard output (avoids stickiness). 
     -s  Like -c, but include module status. 
     -r rev Check out revision or tag. (implies -P) (is sticky) 
     -D date Check out revisions as of date. (implies -P) (is sticky) 
     -d dir Check out into dir instead of module name. 
     -k kopt Use RCS kopt -k option on checkout. (is sticky) 
     -j rev Merge in changes made between current revision and rev. 
(Specify the --help global option for a list of other help options) 

... lehren eine Person, wie man Fisch ... :)

+2

Danke für den Angeltipp: P Diese Frage wurde am 10. Oktober '08 gestellt. Seitdem ist viel Wasser unter die Brücke geflossen :) –

+2

Einverstanden, aber Überlauf ist eine Quelle für viele Menschen. Ich habe gegoogelt und diese Frage gefunden. Es war hilfreich, aber es erklärt nicht, was -p tut und welche anderen Optionen verfügbar sind. Ich hoffe, diese Antwort wird anderen Menschen helfen. Grüße! – Jess

+0

Fair genug Jess –

2

ich habe, wie unten Art und Weise versucht,

cvs checkout -r <revision> -p filename.ext > ~/tmp/filename.ext 

Es gab Fehler wie

cvs checkout: cannot find module `filename.ext` -ignored. 

Also ich habe, wie unten Art und Weise getan

cvs checkout -r <revision> -p Module_name/path_to_file/filename.ext > ~/tmp/filename.ext 

Nun es funktionierte gut.

+0

Ja, ich hatte diesen Fehler auch. Ich habe keine Ahnung, wie mein Modulname lautet. Ich bin mir sicher, dass ich es herausfinden könnte, aber es scheint lächerlich zu sein, das nur zu tun, um eine alte Version einer Datei zu überprüfen. Siehe meine Lösung, bei der der Modulname nicht ermittelt werden muss. – CpnCrunch

1

Dies ist die einzige Art und Weise, die für mich funktioniert, wie die Kasse Befehl ein „Modul nicht gefunden“ immer gibt Fehler:

cvs diff -r <revision> <file> > /tmp/patch 
cp <file> /tmp 
cd /tmp 
patch -R < patch 

Es scheint, dass cvs auf dieser den Ball fallen gelassen.

Verwandte Themen