CVS-Frage

Tulkas

Well-Known Member
Hallo Forum.
Ich habe mich vor kurzem mit CVS beschäftigt. Momentan habe ich ein kleines Projekt laufen, welches ich mit CVS verwalte.
Das letzte woran ich mich erinnere, ist, daß ich einen TAG gesetzt habe.
# cd $HOME/src/Prj
# cvs tag Release_1_2

Seitdem bekomme ich allerdings immer diese Meldung bei einem Versuch eine Änderung zu commiten:
# rm -r Prj
# cvs checkout -rRelease_1_2 Prj
# gvim main.c
[....]
# cvs commit -m"$lognachricht" main.c
cvs commit: [17:15:02] waiting for user's lock in $HOME/src/Prj

Und diese bleibt dann.
Irdendwelche Ideen?
Ich hab schonmal probiert die Prj/#cvs.xyzxyz zu löschen. Danach kommt die locking-Meldung nicht mehr, allerdings diese:
# cvs commit -m"test" main.c
cvs commit: sticky tag `Release_1_2' for file `main.c' is not a branch

Hat vielleicht einer von euch ne Idee, wie ich das Locking aufheben kann?

Danke im Voraus
 
Bevor Du etwas machst, mach ein Backup von Deinem Repository. Ein simples cp -rp sollte das erledigen.

(Das für die Zukunft.)

Den Lock zu löschen, war richtig und hat das Problem gelöst.

Das was Du da als letztes beschreibst funktioniert nicht, weil Du eine Version mit "sticky tag" ausgecheckt hast und nun versuchst Du zu committen. Da ist aber kein Branch.

Das Problem ist:
cvs checkout -rRelease_1_2 Prj

Wenn Du ohne -r... auscheckst und dann Deine Änderungen in dieser Version noch ein Mal machst, wird es gehen.

Wieso es nicht geht, kann ich hier nicht erklären. Eine vernünftige Doku über die Konzepte von CVS nennt sich "Cederqvist" und ist auf www.cvshome.org/docs (geht nur mit "www" davor) erhältlich.
 
Hmm, ein einfaches "cvs update -A" sollte auch reichen. Löscht das Sticky-Tag, danach gehts ganz normal weiter.

Die Sticky-Tags sind eine gemeine Sache, wenn man mit Tags (-r....) auscheckt, dann bleiben die Versionen getagged. Soll heissen, dass die Dateien auf dem ausgecheckten Stand eingefroren werden bis man sie 'enttaggt'.
Getaggte Datein kann man nur committen wenn man das gleiche Tag setzt wie beim auschecken, also "cvs commit -r..... ...".

Die Doku meint dazu:
--
Using "cvs update" would get the most recent version of the file,
assuming there are no sticky tags on the file. Using "cvs update -dPA"
would reset any stick tags, get new directories, and prune empty ones.
--
 
Zuletzt bearbeitet:
Jetzt kann ich wieder committen.
Vielen Dank für eure Antworten!

@nakal
Normalerweise halte ich immer ein Backup meines Repositories, aber das hatte ich leider erst nach dem Setzen meines TAGes (und samt Lock-File!) gesichert. Mein Fehler war, nicht zu wissen, daß Dateien welche auf einen TAG ausgecheckt wurden, nicht ohne Weiteres in "HEAD" committet werden können.

@reakktor
Danke für diese ausführliche Erklärung.

@MrFixit
/me übernimmt diese .cvsrc ;)

P.S.
Warum erkennt cvs meine Log-Messages nicht, wenn ich diese im GVim schreibe? Unter Win2k geht das Problemlos, aber unter FreeBSD tut cvs so, als hätte ich kein log geschrieben, obwohl der CVSEDITOR aufgeht und ich dort meine Nachricht hineinschreibe...
 
Zuletzt bearbeitet:
Zurück
Oben