Mittwoch, 8. Januar 2014

 

CVS: Wissenswertes (POS1: 2BHIF)

Tags

Ein Tag (nicht das Gegenstück zur Nacht, sondern das englische Wort zu Marke) ist ein symbolischer Name für den Zustand des Projekts im Repository zu einem bestimmten Zeitpunkt. Ein Tag muss mit einem Buchstaben beginnen und kann dann Buchstaben, Ziffern, Unterstriche und Bindestriche enthalten. Punkte sind nicht erlaubt, damit ein Tag nicht mit einer Versionsnummer verwechselt werden kann.

Beispiele REL_1_0, rev-99, TRY_HP_20060919

Reguläre Tags

Jede Datei im Repository hat ihre eigene Versionsnummer (beginnend mit 1.1, wird bei jedem commit erhöht: 1.2, 1.3 usw.).

Besteht ein Modul (Projekt) aus den Dateien


Main.java 1.4
Gui.java 1.9
Net.java 1.6

will man auf diesen Zustand (diese Versionen) später wieder zugreifen können, weil dies z.B. eine auszuliefernde Version ist, so wählt man ein Tag, z.B. REL_1_0.

Ein Tag erzeugt intern eine Liste von Versionsnummern, die den Stand jeder Datei wiedergeben.

Es können beliebig viele Tags vergeben werden, jedoch müssen sie eindeutig sein.


~/work/project > cvs commit -m ""
cvs commit: Examing .
~/work/project > cvs rtag REL_1_0 project
cvs rtag: Tagging project

Mit dem CVS-Befehl rtag wird das Tag REL_1_0 erzeugt. Später kann man das Projekt mit der Option -r REL_1_0 (-r für release)


~/work > cvs checkout -r REL_1_0 project
~/work > cd project
~/work/project >

auschecken. Die Dateien im Verzeichnis project haben dann wieder obige Versionsnummern. Möchte man das Projekt in ein anderes Verzeichnis auschecken, dann muss man die Option -d name verwenden. Z.B.: es soll REL_1_0 in das Verzeichnis rel1.0 ausgecheckt werden:


~/work > cvs checkout -r REL_1_0 -d rel1.0 project
~/work > cd rel1.0
~/work/rel1.0 >

Verwenden eines Tags für die Abgabe

Für die Abgabe verwenden Sie das Tag ABGABE_1_0. Wollen Sie Korrekturen abgeben, dann verwenden Sie bitte ABGABE_1_1, ABGABE_1_2 usw.

Gibt es für ein Beispiel mehrere (Teil-)Abgaben, so verwenden Sie für die erste Abgabe obiges Schema, für die zweite Abgabe ABGABE_2_0 bis ABGABE_2_n (n n. Abgabeversion) usw.

alte Versionen auschecken

Will man auf eine alte Version zugreifen, so kann man beim Auschecken angeben, welchen Zustand man haben will, in dem man die Option -D datum angibt. datum kann entweder in der englischen Schreibweise angegeben werden (MM/TT/JJJJ), im ISO-Format (JJJJ-MM-TT) oder auch relativ als Text unter Hochkomma (z.B. 3 weeks ago, 1 day ago 27 minutes ago oder 3 days ago o.ä.).

Das Projekt python im Zustand vor einer Woche auschecken:


~/work > cvs co -D "1 week ago" python
cvs checkout: Updating python
U python/dreieck.py
U python/prim.py
~/work >

Das Projekt python im Zustand vom 22.9.2006 auschecken:


~/work > cvs co -D 09/22/2006 python
cvs checkout: Updating python
U python/calc.py
U python/craten.py
U python/dreieck.py
U python/ggt.py
U python/mittelwert.py
U python/muster.py
U python/prim.py
U python/pyintro.pdf
U python/raten.py
U python/summe.py
~/work >

Ältere Versionen sollten in eigene Verzeichnisse ausgecheckt werden. Sobald eine bestimmte Version ausgecheckt wurde, ist sie sticky (klebrig). Das bedeutet, dass sich alle Arbeiten in diesem ausgecheckten Verzeichnisbaum auf diese Version beziehen.

Daher ist das Weiterarbeiten an einer solchen Version nur sinnvoll bei Zweigen.

binäre Dateien

