--force die ignores einfach ignoriert (Wie lustig oder eben auch gar nicht lustig sondern doof !)
Man muss svn:ignore hinzufuegen, wodurch svn status gefiltert wird. Dann muss man sich ein Skript schreiben, dass svn status ausführt und alle Dateien mit ? selbstständig added.
Mit dem Sopra SVN Server arbeiten
Auschecken
- Wo soll das working copy erstellt werden ?
/home/bischowg/Sopra
- Das Verzeichnis selbst /home/bischowg/Sopra erstellen
- Konsole öffnen
- Nachsehen, was auf dem Server vorhanden ist
svn list --verbose http://svn.mayastudios.de/sopra/repos/docu
um das docu repository anzusehen
svn list --verbose http://svn.mayastudios.de/sopra/repos/sources
um das sources repository anzusehen.
- das docs Verzeichnis nach /home/bischowg/sopra auschecken
svn --username username checkout http://svn.mayastudios.de/sopra/repos/docu /home/bischowg/Sopra/docu
Man muss den Pfad /home/bischowg/Sopra/docu nennen, da SVN beim Auschecken eines Ordners (hier: docu) den Inhalt dieses Ordners am angegebenen Pfad ablegt und nicht den Ordners selbst mit seinem Inhalt darin am angegebenen Pfad ablegt. SVN führt praktisch eine Kopie des Inhalts vom angegebenen Ordner im Repository in den Inhalt des angegebenen Ordner im working copy durch. Im obigen Fall wird also der Inhalt von docu in docu kopiert. Ganz einfach eigentlich. Hätte man den Pfad nur /home/bischow/Sopra genannt, so hätte man den Inhalt dieses Ornders im Sopra Ordner herumfahren, das wollen wir aber nicht. Der Inhalt soll auch wieder in den Ordner docu.
Die Stundenzetteldatei bearbeiten und ins Repository einchecken
- update - Gibt es seit dem letzten checkout Änderungen?
svn update /home/bischowg/Sopra/docu
- Die Stundenzettel Datei bearbeiten
- status - den Änderungstatus der Stundenzetteldatei abfragen
svn status /home/bischowg/Sopra/docu
oder
svn status --verbose /home/bischowg/Sopra/docu
Der Buchstabe M steht übrigens für modified.
- commit - Die Änderungen ins Repository hochladen
svn commit /home/bischowg/Sopra/docu -m "Stunden eingetragen"
add - Dateien hinzufügen
add - Einen neuen Ordner im Repository anlegen
- ACHTUNG: Niemals die Qualitätskontrolle vergessen !
Sie dürfen nie vergessen, das Sebastian die Qualitätskontrolle übernommen hat und er der einzige ist, der in das docu Repository commiten darf ! Wenn Sie Änderungen am docu Repository vornehmen, wird ihnen das verboten und der SVN Befehl schlägt mit einer Fehlermeldung fehl.
- Erstellen Sie den neuen Ordner in ihrem working copy
Bsp.:
mkdir /home/bischowg/Sopra/sources/workplace/wb/test
- Stellen Sie den Ordner unter die Versionsverwaltung von SVN mit dem add Befehl
svn add /home/bischowg/Sopra/sources/workplace/wb/test
Alle Dateien, die in diesem Ordner liegen, werden auch geadded.
- Schicken Sie den Ordner ins Repository
svn commit /home/bischowg/Sopra/sources -m "Ordner erstellt"
Branching
Ein Branch hat den Ursprung in einem Dokument, das weiterhin besteht und weiterentwickelt wird. Der Branch wird parallel auch weiterentwickelt. Branches enstehen aus besonderen Wünschen eines neue hinzukommenden Interresenten, an das ursprüngliche Dokument, wobei das ursprüngliche Dokument jedoch ohne diese besonderen Änderungen weiter für den ursprünglichen Interressenten des Dokuments bestehen bleiben muss. Wir nennen das ursprüngliche Dokument der Einfachheit halber auch einfach branch. Damit gibt es nun Änderungen, die nur einem Dokument, also nur einem branch, zugute kommen sollen und im anderen Branch nicht auftauchen sollen. Des weiteren gibt es aber auch Änderungen, die sowohl im einen als auch im anderen Branch nötig sind, z.B. Schreibfehler. Daher besitzt SVN die Fähigkeit Änderungen spezifisch auszuwählen und in einen anderen Branch zu übernehmen. Dadurch kann man die Besonderheiten eines Branches wahren und von den Verbesserungen der Mitarbeiter an den anderen Branches profitieren, die man auch im eigenen Branch verwendnen kann.
Frequently Asked Questions
Wie kann ich den Inhalt eines Repository anzeigen lassen ?
Man wendet den Befehl svn list an. Optional kann man sich ein langes listing mit dem Schalte --verbose oder -v anzeigen lassen. Nicht vergessen: Man kann nur über URLs auf Repositorys zugreifen. file:///pfad/zum/repository ist also nicht optional !
svn list --verbose file:///home/bischowg/svnrepository
Wenn Informationen über ein Unterverzeichnis haben möchte, so gibt man dieses Verzeichnis einfach mit der URL des svn list Befehls an.
Wie kann ich die Revision der Verzeichnisse und Dateien in meinem working copy anzeigen lassen ?
Navigieren Sie in ihr working copy und führen Sie dort den Befehl svn log aus.
Was passiert falls ich lokal eine Datei verändert aber noch nicht commited habe und diese Datei aber im Repository zwischenzeitlich auch verändert worden ist ? Gehen meine Änderungen bei einem Update verloren ?
Die Änderungen gehen nicht verloren, in keinem der folgenden Fälle:
- Falls die Änderungen nicht mit den eigenen Änderungen überschneiden oder komplett identisch sind, so wird ein merge durchgeführt und die Änderungen aus dem Repository werden mit der Datei im working copy verschmolzen. Beim Update wird der Statuscode G angezeigt. (G steht für das g in merge)
- Falls die Änderungen mit den eigenen Änderungen überschneiden und nicht identisch sind, so wird folgendes passieren: Beim update wird dann ein C (für conflict) angezeigt. Bevor man die eigenen Änderungen commiten kann, muss man den conflict manuel auflösen. Falls es sich bei der Datei die einen Konflikt verursacht um einen mime-type handelt, der mit einem Texteditor betrachtet werden kann, so wird svn mehrere Dinge tun. Es wird die Datei im administrativen .svn Verzeichnis als konfliktbehaftet markieren. Es wird die eigenen Änderungen und die Änderung aus dem Repository in den Text mit speziellen optisch hervorstechenden Zeilen umschlossen einfügen. Es wird drei zusätzliche Dateien ins working copy ablegen. Alle neuen Dateien heißen gleich wie die ursprüngliche Datei haben aber besondere Endungen. Die erste Datei erhällt die Endung .mine. Sie ist eine Kopie der Datei und enthällt daher die eigenen Änderungen. Die zweite Datei erhällt eine Endung die der Revision der Datei entspricht, bevor man die eigenen Änderungen an ihr vorgenommen hat. Die letzte Datei erhällt als Endung die Revisionsnummer der Datei die aus dem Repository kam und den Konflikt verursacht hat. Man kann nun folgendes tun. 1. Man schmeist die Änderungen weg und übernimmt einfach die Datei aus dem repository indem man die Endung mit der Revision wegnimmt und die Datei neu bennent. Danach muss man svn resolved aufrufen, damit SVN die .svn Ordner anpasst und die Datei als nicht konflikt behaftet markiert. svn resolved löscht dabei auch automatisch die drei neuen Dateien aus dem working copy. 2. man passt die Änderungen aus dem Repository mit den eigenen Änderungen an so das beide Programmierer glücklich sind und ruft svn resolved auf. 3. Man verwendet die alte Datei mit der Revisionsnummer der Revision bevor die Änderungen vorgenommen wurden und ruft dann svn resolved auf. Erst jetzt kann man einen Commit durchführen. Es ist dabei zu beachten das die konfliktbefreite Datei immer noch an der gleichen Stelle Änderungen enhällt, die mit den Änderungen aus dem Repsitory in Konflikt stehen (Es sei den man hat die Datei aus dem Repository übernommen) durch den Aufruf von svn resolve jedoch wird SVN gesagt, das diese Datei nun ohne Rücksicht auf Verluste ins Repository übernommen werden soll. Es ist daher einem Programmierer möglich die Änderungen seiner Teammitglieder zu überschreiben indem er einfach seine eigene Datei als konfliktfrei markiert indem er svn resolved für die Datei aufruft und dann einen commit durchführt ohne vorher die Änderungen seiner Teammitglieder zu übernehmen ! Wäre dies jedoch nicht möglich, so könnten niemals Änderungen zweier Programmierer an der gleichen Datei und innerhalb dieser Daeti an der gleichen Stelle erfolgen, da der Programmierer, der seine Änderungen später als der erste Programmiere commitet dann immer in die Röhre schaut und seine Änderungen nicht abschicken darf, da nur die Version aus dem Repository nicht mit der Version aus dem Repository in Konflikt steht !
Ich habe eine Datei ohne einen svn Befehl aus meinem working copy gelöscht. Wie passe ich die Struktur des working copy und des Repositorys jetzt so an, das die Datei auch aus den administrativen .svn Ordnern dieser beiden Orte verschwindet ?
Man muss svn mitteilen, das die Datei bei einem erneuten aupdate nicht mehr aus dem Repository in das working copy übertragen werden soll, mit anderen Worten, das die Datei aus der, durch das Löschen enstehenden, nächsten Revision entfernt werden soll. Dazu verwendet man den Befehl svn delete und gibt als Parameter der Namen der Datei an die gelöscht werden soll. Nach einem update oder commit werden die Änderungen ins Repository übernommen. In älteren Revisionen ist die Datei allerdings noch enthalten.
Ich möchte ein update meines working copy durchführen und erhalte den Fehler svn: Failed to add directory 'docu/Entwurf': object of the same name already exists
Der Grund ist, das der add Befehl auf dieses Verzeichnis ausgeführt wurde, das Verzeichnis aber bereits im Repository vorhanden ist. Wenn nun update durchgeführt wird, versucht svn den Ordner ins repository hinzuzufügen und danach neue Dateien vom repository herunterzuladen. Dabei kommt es zum beschriebenen Konflikt. Mit dem revert Befehl kann man den add Befehl rückgängig machen.
svn revert /docu/Entwurf
SVN versucht nun nicht mehr den add Befehl auszuführen, dieser Auftrag wurde durch revert gelöscht. Nun funktioniert das update des docu Verzeichnisses wieder.
Wie kann ich herausfinden, welche Dateien in meinem working copy noch nicht mit svn add geadded wurden ?
Führen Sie den Befehl svn status fuer das entsprechende Verzeichnis aus. svn status schreibt ein Fragezeichen vor jede Datei, die noch nicht geadded wurde, die also noch nicht unter Versionskontrolle steht.
Wie kann ich mit svn bestimmte Dateien und Ordner ignorieren, so das sie bei einem add oder commit nicht mit ins Repository übertragen werden ?
Das funktioniert mit den sogenannten Properties von SVN. (Lesen Sie dazu im svn-book.pdf auf Seite 151 bzw. auf der Seite 134 im Dokument selbst). Es gibt das svn:ignore Property, das auf Verzeichnisse (vielleicht auch auf Dateien ???)angewendet werden kann. Das svn:ignore Property ist eine Liste von Schemas. Bei einem recursiven add Befehl, werden innerhalb eines Verzeichnisses V alle Dateien und Ordner nicht geadded, die mindestens einem Schema in der svn:ignore Property des Verzeichnisses V entsprechen. Des weiteren zeigt eine svn status Befehl alle Dateien und Ordner nicht an, die mindestens einem Schema in der svn:ignore Property des Verzeichnisses V genuegen. Mit dem switch --no-ignore kann man den svn status Befehl sagen, das er trotzdem alle Dateien und Ordner anzeigen soll, auch die die ignoriert werden.
svn status --no-ignore
Das Vorgehen ist das Folgende. Angenommen in Ihrem working copy gibt es das Verzeichnis V. Darin liegt die Datei test.java, die Sie ignorieren möchten. Des weitern liegen dort mehrere Dateien mit der Endung .ccf die Sie allesamt auch ignorieren wollen. Dann setzen Sie das svn:ignore Property des Verzeichnisses V wie folgt:
svn propedit svn:ignore V
propedit ist ruft den Standardeditor (bei mir vi) auf, und sie können Ignorier-Schemas für das svn:ignore Property eingeben. Ein Schema wird pro Zeile eingetragen. Sie tragen, um die Datei test.java und alle .ccf-Dateien zu ignorieren folgendes ein:
test.java
*.ccf
Wie kann ich mit svn einen Ordner und alle Unterordner unter Versionskontrolle stellen ?
svn add arbeitet standardmäßig rekursiv. (es gibt einen switch, der svn add auf nicht rekursiv einstellt !). Das Problem ist nur, das svn add Ordner, die bereits unter Versionskontrolle stehen überspringt und nicht in solche Ordner hinabsteigt. Wenn man also neue Dateien in Ordnern erzeugt hat, die bereits unter Versionskontrolle stehen, und man möchte in diesen Ordner alle Dateien adden, dann muss man SVN dazu zwingen in bereits versionierte Ordner rekursiv abzusteigen. Dazu verwenden man den switch --force des svn add Befehls.
svn add sources --force
SVN rekursiert nun über alle Ordner und fügt alle Dateien und Ordner hinzu, die noch nicht unter Versionskontrolle stehen.
ACHTUNG: Es werden nun wirklich alle Dateien und Ordner hinzugefügt. Womöglich möchten Sie das SVN unwichtige Dateien und Ordner ignoriert. Lernen Sie dazu wie man Dateien und Ordner mit SVN ignoriert.
ACHTUNG: Ich habe herausgefunden, das der svn add --force Befehl leider auch Ordner und Dateien hinzufügt, die durch das svn:ignore Pattern ignoriert werden sollten.
Wie kann ich mit svn eine Binärdatei unter Versionskontrolle stellen, so dass svn bei einem update keine Unterscheidungen in die Datei hineinschreibt ?
Dazu gibt es die Property svn:mime-type. Man muss der entsprechenden Datei einen mime-type geben, der keinem Textdateiformat entspricht. Bei einem update, wird die lokale Nicht-Text-mime-datei die im lokalen working copy vorlag, mit der Änderunge .orig versehen. Aus dem Repository wird die mime-Datei mit den Änderungen unter ihrem normalen Namen ins Repository gelegt.
Herausfinden in welchen Bereichen des Repository man schreiben darf
SVN Server einrichten unter DSL
Standalone server option
Subversion also offers a standalone server option using a custom protocol (not everyone wants to run Apache 2.x). The standalone server can run as an inetd service, or in daemon mode, and offers basic authentication and authorization. It can also be tunnelled over ssh. Wir werden svn als custom Server installieren.
Download
Download the Subversion 1.3.2 sourcecode from the svn homepage.
Transfer to the DSL PC via scp
scp subversion-1.3.2.tar.gz root@192.168.0.101:/root/download/subversion-1.3.2.tar.gz
Das Verzeichnis /root/download muss bereits existieren.
tar.gz auf dem DSL PC entpacken
tar xvfz subversion-1.3.2.tar.gz -C /root/temp
Das Verzeichnis /root/temp muss existieren.
Der erste Übersetzungsversuch
Rufen Sie in dem Ordner, in dem sich die svn Quellen befinden, das configure Skript auf. configure probiert eine makefile mit allen Informationen, die es aus ihrem System ausliest, zu bauen. Immer wenn es einen Mangel an Software feststellt, wird dieser mitgeteilt. Damit ist die Software installationsfähig, wenn configure komplett durchläuft und configure kann als Indikator für fehlende Software verwendet werden, falls svn nicht problemlos durchläuft.
configure
Das Ergebnis war abzusehen. configure bricht mit folgender Fehlermeldung ab.
configure: error: no acceptable C compiler found in $PATH
Man muss also einen Compiler installieren.
zum Seitenanfang
zur Hauptseite
Letzte Änderung: 09.11.2005