Peter Rehm's Blog

apple,development,life & more

$Id Zeilen mit Subversion

with 1 Comment

In den meisten Quellcodes die man so liest ist eine Id Zeile am Dateianfang zu finden,
die ungefähr so aussieht:

CODE:
/* $Id: test.cpp 3 2007-07-08 12:28:37Z peterrehm $ */


Dies bedeutet dass man die datei test.cpp sieht, zuletzt geändert in Revision 3 um 12:28 am 08.07.2007 von dem Benutzer peterrehm.
Dies ermöglicht einen schnellen Überblick über die Datei.
Die Information wird von Subversion selbst verwaltet.
Damit Subversion das tut, sind ein paar kleine Einstellungen notwendig.

1. Aktivieren der Keywors für die gewünschten Dateien

CODE:
svn propset svn:keywords "Id" test.cpp 


2. Definieren eines Platzhalters in der Quelldatei

Dazu einfach einen Code wie folgt in die Datei einfügen, je nach
Programmiersprache eben in entsprechender Kommentierung.

CODE:
/* $Id$ */


3. Datei committen

Mit dem nächsten Commit wird dann automatisch die eingefügt Zeile ersetzt.
Dies wird auch bei jedem weiteren Commit passieren. Die Id Zeile ist aber nicht
für SVN diffs relevant, auch wenn man selbst versuchen sollte die zu ändern,
also wenn man das Datum ändert, wird das nicht mit übertragen.

Die Dateiinformation bleibt solange bestehen bis man eine neuere Version committet,
oder ein anderer Benutzer des SVN Repositorys das übernimmt. Allerdings wird die
Zeile dann auch erst mit dem nächsten update aktualisiert.

Als letzte Information bleibt vielleicht noch zu nennen, dass ein $Log$ Keyword von
den SVN Entwicklern ausdrücklich nicht implementiert werden. Darauf wird in der
FAQ verwiesen.

Update: Fehler wurde behoben, Danke Sebastian!

Posted by Peter Rehm

07/08/2007 at 04:44:04 PM

Posted in Programmierung

Defined tags for this entry:

Subversion Repository sichern und wieder einrichten

with 1 Comment

Irgendwann kommt man immer mal in die Situation seinen Rechner neuzuinstallieren.
Als Mac User meist dann, wenn man etwas zuviel im System gespielt hat. Und daher
ist die Frequenz entscheidend geringer als bei den Windows Maschinen.

Man will auch möglichst wenig Daten zurück lassen, und daher muss man alles möglich
sichern. Unter anderem auch Subversion.

Als erstes erzeugt Ihr einen Dump eures Repositories

CODE:
svnadmin dump /Users/peterrehm/Library/svn/cms/ > 
/Volumes/Backup/backup_sync/svn_cms.dump


Wobei "/Users/peterrehm/Library/svn/cms/" der Pfad zum Repository ist.
Mit der erstellten Dump Datei kann man das Repository wiederherstellen. Und zwar genau so.

Auf dem neu installierten System erzeugt Ihr ein neues Repository

CODE:
svnadmin create /path/to/new/repos


Nun kann man die Daten wieder einspielen

CODE:
svnadmin load /path/to/new/repos < /Volumes/Backup/backup_sync/svn_cms.dump


Danach solltet Ihr wieder wie gewohnt arbeiten können. Zumindest wenn man es mit meiner
Installationsanleitung installiert hat. :-)

Evtl. muss man noch Permissions setzen, auf den Benutzer/Group der das Repository verwaltet.
Das habe ich aber bisher noch nie gebraucht.

CODE:
chown -R svn:svnusers /path/to/new/repos 
chmod -R g+w /path/to/new/repos/db/


Nähere Informationen findet man hier.

Posted by Peter Rehm

01/07/2007 at 05:30:08 PM

Posted in Verschiedenes

Defined tags for this entry: ,

SVN Tags von Projekten

without Comments

SVN Tags von den Projekten sind ganz einfach:

CODE:
svn cp -m "0.2 release of the cms" 
file:///Users/peterrehm/Library/svn/cms/trunk/ 
file:///Users/peterrehm/Library/svn/cms/tags/0.2


In meinem Fall handelt es sich um ein lokales Projekt, daher auch file:///.
Es wird einfach die aktuelle Version als "trunk" in einen tag kopiert, und kann dann immer von da ausgecheckt werden.

Posted by Peter Rehm

11/18/2006 at 09:51:43 PM

Defined tags for this entry:

Subversion Dateien ignorieren

without Comments

Beim arbeiten an einem Projekt hat man immer wieder Verzeichnisse, die man nicht zwingend in seinem Repository braucht.

Diese kann man ganz einfach auf die ignore List setzen, und hat damit nie wieder etwas damit zu tun. Dies ist z.b. interessant
für Cache Verzeichnisse, Temporäre Dateien,...

CODE:
svn propset svn:ignore "cache" .

Posted by Peter Rehm

07/16/2006 at 09:02:51 AM

Posted in Verschiedenes

Defined tags for this entry:

.svn Files entfernen...

with 2 Comments

Immmer mal wieder hat man einen Ordner kopiert und dummerweise war der in einem Subversion Repository.

Handelt es sich bei dem besagten um einen einzelnen Ordner, so stellt dies kein Problem dar, da man einfach per
Konsole das Verzeichnis entfernen kann.