Unter binären Dateien verstehen wir hier Dateien, die nicht aus Textzeilen bestehen. Das sind z.B. Word- und Excel-Dateien, Bilder usw. CVS speichert normalerweise Textdateien und deren Zeilenänderungen. Dies ist bei Binärdateien nicht möglich. Wird z.B. eine Word-Datei nicht als Binärdatei markiert, so wird sie vom CVS zerstört (Subversion, der Nachfolger von CVS, kann gut mit Binärdateien umgehen, CVS ist aber immer noch weit verbreitet...).

Damit nicht bei jedem cvs add, cvs import" usw. die Option %-W *.gif -k 'b' (für jede Dateiendung von Binärdateien einmal!) angegeben werden muss, schreibt man diese Dateien in die Konfigurationsdatei CVSROOT/cvswrappers.

Die Konfiguration eines Repositories befindet sich im Projekt CVSROOT, welches man auscheckt, bearbeitet und dann wieder eincheckt (commit).


~/work > cvs checkout CVSROOT
...
~/work > cd CVSROOT
~/work/CVSROOT > vim cvswrappers

Die Datei sollte z.B. so aussehen (Zeilen mit # sind Kommentare, die schon enthalten sind):


# This file affects handling of files based on their names.
#
# The -m option specifies whether CVS attempts to merge files.
#
# The -k option specifies keyword expansion (e.g. -kb for binary).
#
# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
#
# wildcard [option value][option value]...
#
# where option is one of
# -f from cvs filter value: path to filter
# -t to cvs filter value: path to filter
# -m update methodology value: MERGE or COPY
# -k expansion mode value: b, o, kkv, &c
#
# and value is a single-quote delimited value.
# For example:
*.img -k 'b'
*.cramfs -k 'b'
*.jar -k 'b'
*.m2v -k 'b'
*.mvi -k 'b'
*.ppc -k 'b'
*.jffs* -k 'b'
*.nfi -k 'b'

# Microsoft
*.doc -k 'b'
*.xls -k 'b'
*.ppt -k 'b'

# Openoffice 1.*
*.stc -k 'b'
*.std -k 'b'
*.sti -k 'b'
*.stw -k 'b'
*.sxc -k 'b'
*.sxd -k 'b'
*.sxq -k 'b'
*.sxi -k 'b'
*.sxm -k 'b'
*.sxp -k 'b'
*.sxw -k 'b'

# dia
*.dia -k 'b'

# Bilder
*.xcf -k 'b'
*.jpg -k 'b'
*.bmp -k 'b'
*.gif -k 'b'
*.png -k 'b'

Für jeden Dateityp mit Binärformat gibt es eine Zeile der Form *.endung -k 'b'.

Diese Einträge speichern, den Editor beenden und das Projekt wieder commiten:


~/work/CVSROOT > cvs commit -m "Binärdateien bekanntgegeben"
...

Das Verzeichnis ~/work/CVSROOT können Sie löschen, da Sie es ja jederzeit wieder auschekcen können, wenn Sie eine Dateiendung vergessen haben.

Ignorieren von Dateien/Verzeichnissen

Bestimmte Dateien im Projektverzeichnis will man nicht in die Versionsverwaltung aufnehmen, z.B. Testdateien à la xxx oder die Sicherungsdateien vom vim (*~ - diese werden standardmäßig ignoriert), Klassendateien (*.class) usw.

Dafür gibt es auch Kommandozeilenargumente für cvs (z.B. -I '*.class'), aber besser ist es, diese Dateien ein für alle mal zu ignorieren. Die Konfigurationsdatei heißt CVSROOT/cvsignore. Leider existiert diese Datei in der Standardkonfiguration nicht und muss daher mit cvs add aufgenommen werden.

Hat man CVSROOT bereits ausgecheckt, so muss man die Datei mit einem Editor erzeugen:


~/work/CVSROOT > vim cvsignore

Bei mir hat die Datei folgenden Inhalt:


*.nfi
*.img
*.pyc
*.class
*.log
*.tmp
xxx
*.ppc
*.jffs*
*.cramfs

Dann muss man die Datei dem Repository hinzufügen und einchecken (commit):


~/work/CVSROOT > cvs add cvsignore
~/work/CVSROOT > cvs commit -m "zu ignorierende Dateien"
...

Labels: ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]