Teamwork
The Answer Girl
Raus und rein
Mit den eingecheckten Daten zu arbeiten, ist nun recht einfach: Am Beginn eines Arbeitsabschnitts bringt ein
[trish@lillegroenn kurs]$ cvs update cvs update: Updating . cvs update: Updating folien cvs update: Updating skript
die Daten im Datenverzeichnis auf den aktuellen Stand; will man nur ein bestimmtes Unterverzeichnis updaten, wechselt man vor dem Kommando einfach dort hinein.
Ist man am Ende einer Arbeitseinheit angekommen, checkt man die Änderungen an Dateien in den jeweiligen Unterverzeichnissen mit
[trish@lillegroenn kurs]$ cvs ci cvs commit: Examining . cvs commit: Examining folien cvs commit: Examining skript
("check in") ein – hier sind wieder vi-Kenntnisse für die Beschreibung der Änderung nötig. Natürlich lassen sich auch einzelne Dateien "comitten":
[trish@lillegroenn kurs]$ cvs ci folien/unixfoil.tex CVS: ———————————————————————- CVS: Enter Log. Lines beginning with `CVS:' are removed automatically CVS: CVS: Committing in folien CVS: CVS: Modified Files: CVS: unixfoil.tex CVS: ———————————————————————-
Skrupel? Wer jetzt noch schnell einen Rückzieher machen will, bricht einfach den Editor ohne irgendeine Änderung ab. :q! im Kommandomodus des vi lässt cvs dann auch prompt quengeln:
Log message unchanged or not specified a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs Action: (continue)
Ein a bekräftigt, dass es uns mit dem Abbruch ernst ist – im Gegensatz zum einfachen Enter, das einfach dennoch eincheckt, und e, das uns zurück in den Editor bringt.
Frische Daten
Neue Ideen in neue Unterverzeichnisse – manchmal erweist es sich im Nachhinein ganz hilfreich, der anfänglichen Arbeitswut doch noch eine Struktur zu geben …
[trish@lillegroenn kurs]$ mkdir konzept [trish@lillegroenn kurs]$ cd konzept
Wenn das Konzept, konzept.tex, in diesem Unterverzeichnis steht, sollte es auch eingecheckt werden. Nur wie, wenn's noch nicht im Depot ist?
[trish@lillegroenn konzept]$ cvs add konzept.tex cvs add: cannot open CVS/Entries for reading: No such file or directory cvs [add aborted]: no repository
… war wohl noch nicht ganz die richtige Idee: Natürlich, cvs ist sich unsicher, wohin mit der Datei, da das Unterverzeichnis konzept noch kein CVS-Verzeichnis enthält.
Also einmal Kommando bzw. ein Verzeichnis zurück …
[trish@lillegroenn konzept]$ cd ..
… und eines nach dem anderen:
[trish@lillegroenn kurs]$ cvs add konzept ? konzept/konzept.tex Directory /home/trish/informatica/kursskript/konzept added to the repository [trish@lillegroenn kurs]$ cd konzept [trish@lillegroenn konzept]$ cvs add konzept.tex cvs server: scheduling file `konzept.tex' for addition cvs server: use 'cvs commit' to add this file permanently
Das scheint geklappt zu haben, nur "drin" ist das File offensichtlich noch nicht. Also folgen wir der Anweisung, den Neuzugang auch zu committen. Ob Sie dafür das lange cvs-Kommando commit oder das kurze ci benutzen, das Ergebnis ist das Gleiche:
[trish@lillegroenn konzept]$ cvs commit cvs commit: Examining . CVS: ———————————————————————- CVS: Enter Log. Lines beginning with `CVS:' are removed automatically CVS: CVS: Committing in . CVS: CVS: Added Files: CVS: konzept.tex CVS: ———————————————————————-o Neues KonzeptESC:wq RCS file: /home/trish/informatica/kursskript/konzept/konzept.tex,v done Checking in konzept.tex; /home/trish/informatica/kursskript/konzept/konzept.tex,v <-- konzept.tex initial revision: 1.1 done
Konflikte vorprogrammiert?
Wenn mehrere Leute an einem Dokument arbeiten, kann auch kein CVS-Server der Welt verhindern, dass Änderungen, die der eine eincheckt, mit Änderungen kollidieren, die die andere etwas später comitten will:
[trish@lillegroenn linuxkurs]$ cvs commit cvs commit: Examining . cvs commit: Examining folien cvs commit: Examining skript cvs commit: Up-to-date check failed for `skript/unixkurs.tex' cvs [commit aborted]: correct above errors first!
Offensichtlich hat hier jemand ebenfalls an skript/unixkurs.tex gewerkelt, und das Depot enthält eine Version, die neuer ist als trishs Arbeitsversion. Damit ist Aktualisierung angesagt:
[trish@lillegroenn linuxkurs]$ cvs update cvs update: Updating . cvs update: Updating folien cvs update: Updating skript RCS file: /home/trish/cvs/linuxkurs/kursunterlagen/linuxkurs/skript/unixkurs.tex,v retrieving revision 1.2 retrieving revision 1.3 Merging differences between 1.2 and 1.3 into unixkurs.tex rcsmerge: warning: conflicts during merge cvs update: conflicts found in skript/unixkurs.tex C skript/unixkurs.tex
cvs versucht, die mittlerweile getätigten Änderungen und trishs neue Änderungen unter einen Hut zu bekommen (zu mergen). Geht das gut, hat man keine weiteren Sorgen, geht es wie hier schief, muss trish selbst Hand anlegen und die konfliktreiche Datei unixkurs.tex erneut in den Editor laden.
Die wurde in der Zwischenzeit von CVS so verändert, dass der Konflikt sichtbar wird:
<<<<<<< unixkurs.tex
Sommerkurs Informatica Feminale Uni Bremen
=======
Sommeruni 2001 Universit"at Bremen
>>>>>>> 1.3
Oben ist die eigene Version, unten die aktuelle Depotversion zu sehen. Alles, was damit zu tun bleibt, ist, die <-, =- und >-Zeilen zu entfernen und die sich widersprechenden Zeilen zu genau dem Text zusammenzuschreiben, der jetzt eingecheckt werden soll, z.B.
Sommerkurs Informatica Feminale Uni Bremen
Dann muss nur noch eingecheckt werden.