Wenn man es aber auch aus allen Unterverzeichnissen herausbekommen möchte könnte dies weiterhelfen...

CODE:
find . -type d -name ".svn" -print0 | xargs -0 rm -rdf


Wenn man aber schon im Vorfeld sich des Problemes bewusst ist könnte svn export helfen.

Posted by Peter Rehm

06/01/2006 at 03:25:32 PM

Posted in Verschiedenes

Defined tags for this entry:

Subversion unter OSX

with 2 Comments

So, jetzt wird es mal wieder Zeit für einen etwas ausführlicheren Artikel, da ich mich gerade mit Subversion beschäftige. Leider habe ich keinen Artikel gefunden der mir all das brachte was ich benötigte.

1. Subversion installieren

Dieser Schritt ist sehr einfach, da es von Martin Ott Installationspackages zum Download gibt. Diese einfach installieren.

Sollten Sie Subversion auf der Konsole bedienen, was wir in den nächsten Schritten tun werden, dann sollten Sie die Pfade im .profile File in Ihrem Homeverzeichnis (/Users/username/.profile) wie folgt anpassen:

CODE:
export PATH=$PATH:/usr/local/bin
export SVN_EDITOR=/usr/bin/nano


Diese Anpassung dient rein dazu, dass die Binary Files von Subversion auch bequem gefunden werden.

2. Einrichten

Nachdem Sie dies nun erledigt haben, können Sie sich Gedanken über das Einrichten machen. Dazu benötigen Sie ein Repository, das sie wie folgt anlegen.

CODE:
svnadmin create /Users/peterrehm/Library/subversion


Dann ist schon einmal das Repository angeleget. Subversion verwendet dazu die Berkely DB. Sollte es Sie interessieren schauen Sie sich doch einfach einmal den Inhalt des Verzeichnisses an, wobei das alles andere als Spektakulär ist.

CODE:
total 16
drwxr-xr-x    9 peterreh  peterreh  306 Apr 27 01:20 .
drwxr-xr-x    3 peterreh  peterreh  102 Apr 27 01:20 ..
-rw-r--r--    1 peterreh  peterreh  229 Apr 27 01:20 README.txt
drwxr-xr-x    5 peterreh  peterreh  170 Apr 27 01:20 conf
drwxr-xr-x    2 peterreh  peterreh   68 Apr 27 01:20 dav
drwxr-sr-x   10 peterreh  peterreh  340 Apr 27 01:22 db
-r--r--r--    1 peterreh  peterreh    2 Apr 27 01:20 format
drwxr-xr-x   11 peterreh  peterreh  374 Apr 27 01:20 hooks
drwxr-xr-x    4 peterreh  peterreh  136 Apr 27 01:20 locks


So sollte es bei Ihnen nun auch aussehen.

Um mit Subversion arbeiten zu können müssen wir erstmal eine Dateistruktur anlegen, dazu empfiehlt sich bei Subversion folgende Dateistruktur. Diese können Sie auch in dem sehr umfangreichen Handbuch nachlesen.

Ich habe folgende Dateistruktur im verzeichnis /tmpdir erstellt:

CODE:
dagobert:~ peterrehm$ du -ch  /tmpdir/
0B    /tmpdir//cms/branches
0B    /tmpdir//cms/tags
0B    /tmpdir//cms/trunk
0B    /tmpdir//cms
0B    /tmpdir/
0B    total


Dies ist wie bereits erwähnt die von Subversion empfohlene Dateistruktur.

Diese müssen wir nun in das Repository 'importieren'.

CODE:
cd /tmpdir
svn import . file:///Users/peterrehm/Library/subversion/ --message 'inital import of the file structure'


Danach erscheint folgende Meldung und wir befinden uns in Revisionsstand 1
CODE:
Adding         cms
Adding         cms/trunk
Adding         cms/branches
Adding         cms/tags

Committed revision 1.


Sie können dann auch z.b. ganz einfach Files Ihres bestehenden Projektes importieren.
CODE:
svn import /Library/WebServer/Documents/cms/ file:///Users/peterrehm/Library/subversion/cms/trunk/ --message 'import of the current files'


Dann sind Sie bereits in Revisionsstand 2. Und nun können wir loslegen.

3. Working Copy

Nun müssen Sie um loszulegen sich eine Arbeitskopie aus dem Repository laden.
Dies wird mit dem Befehl checkout gemacht.

CODE:
svn checkout file:///Users/peterrehm/Library/subversion/cms/trunk/ cms


Nun wird in das Verzeichnis CMS die Aktuelle Version des vorher in trunk importieren Projekts geladen, in diesem Fall ein CMS.

4. Los gehts

Nun sind Sie voll ausgestattet und können Loslegen. Sie senden Ihre Äbnderungen mit svn commit und gleichen Ihre 'Working Copy' mit dem Repository per svn update ab.

5. Hilfe

Im Handbuch finden Sie weitere Hilfe!

6. Ende

Ich hoffe diese Kurzanleitung hat Ihnen geholfen. Auf Richtigkeit keine Gewähr.

Posted by Peter Rehm

04/27/2006 at 12:59:15 AM

Posted in Apple, Programmierung

Defined tags for this entry: ,