Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Schulung

                „Subversion“

              © 2008 - 2009 Jörn Dinkla

                   joern@dinkla.com
     ...
Vorstellung
•   Dipl.-Inform. Jörn Dinkla
•   Schwerpunkte
     • Java Entwicklung (J2SE, JEE)
     • Moderne Programmiers...
Überblick



© 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
Überblick
•   Versionsverwaltung
•   Subversion
     • Grundlagen
     • Praxis
           • Benutzung bei typischen Arbei...
Versionsverwaltungen



      © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
Versionsverwaltungen
•   Ähnlichkeit zu einem Fileserver oder Dateisystem
•   Aber: zusätzlich die zeitliche Dimension
•  ...
Versionsverwaltung
•   Unterschiedliche Namen
     • Revision Control System
     • Version Control System (VCS)
     • So...
Versionsverwaltung
•   Protokollierung von Änderungen
     • „Wer hat was wann geändert?“
•   Wiederherstellung von alten ...
Theoretische Grundlagen
•   Unterschiede zwischen Versionsverwaltungen
     • Repository-Modell
     • Speicherung von Ent...
Repository-Modell
•   Zentral
     • Client-Server
     • Repository auf dem Server
     • Auf dem Client nur Arbeitskopie...
Repository-Modell
•   Verteilt
     • Jeder hat ein Repository
     • Bzw. nur noch Arbeitskopien
     • Vollständige Funk...
Architektur
•   Dimensionen eines Repositories
     • Projekt (P wie „project“)
     • Pfad (L wie „location“)
     • Zeit...
Kontrollierte Zugriff
•   Mehrere Benutzer
     • Gleichzeitige Änderungen ?
     • Überschreiben von Informationen ?
•   ...
Zugriff: Lock-Modify-Unlock
•   Vor dem Bearbeiten
     • Sperren




•   Nach dem Bearbeiten
     • Entsperren




      ...
Zugriff: Lock-Modify-Unlock
•   Nachteile
     • Ist sehr restriktiv
     • Mitarbeiter lockt Datei und geht in den Urlaub...
Zugriff: Copy-Modify-Merge
•   Gleichzeitige Änderungen




                      © 2008 - 2009 Jörn Dinkla, http://www.di...
Zugriff: Copy-Modify-Merge
•   Harry merged die Änderungen




                     © 2008 - 2009 Jörn Dinkla, http://www....
Zugriff: Copy-Modify-Merge
•   Auflösen eines Konflikts
     • Manuelles Auflösen pro geändertem Bereich
•   Vorteile
    ...
Eine kurze Geschichte
•   Source Code Control System (SCSS)
     • 1972 Bell Labs
•   Revision Control System (RCS)
     •...
Kommerzielle Produkte
•   Eine Auswahl, alphabetisch sortiert
     • BitKeeper (BitMover Inc.)
     • ClearCase™ (IBM)
   ...
Neue Entwicklungen
•   SVK
     • Ergänzung zu Subversion

•   Verteilte Systeme
     • Bazaar
     • Mercurial
     • Git...
Subversion



 © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
Architektur von Subversion
•   GUI

•   Client

•   Netzwerk


•   Server


•   Repository
•   Speicher

                 ...
Subversion
•   Adressierung
     • P: T, L
     • Der gesamte Baum wird versioniert
•   Versionierung von
     • Verzeichn...
Subversion
•   Arbeitskopie
     • SVN speichert in .svn ausgescheckte Kopie
         • Änderungen können auch ohne Verbin...
Geschichte
•   Subversion
     • 1.0             CVS-Ersatz
     • 1.1 2004/09 FSFS, Symbolische Links
     • 1.2 2005/05 ...
Clients
•   Für die Arbeit mit Subversion gibt es viele Möglichkeiten
     • Kommandozeile
           • svn, svnadmin, svn...
Clients: GUI
•   Auswahl: RapidSVN und Eclipse




                     © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com  ...
Clients: WebSVN
•   Zugriff mit WebSVN




                     © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com   29
Clients: Kommandozeile

 •   Alle Programme
      • Für „normale“ Benutzer ist nur svn wichtig
 svn                 Das Pr...
Kommandozeilenargumente
•   Für die meisten Programme gibt help eine Übersicht.
     • Beispiele
           • svn help
   ...
Repositories und URLs
•   Abbildung zwischen URL und Dateien im Repository
     • svn://localhost/test1/trunk/beispiel-jav...
Repositories und URLs
•   URL:
     • PROTOKOLL://HOST [:PORT]/REPOSITORY/PFAD

•   Unterstütze Protokolle
     • file, ht...
Typische Arbeitsschritte
•   Einmalig: Projekt auschecken
•   Arbeiten
     • svn add, svn delete, svn copy, svn move
•   ...
Projekt auschecken
•   Auschecken
     • svn checkout URL@REV PFAD
     • Es wird eine lokale Arbeitskopie erstellt
      ...
Arbeitskopie
•   Für jede Datei wird gespeichert
     • Ausgecheckte Revisionsnummer, „working revision“
     • Zeitpunkt ...
Arbeitskopie: Zustände
•   Änderungen möglich
     • Lokal in der Arbeitskopie
     • Im Repository
•   Daher: Vier Zustän...
Arbeitskopie: Zustände
•   Ausgabe von svn status -u

    ?   scratch.c
    A   stuff/loot/bloo.h
    C   stuff/loot/lump....
Arbeiten
•   svn add DATEINAME
     • Fügt Datei hinzu
•   svn delete DATEINAME
     • Löscht eine Datei
•   svn copy DATE...
Synchronisieren
•   Neue Versionen müssen explizit geholt werden
     • svn update

•   Lokale Änderungen müssen explizit ...
Konflikte lösen
•   Falls update auf einen Konflikt stösst, muss dieser gelöst
    werden
     • Ab 1.5 per Kommandozeile i...
Konflikte lösen
•   Bei einem Konflikt gibt es die folgenden Möglichkeiten
     • Aufschieben
     • Version aus Arbeitskop...
Konflikte lösen
•   Bei einem aufgeschobenen Konflikt werden die folgenden
    Dateien angelegt.
     • DATEINAME.mine
    ...
Sperren
•   Sicherstellen, dass nur ein einzelner Zugriff auf eine Datei
    hat, „mutual exclusion“
     • Binäre Dateien...
Weitere Arbeitsschritte
•   Anlegen
     • einer Marke, „tag“
     • eines Zweiges, „branch“
     • eines neuen Projekts

...
Branching und Taggen
•   Mehrere Versionen
     • Feature
     • Version / Release
     • Vendor

•   Konventionen
     • ...
Ablauf der Softwareentwicklung
•   Neueste Entwicklung im /trunk
•   Wenn eine Version 1.0 fertiggestellt wurde
     • Ers...
Kopien bei Subversion
•   Billige Kopien
     • „Cheap Copies“
     • O(1) Platz und Zeit

•   Interpretation einer Kopie
...
Einen Zweig anlegen
•   Mit svn copy können Kopien angelegt werden
     • svn copy SOURCE@REV DEST

•   Möglichkeiten
    ...
Zusammenführen / Mergen
•   Ein Zweig kann in einen anderen überführt werden
     • Merge
     • In Version 1.5 wesentlich...
Changesets
•   „changeset“
     • Mit Namen identifizierte Menge von Änderungen
           • Änderungen
              •Dat...
Zusammenführen / Mergen
•   Annahme: Branch updaten, trunk zu branch
           • Wichtig: Keine lokalen Änderungen
      ...
Zusammenführen / Mergen
•   Den Branch zurück in den Trunk
      • svn co trunk
      • svn update
      • svn merge --rei...
Zusammenführen / Mergen
•   Informationen werden von Subversion gespeichert
      • svn:mergeinfo

•   Zugriff mit
     • ...
Zusammenführen / Mergen
•   Cherrypicking, „backporting“
     • Auswahl von Changesets (nicht alle) mergen
     • Beispiel...
Undo
•   Falls ein Commit einen Fehler enthielt

•   „Rückgängig“ machen mit

     •   svn merge --revision 303:302
     •...
Fortgeschrittene Themen



       © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
Revisionsnummern
•   Sind in Interval spezifizierbar
     • -r REV1:REV2

•   Symbolische Revisionsnummern
     • HEAD
   ...
Revisionen
•   Revisionen sind auch als Datum spezifizierbar
     • Datumsformat nach ISO-8601

•   Die Revision vom 17.06...
Metadaten
•   Metadaten, „properties“
     • Versioniert
           • Verzeichnisse, Dateien
     •   Unversionierte
     ...
Metadaten
•   Manipulation von Metadaten
     • Setzen
           • svn propset NAME WERT DATEI
           • svn propset N...
Eigenschaften von Dateien
•   svn:mime-type
     • Für binäre Typen wird z. B. kein Merge/Resolve
       angeboten
       ...
Ignorieren von Dateien
•   Bestimmte Dateien sollen nicht ins Repository
     • Temporäre Dateien
     • Dateien, die Pass...
Ersetzung von Schlüsselwörtern
•   In Dollarzeichen eingeschlossen
•   Schlüsselwörter
      • Date, LastChangedDate
     ...
Beschränkung der Tiefe
•   Seit 1.5 kann die Verzeichnistiefe spezifiert werden
     • „sparse directories“

•   Argumente...
Externe Definitionen
•   Metadaten-Attribut
     • svn:externals

•   Enthält Liste von „virtuellen“ Verzeichnissen

     •...
Komplexe Tags
•   Manchmal notwendig:
     • Zusammenbasteln einer Distribution
           • Sourcecode Version 1.0.3
    ...
Peg-Revisionen
•   Im Laufe der Zeit kann
      • Ein Pfad mehrere Objekte kennzeichnen
      • Ein Objekt mehrere Pfade h...
Changelists
•   Vorbild sind „tags“ von Gmail, Flickr und YouTube
     • Seit Version 1.5
•   Operationen
     • Erzeugen ...
Netzwerk
•   Bei Verbindung
     • Server schickt „Gruss“ mit Fähigkeiten/Protokollen
     • Client antwortet mit Fähigkei...
Unterschiede zu CVS
•   Addressierung
     • P:L.T vs. P:T.L
•   Folgen
     • Versionierung der Inhalte der einzelnen Dat...
Unterschiede zu CVS
•   Tagging und Branching
     • Ist bei CVS gesondertes Konzept
     • Nicht so einfach

•   SVN: erk...
Language-Bindings
•   Benutzung von Subversion in anderen Programmen

     •   Ant        SVNAnt
     •   C++         SVNC...
Benutzung mit Ant
•   Möglichkeiten
     • SvnAnt
     • SvnKit
•   Pfad mit Jar-Dateien aus SvnAnt und Task definieren
  ...
Benutzung mit Ant
•   Der <svn>-Task kennt die folgenden Attribute
     •   username, password
     •   javahl, javasvn
  ...
Kritikpunkte an Subversion
•   Kritik am Client-Server-Modell
     • Zugriff zum Repository (Netzwerk) nötig
         • Co...
Installation und Konfiguration



          © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
Konfiguration für Benutzer
•   Konfiguration für jeden User
     • $HOME/.subversion unter Unix
     • Anwendungsdaten/Subv...
Installation des Servers
•   Download von http://subversion.tigris.org
     • Binärpackete für alle gängigen Plattformen
 ...
Anlegen von Repositories
•   Grundsätzliche Fragen
     • Anzahl der Repositories
           • Ein Repository für alle Pro...
Anlegen von Repositories
•   Zwei Arten von Repositories
     • Berkeley DB (BDB)
          • Inzwischen leicht veraltet
 ...
Anlegen von Repositories
•   Anlegen mit
     • $ svnadmin create repositories/test1

•   Unterverzeichnisse
     •   conf...
Zwei verschiedene Server
•   svnserve
     • svnserve + SASL
          • Integration mit LDAP, Active Directory etc.
     ...
Vor- und Nachteile der Server
•   svnserve
     • + Leichtgewichtig, „quick and easy“
     • + Keine Benutzerkonten einzur...
Konfigurationsoptionen
•   Verschlüsselung
     • svnserver
           • CRAM-MD5
     •   Cyrus-SASL-Support
           • ...
Konfiguration von svnserv
•   Eigenständiger Dämon
     • svnserve -d -r $HOME/subversion/repositories

•   Integriert in i...
Konfiguration in conf (einfach)
•   svnserv.conf
•   [general]
    password-db = passwd
    realm = Test Repository 1
    a...
Konfiguration in conf (einfach)
•   Paare von Benutzern und Passwörtern mit passwd
    [users]
    harry = harryssecret
   ...
Zugriffskontrolle mit SASL
•   Seit Version 1.5
      • Unterstützung von Cyrus SASL
      • Nur, wenn Server und Client d...
Konfiguration mit Apache 2
•   Benötigt
     • Apache 2, nicht 1.3
     • mod_dav-Modul (von Apache 2)
     • mod_dav_svn B...
Laden der Module
•   Zentrale Konfigurationsdatei von Apache 2
     • httpd.conf
•   Ergänzende Einträge
     •   <Locatio...
Authentisierung über HTTP
•   Verwalten der Benutzerinformationen mit
     • htpasswd -cm /etc/svn-secrets USERNAME
•   Er...
Authentisierung über HTTP und SSL
•   Alternative
     • Übertragung von verschlüsselten Passwörtern
     •   AuthType Dig...
Authorisierung
•   Für alle Benutzer und jeden Zugriff
     •   Require valid-user


•   Einschränkung der Zugriffsart
   ...
Pfadbasierte-Authorisierung
•   Feinere Unterteilung ist möglich
     • mod_authz_svn
•   Dieses muss ebenfalls geladen we...
Pfadbasierte Rechtevergabe
•   Rechtevergabe auf Basis von Pfaden
     • Gleiche Syntax bei Apache 2 und Subversion

•   F...
Pfadbasierte Rechtevergabe
•   Allgemeine Syntax
     •   [REPOSITORY:PFAD]
     •   USER = RW
•   Überschreiben ist mögli...
Pfadbasierte Rechtevergabe
•   Bildung von Gruppen von Benutzern
     •   [groups]
     •   entwickler = harry, sally
    ...
Konfiguration mit hooks
•   Hier können selbstgeschriebene Skripte aufgerufen
    werden
      • start-commit
      • pre-c...
Referenzen



 © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
Bücher (Auswahl)
•   C. Michael Pilato, Ben Collins-Sussman,
    Brian W. Fitzpatrick. Version Control with
    Subversion...
Webseiten
                  Hauptseite                         http://subversion.tigris.org

   Subversion      CollabNet ...
Nächste SlideShare
Wird geladen in …5
×

Subversion Schulung

5.905 Aufrufe

Veröffentlicht am

Einführung in die Versionskontrolle mit Subversion.

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

Subversion Schulung

  1. 1. Schulung „Subversion“ © 2008 - 2009 Jörn Dinkla joern@dinkla.com http://www.dinkla.com A lot of diagrams are copied from the online subversion book (see the references at the end of the document). © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
  2. 2. Vorstellung • Dipl.-Inform. Jörn Dinkla • Schwerpunkte • Java Entwicklung (J2SE, JEE) • Moderne Programmiersprachen • Groovy, Ruby, Haskell, Scala • Modellgetriebene Entwicklung • Automatisierung • Eclipse • Plugin-Entwicklung • CUDA, OpenCL • Hobbies • Musik, Literatur © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 2
  3. 3. Überblick © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
  4. 4. Überblick • Versionsverwaltung • Subversion • Grundlagen • Praxis • Benutzung bei typischen Arbeitsschritten • Fortgeschrittene Praxis • Installation und Konfiguration • Zwischendurch • Hands-on • Gemeinsam benutzen, installieren, konfigurieren © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 4
  5. 5. Versionsverwaltungen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
  6. 6. Versionsverwaltungen • Ähnlichkeit zu einem Fileserver oder Dateisystem • Aber: zusätzlich die zeitliche Dimension • Ein Dateisystem mit Gedächtnis • „persistente“ Datenstruktur [CLR90] © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 6
  7. 7. Versionsverwaltung • Unterschiedliche Namen • Revision Control System • Version Control System (VCS) • Source Code Management (SCM) © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 7
  8. 8. Versionsverwaltung • Protokollierung von Änderungen • „Wer hat was wann geändert?“ • Wiederherstellung von alten Zuständen • „Das hat doch schon mal funktioniert!“ • Archivierung der Releases • Gleichzeitige Entwicklung mehrere Varianten • Neue Entwicklung • Fehlerbehebung bei älteren Versionen • Koordinierung des gemeinsamen Zugriffs • „collaborative editing and sharing“ © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 8
  9. 9. Theoretische Grundlagen • Unterschiede zwischen Versionsverwaltungen • Repository-Modell • Speicherung von Entitäten • Verzeichnisse, Dateien, Symbolische Verweise • Mögliche Operationen: • Beispiel: Umbenennen von Dateien • Kontrolle des Zugriffs • Sperren, Locks • Atomare Transaktionen • Metadaten • Konfigurierbarkeit • Schnittstellen für Administratoren und Benutzer © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 9
  10. 10. Repository-Modell • Zentral • Client-Server • Repository auf dem Server • Auf dem Client nur Arbeitskopien Repositor Commit Checkout Update User A User B User C © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 10
  11. 11. Repository-Modell • Verteilt • Jeder hat ein Repository • Bzw. nur noch Arbeitskopien • Vollständige Funktionalität ohne Netzverbindung • Commits, Branches usw. • Zentrales Repository nur noch für Backups User A User C Repositor User B © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 11
  12. 12. Architektur • Dimensionen eines Repositories • Projekt (P wie „project“) • Pfad (L wie „location“) • Zeit (T wie „time“) • Addressierung • P: L, T (CVS) • Jedes Dokument wird einzeln versioniert • P: T, L (SVN) • Der gesamte Baum wird versioniert • Implikationen • Umbenennen von Dateien und Verzeichnissen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 12
  13. 13. Kontrollierte Zugriff • Mehrere Benutzer • Gleichzeitige Änderungen ? • Überschreiben von Informationen ? • Kontrolle • Zugriff • Locks / Sperren • lock-modify-unlock • Änderungen • Konflikte • copy-modify-merge © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 13
  14. 14. Zugriff: Lock-Modify-Unlock • Vor dem Bearbeiten • Sperren • Nach dem Bearbeiten • Entsperren © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 14
  15. 15. Zugriff: Lock-Modify-Unlock • Nachteile • Ist sehr restriktiv • Mitarbeiter lockt Datei und geht in den Urlaub • Unnötigerweise sequentiell • Nur einer kann eine Datei bearbeiten • Lock auf Dateiebene • „Falsche Sicherheit“ • Abhängigkeiten werden nicht berücksichtigt •Entwickler ändert Klasse A •Ein Anderer ändert Klasse B •Beide checken zeitgleich ein •Code läuft nicht mehr, da A und B voneinander abhängen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 15
  16. 16. Zugriff: Copy-Modify-Merge • Gleichzeitige Änderungen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 16
  17. 17. Zugriff: Copy-Modify-Merge • Harry merged die Änderungen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 17
  18. 18. Zugriff: Copy-Modify-Merge • Auflösen eines Konflikts • Manuelles Auflösen pro geändertem Bereich • Vorteile • Konflikte sind relativ selten • Benutzer können parallel an Dateien arbeiten • Locking wird dennoch benötigt • Nicht „mergebare“ Dateitypen • Binäre Dateien, Bilder, Fotos, etc. © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 18
  19. 19. Eine kurze Geschichte • Source Code Control System (SCSS) • 1972 Bell Labs • Revision Control System (RCS) • Anfang der 80er, Walter F. Tichy • Concurrent Versions System (CVS) • Mitte 80er • Subversion • Ein besseres CVS • Entwicklung seit Anfang 2000 • Version 1.0 im Februar 2004 • Verteilte Systeme (Distributed, DVCS) • Werden seit 2004 entwickelt © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 19
  20. 20. Kommerzielle Produkte • Eine Auswahl, alphabetisch sortiert • BitKeeper (BitMover Inc.) • ClearCase™ (IBM) • Continuus™ • Perforce™ (Perforce Software Ltd.) • PVCS™ • StarTeam™ • VisualSourceSafe™ (Microsoft) • Produkte mit integrierter Versionsverwaltung • Microsoft Word(TM) • Open Office • Wiki‘s © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 20
  21. 21. Neue Entwicklungen • SVK • Ergänzung zu Subversion • Verteilte Systeme • Bazaar • Mercurial • Git • Monotone • Darcs © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 21
  22. 22. Subversion © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
  23. 23. Architektur von Subversion • GUI • Client • Netzwerk • Server • Repository • Speicher © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 23
  24. 24. Subversion • Adressierung • P: T, L • Der gesamte Baum wird versioniert • Versionierung von • Verzeichnissen • Dateien • Symbolischen Verweisen • Echte Versionshistorie • Atomare Commits • Versionierte Metadaten • „Billige Kopien“ • Flexible Netzwerkschicht © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 24
  25. 25. Subversion • Arbeitskopie • SVN speichert in .svn ausgescheckte Kopie • Änderungen können auch ohne Verbindung zum Repository festgestellt werden • Nachteil: Speicherplatzverdopplung • SVN verwaltet Inhalte in • FSFS (seit 1.1) • Berkeley DB • Repository-Inhalte werden komprimiert • „deltification“, „deltified storage“ • Binärer 3-Wege-Differenzalgorithmus (seit 1.2) • Identisch für Text und Binärdateien © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 25
  26. 26. Geschichte • Subversion • 1.0 CVS-Ersatz • 1.1 2004/09 FSFS, Symbolische Links • 1.2 2005/05 Sperren, binärer Differenzalgorithmus • 1.3 2005/12 Pfadbasierte Autorisierung, API-Bindings • 1.4 2006/09 Replizierung, Metadaten überarbeitet • 1.5 2008/06 Verbesserungen B&M, SASL, Authentifizierung • 1.6 2009/05 Konfliktbearbeitung • URL • http://subversion.tigris.org/ • http://svnbook.red-bean.com/ © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 26
  27. 27. Clients • Für die Arbeit mit Subversion gibt es viele Möglichkeiten • Kommandozeile • svn, svnadmin, svnserve, etc. • Integration in den Desktop • TortoiseSVN (Windows) • SCPlugin (Mac OS X) • KSvn (Linux KDE) • Standalone-Programme • RapidSVN • Integration in IDE • Eclipse, NetBeans, VisualStudio, etc. © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 27
  28. 28. Clients: GUI • Auswahl: RapidSVN und Eclipse © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 28
  29. 29. Clients: WebSVN • Zugriff mit WebSVN © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 29
  30. 30. Clients: Kommandozeile • Alle Programme • Für „normale“ Benutzer ist nur svn wichtig svn Das Programm für Benutzer svnadmin Das Programm für Administratoren svnlook Werkzeug zur Administration svnsync Backup / Spiegeln eines Repositories svnserve Subversion-Server svndumpfilter Administration, Dumps von Repositories svnversion Gibt die Revisionsnummern an mod_dav_svn Plugin für den Apache HTTP-Server © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 30
  31. 31. Kommandozeilenargumente • Für die meisten Programme gibt help eine Übersicht. • Beispiele • svn help • svn help checkout • Kommandozeilenargumente • Kurze Version • -s • Lange Version • --eine-lange-option • Nicht für alle Argumente gibt es eine kurze Version © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 31
  32. 32. Repositories und URLs • Abbildung zwischen URL und Dateien im Repository • svn://localhost/test1/trunk/beispiel-java/build.xml © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 32
  33. 33. Repositories und URLs • URL: • PROTOKOLL://HOST [:PORT]/REPOSITORY/PFAD • Unterstütze Protokolle • file, http, https, svn, svn+ssh • Standard-Port: 3690 • Beispiele • svn://localhost/testrepository/trunk/projekt/bilder • http://svn.collab.net/repos/svn/trunk/ © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 33
  34. 34. Typische Arbeitsschritte • Einmalig: Projekt auschecken • Arbeiten • svn add, svn delete, svn copy, svn move • Synchronisieren • Aktualisieren • svn update • Änderungen rückgängig machen • svn revert • Konflikte lösen • svn update • svn resolved • Änderungen schreiben • svn commit © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 34
  35. 35. Projekt auschecken • Auschecken • svn checkout URL@REV PFAD • Es wird eine lokale Arbeitskopie erstellt • Gewöhnliches Verzeichnis • Dateien können editiert werden • Achtung bei Löschen/Verschieben •svn copy, move und delete benutzen • Enthält .svn Verzeichnis • Nicht ändern oder löschen !!! • Enthält Kopie der Dateien/Verzeichnisse •Speicherplatz verdoppelt • Dadurch Netzwerkunabhängig © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 35
  36. 36. Arbeitskopie • Für jede Datei wird gespeichert • Ausgecheckte Revisionsnummer, „working revision“ • Zeitpunkt der letzten Änderung durch das Repository • Informationen • svn info • svn status • svn status --verbose • svn list • svn diff • svn log • svn cat © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 36
  37. 37. Arbeitskopie: Zustände • Änderungen möglich • Lokal in der Arbeitskopie • Im Repository • Daher: Vier Zustände einer Datei / eines Verzeichnisses Arbeitskopie Arbeitskopie unverändert geändert Repository Commit unverändert Update Repository Update Konflikte lösen geändert Commit © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 37
  38. 38. Arbeitskopie: Zustände • Ausgabe von svn status -u ? scratch.c A stuff/loot/bloo.h C stuff/loot/lump.c D stuff/fish.c M bar.c • Erklärung • A Hinzugefügt, „addition“ • C Konflikt, „conflict“, Muss gelöst werden, „resolve“ • D Gelöscht, „deletion“ • M Geändert, „modified“ © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 38
  39. 39. Arbeiten • svn add DATEINAME • Fügt Datei hinzu • svn delete DATEINAME • Löscht eine Datei • svn copy DATEINAME1 DATEINAME2 • Kopiert eine Datei • svn move DATEINAME1 DATEINAME2 • Verschiebt eine Datei • svn mkdir VERZEICHNISNAME • Erstellt ein Verzeichnis © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 39
  40. 40. Synchronisieren • Neue Versionen müssen explizit geholt werden • svn update • Lokale Änderungen müssen explizit committed werden • svn commit • Löschen nur, wenn aktuell • Änderungen an Metadaten nur, wenn aktuell © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 40
  41. 41. Konflikte lösen • Falls update auf einen Konflikt stösst, muss dieser gelöst werden • Ab 1.5 per Kommandozeile interaktiv möglich • Besser: Die IDE‘s bieten hier gute Unterstützung. • assertTrue(result.length() > 0); • <<<<<<< .mine • result = Doctor.answer("XGSHDHDHDHHDHDHXHHS"); • ======= • result = Doctor.answer("A very, very long String. A very, very long String. A • very, very long String. A very, very long String. "); • >>>>>>> .r18 • assertNotNull(result); © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 41
  42. 42. Konflikte lösen • Bei einem Konflikt gibt es die folgenden Möglichkeiten • Aufschieben • Version aus Arbeitskopie übernehmen • Version aus Repository übernehmen • Dateien ineinanderführen, „mergen“ © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 42
  43. 43. Konflikte lösen • Bei einem aufgeschobenen Konflikt werden die folgenden Dateien angelegt. • DATEINAME.mine • Die Datei vor dem Update • DATEINAME.rOLDREV • Die Datei des letzten Updates • DATEINAME.rNEWREV • Die aktuelle Datei im Repository © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 43
  44. 44. Sperren • Sicherstellen, dass nur ein einzelner Zugriff auf eine Datei hat, „mutual exclusion“ • Binäre Dateien, z. B. Bilder • Syntax • svn lock PFAD • svn unlock PFAD • Wichtig: • Nach einem Commit werden alle Locks aufgehoben • Locks können wieder aufgehoben werden • svn unlock --force PFAD • Attribut svn:needs-lock • Die Datei ist dann nur lesbar, nur nach dem Sperren beschreibbar © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 44
  45. 45. Weitere Arbeitsschritte • Anlegen • einer Marke, „tag“ • eines Zweiges, „branch“ • eines neuen Projekts • Zusammenführen von Zweigen, „merge“ © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 45
  46. 46. Branching und Taggen • Mehrere Versionen • Feature • Version / Release • Vendor • Konventionen • Entwicklung gegen trunk • „HEAD“, „BASE“ • Tags kommen in den Ordner tags • Die Dateien werden nicht mehr modifiziert • Zweige kommen in den Ordner branches © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 46
  47. 47. Ablauf der Softwareentwicklung • Neueste Entwicklung im /trunk • Wenn eine Version 1.0 fertiggestellt wurde • Erstellung eines Branches in /branches/v1.0 • Parallel • Entwicklung von 1.1 im /trunk • Test und QA in /branches/v1.0 • Evtl. Merges zurück in den /trunk • Ausliefierung • Markierung in /tags/v1.0 • /trunk und /branches sind Arbeitsbereiche • Im Verzeichnis /tags wird nichts geändert © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 47
  48. 48. Kopien bei Subversion • Billige Kopien • „Cheap Copies“ • O(1) Platz und Zeit • Interpretation einer Kopie • als Zweig, „branch“ • als Markierung, „tag“ • Bei Tags werden keine • Änderungen mehr durchgeführt © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 48
  49. 49. Einen Zweig anlegen • Mit svn copy können Kopien angelegt werden • svn copy SOURCE@REV DEST • Möglichkeiten • Arbeitskopie -> Arbeitskopie • Arbeitskopie -> Repository • Repository -> Arbeitskopie • Repository -> Repository • Beispiel svn copy svn://host/repo/trunk svn://host/repo/branches/version-1.0 -m „Version 1.0“ © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 49
  50. 50. Zusammenführen / Mergen • Ein Zweig kann in einen anderen überführt werden • Merge • In Version 1.5 wesentlich verbessert • Daher hier: 1.5 Client und Server • Warnung: Zweige können sich auch zu weit voneinander entfernen • Daher regelmäßig mergen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 50
  51. 51. Changesets • „changeset“ • Mit Namen identifizierte Menge von Änderungen • Änderungen •Dateien •Verzeichnisbaum •Metadaten • Ein „patch“ mit einem Namen • Die Änderungen von Revision N-1 zu N • svn log -r REV • svn diff -c REV • svn merge -c REV © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 51
  52. 52. Zusammenführen / Mergen • Annahme: Branch updaten, trunk zu branch • Wichtig: Keine lokalen Änderungen •svn status • svn merge trunk • Untersuchen • svn status • svn diff • Bauen und testen oder rückgängig machen • svn revert -R • Besser als „patch“ • Strukturänderungen, Metadaten • Historie • Erneuter Aufruf merged nur die jeweils neuen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 52
  53. 53. Zusammenführen / Mergen • Den Branch zurück in den Trunk • svn co trunk • svn update • svn merge --reintegrate branchurl • --reintegrate notwendig • Da es wieder in den Ursprungszweig geht • Nur die Änderungen des Branches • Nicht die aus dem Trunk entnommenen • Prüfen • svn commit • Evtl. • svn delete branchurl • Geschichte bzw. logs bleiben erhalten © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 53
  54. 54. Zusammenführen / Mergen • Informationen werden von Subversion gespeichert • svn:mergeinfo • Zugriff mit • svn mergeinfo • svn mergeinfo --fromsource • Ein Merge kann auch nur getestet werden • svn merge --dry-run © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 54
  55. 55. Zusammenführen / Mergen • Cherrypicking, „backporting“ • Auswahl von Changesets (nicht alle) mergen • Beispiel: • Bestimmte Sammlung von Bug-Fixes aus dem Trunk zu Version 1.0 • svn merge -c REV URL © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 55
  56. 56. Undo • Falls ein Commit einen Fehler enthielt • „Rückgängig“ machen mit • svn merge --revision 303:302 • svn merge --change -303 • svn merge -c -303 • Das Changeset wird „rückwärts“ angewendet • Achtung: Das Repository enthält die vollständige Geschichte • Der Commit ist in der Geschichte noch vorhanden © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 56
  57. 57. Fortgeschrittene Themen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
  58. 58. Revisionsnummern • Sind in Interval spezifizierbar • -r REV1:REV2 • Symbolische Revisionsnummern • HEAD • Die aktuellste Version im Repository • BASE • Die Versionsnummer der lokalen Kopie • COMMITTED • Revision der letzten Änderung • PREV • COMMITTED - 1 © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 58
  59. 59. Revisionen • Revisionen sind auch als Datum spezifizierbar • Datumsformat nach ISO-8601 • Die Revision vom 17.06.2008 • svn checkout -r {2008-06-17} • Die Revision von 15 Uhr 30 • svn checkout -r {15:30} • Die Unterschiede der Revisionen vom 17. bis zum 20.06.2008 • svn diff -r {2008-06-17}:{2008-06-20} • Achtung: • Zeitstempel von Entitäten können geändert werden © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 59
  60. 60. Metadaten • Metadaten, „properties“ • Versioniert • Verzeichnisse, Dateien • Unversionierte • Revisionen • Schlüssel-Wert-Paare • Frei definierbar • svn:mime-type=text/plain • mein-property=Bug#123 • Mit Präfix svn: sind von Subversion reserviert • Konflikte werden ähnlich wie bei Dateien gehandhabt © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 60
  61. 61. Metadaten • Manipulation von Metadaten • Setzen • svn propset NAME WERT DATEI • svn propset NAME -F DATEINAME DATEI • Editieren • svn propedit NAME DATEI • Anzeigen • svn proplist [-v] DATEI • svn propget NAME DATEI • Löschen • svn propdel NAME DATEI • Nur lineare Suche möglich • Schlechte Performanz © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 61
  62. 62. Eigenschaften von Dateien • svn:mime-type • Für binäre Typen wird z. B. kein Merge/Resolve angeboten • *.oldrev BASE-Revision • *.newrev • svn:executable • Ist Datei ausführbar (das +x Flag von chmod) • svn:eol-style • Zeilentrennsymbol: native, CRLF, LF, CR © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 62
  63. 63. Ignorieren von Dateien • Bestimmte Dateien sollen nicht ins Repository • Temporäre Dateien • Dateien, die Passwörter enthalten • Generierte bzw. kompilierte Dateien • Backup-Dateien (*.bck, *~) • Möglichkeiten • Runtime Configuration Area • Attribut global-ignores • Liste von Dateimustern, durch Leerzeichen getrennt • Metadaten-Eigenschaft für ein Verzeichnis • svn:ignore • Funktioniert ähnlich wie .cvsignore © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 63
  64. 64. Ersetzung von Schlüsselwörtern • In Dollarzeichen eingeschlossen • Schlüsselwörter • Date, LastChangedDate • Revision, Rev, LastChangedRevision • Author, LastChangedBy • HeadURL, URL • Id • Wird nur aktiv, wenn das Attribut svn:keywords gesetzt wurde • svn propset svn:keywords „Date Author“ DATEI © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 64
  65. 65. Beschränkung der Tiefe • Seit 1.5 kann die Verzeichnistiefe spezifiert werden • „sparse directories“ • Argumente • --depth empty • --depth files • --depth immediates • --depth infinity • Mit --set-depth kann die Tiefe geändert werden. • svn update --set-depth immediates PFAD © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 65
  66. 66. Externe Definitionen • Metadaten-Attribut • svn:externals • Enthält Liste von „virtuellen“ Verzeichnissen • icons svn://localhost/art/icons • sounds -r69 svn://localhost/art/sounds • Ermöglicht redundanzfreie Speicherung • Allerdings • Nicht für einzelne Dateien • Nur absolute URLs • Sind extern, commit muss explizit aufgerufen werden © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 66
  67. 67. Komplexe Tags • Manchmal notwendig: • Zusammenbasteln einer Distribution • Sourcecode Version 1.0.3 • Bibliotheken auch, aber nicht das GUI • Datenbanktreiber muss durch neueren ersetzt werden • etc. • Experimentelles Feature wurde implementiert • Soll aber nicht in den Trunk • Schreiben der Arbeitskopie in das Repository • svn copy ARBEITSKOPIE URL © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 67
  68. 68. Peg-Revisionen • Im Laufe der Zeit kann • Ein Pfad mehrere Objekte kennzeichnen • Ein Objekt mehrere Pfade haben • Grund: Verschieben und Umbenennen • Beispiel • Datei angelegt, Gelöscht und wieder angelegt • Lösung: Peg-Revision • svn KOMMANDO [-r REV] PFAD@PEG-REV > svn cat datei@28 123 > svn cat datei@30 456 © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 68
  69. 69. Changelists • Vorbild sind „tags“ von Gmail, Flickr und YouTube • Seit Version 1.5 • Operationen • Erzeugen mit • svn changelist NAME PFAD1 PFAD2 ... • Entfernen • svn changelist NAME --remove PFAD • Changelists können als Filter dienen • svn commit --changelist NAME © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 69
  70. 70. Netzwerk • Bei Verbindung • Server schickt „Gruss“ mit Fähigkeiten/Protokollen • Client antwortet mit Fähigkeiten/Protokollen • Erst wenn Authentisierung notwendig ist • Identifikation über Challenge-Response • Vom Server initiiert • Daten werden bei Commits als Author benutzt • Anschliessend, falls konfiguriert • Berechtigungskontrolle © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 70
  71. 71. Unterschiede zu CVS • Addressierung • P:L.T vs. P:T.L • Folgen • Versionierung der Inhalte der einzelnen Dateien • unabhängig voneinander • Versionsnummer bezieht sich auf das gesamte Archiv • Löschen und Umbenennen bei CVS • Nur leere Verzeichnisse • Keine Kopien (komplett neue Datei) • Umbennen/Verschieben: Kopie anlegen und alte löschen • Immer mit Verlust der Historie © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 71
  72. 72. Unterschiede zu CVS • Tagging und Branching • Ist bei CVS gesondertes Konzept • Nicht so einfach • SVN: erkennt Binärdaten weitestgehend automatisch • Verwechslungsgefahr • cvs update entspricht svn status • svn update holt Dateien vom Repository © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 72
  73. 73. Language-Bindings • Benutzung von Subversion in anderen Programmen • Ant SVNAnt • C++ SVNCPP • C# SubversionSharp • Java SVNKit (pure Java) • Maven Maven SCM Plugin • .Net 2.0 SharpSvn • Perl • PHP PECL SVN • Python PySVN • Ruby © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 73
  74. 74. Benutzung mit Ant • Möglichkeiten • SvnAnt • SvnKit • Pfad mit Jar-Dateien aus SvnAnt und Task definieren <path id="svn.path"> <fileset dir="${lib.dir}"/> </path> <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svn.path" /> • Aufruf geschieht mit <svn>-Task <svn username="harry" password="***"> <checkout url="svn://host/trunk" destPath="dir"/> </svn> © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 74
  75. 75. Benutzung mit Ant • Der <svn>-Task kennt die folgenden Attribute • username, password • javahl, javasvn • dateFormatter, dateTimeZone • failonerror • Es gibt die folgenden Subtasks • <add>, <cat>, <checkout>, <commit> • <copy>, <createRepository>, <delete>, <diff> • <export>, <ignore>, <import>, <info>, <keywordsset> • <keywordsadd>, <keywordsremove>, <move> • <mkdir>, <propdel>, <propget>, <propset>, <revert> • <status>, <switch>, <update>, <wcVersion> © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 75
  76. 76. Kritikpunkte an Subversion • Kritik am Client-Server-Modell • Zugriff zum Repository (Netzwerk) nötig • Commit • Branching / Tagging / Merging • Arbeitskopie benutzt doppelten Speicherplatz • Umlautprobleme zwischen Windows - Mac OS X - Unix • Nur für Version 1.4, in Version 1.5 behoben • Merging nicht History-aware • Manuelles Notieren von Revisionsnummern • Teilen von Arbeitsergebnissen zwischen zwei Entwicklern ohne COMMIT nicht möglich © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 76
  77. 77. Installation und Konfiguration © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
  78. 78. Konfiguration für Benutzer • Konfiguration für jeden User • $HOME/.subversion unter Unix • Anwendungsdaten/Subversion unter Windows • auth • Verzeichnis mit gespeicherten Authentisierungsdaten • config • Editor, Diff, Zeichensätze, etc • servers • Server und Zugriff auf diese © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 78
  79. 79. Installation des Servers • Download von http://subversion.tigris.org • Binärpackete für alle gängigen Plattformen • Entpacken bzw. Aufrufen • Sourcen • subversion-1.5.0.tar.bz2 • subversion-deps-1.5.0.tar.bz2 [oft optional] • Kompilieren • $ tar xjf subversion-1.5.0.tar.bz2 • $ cd subversion-1.5.0 • $ ./configure --prefix=/opt/local • $ make • $ make check • $ make install © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 79
  80. 80. Anlegen von Repositories • Grundsätzliche Fragen • Anzahl der Repositories • Ein Repository für alle Projekte? •Vorteil: Einfache Wartung •Commit-Notifications, Triggers, Events • Jedem Projekt ein eigenes Repository ? •Vorteil: klare Struktur für Benutzer • Zugriff? • Protokoll?, Email?, Firewall? • Struktur des Repositories • Globales trunk, branches, tags • Oder per Projekt? © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 80
  81. 81. Anlegen von Repositories • Zwei Arten von Repositories • Berkeley DB (BDB) • Inzwischen leicht veraltet • Daten werden in Datenbank gespeichert • Bei Abstürzen wird Administrator benötigt • FSFS • Daten werden im Dateisystem gespeichert • Default seit Version 1.2 • Wird am meisten benutzt • Ein wenig flexibler • Daher: FSFS ! © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 81
  82. 82. Anlegen von Repositories • Anlegen mit • $ svnadmin create repositories/test1 • Unterverzeichnisse • conf • User, Passwörter • db • Das FSFS-Repository • hooks • „Customizing“ • locks • Sperren © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 82
  83. 83. Zwei verschiedene Server • svnserve • svnserve + SASL • Integration mit LDAP, Active Directory etc. • svnserve + SSH [ + SASL ] • Apache 2 • Integration mit LDAP, Active Directory etc. • Komfortables Logging • Proxy-Mechanismen für Lese-Zugriffe • Benutzung von Apache2-Erweiterungen • LDAP (Open LDAP) © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 83
  84. 84. Vor- und Nachteile der Server • svnserve • + Leichtgewichtig, „quick and easy“ • + Keine Benutzerkonten einzurichten • - Kein Logging • - Nur eine Authentisierungsmethode • - keine Verschlüsselung • svnserve mit SSH • + Existierende SSH-Benutzerkonten • + Verschlüsselt • Apache HTTP Server • + Vielseitig konfigurierbar • - Langsamer als svnserve © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 84
  85. 85. Konfigurationsoptionen • Verschlüsselung • svnserver • CRAM-MD5 • Cyrus-SASL-Support • Nicht bei allen Distributionen • Authentisierung • SSL-Zertifikate • Authorisierung / Zugangskontrolle • Für das gesamte Repository • Pfadbasiert • Lese- und Schreibrechte pro Verzeichnis © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 85
  86. 86. Konfiguration von svnserv • Eigenständiger Dämon • svnserve -d -r $HOME/subversion/repositories • Integriert in inetd • Eintrag in /etc/services • Eintrag in /etc/inetd.conf • svn stream tcp nowait svn /usr/bin/svnserve svnserve -i ... • SSH-Tunneling • SSH/RSH ruft temporären svnserve auf • svnserve -t © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 86
  87. 87. Konfiguration in conf (einfach) • svnserv.conf • [general] password-db = passwd realm = Test Repository 1 anon-access = none auth-access = write • password-db Datei mit Benutzern und Passwörtern • realm Realm / Domäne • anon-access Rechte für anonyme Benutzer • read, write, none • auth-access Rechte für eingeloggte Benutzer • read, write, none © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 87
  88. 88. Konfiguration in conf (einfach) • Paare von Benutzern und Passwörtern mit passwd [users] harry = harryssecret sally = sallyssecret • Pfad-und Rechtedefinitionen mit authz-db authz-db = DATEINAME • Später mehr hierzu ... © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 88
  89. 89. Zugriffskontrolle mit SASL • Seit Version 1.5 • Unterstützung von Cyrus SASL • Nur, wenn Server und Client dieses unterstützen • In svnserv.conf • Abschnitt sasl • use-sasl Soll SASL benutzt werden ? • min-encryption Minimale Schlüssellänge • max-encryption Maximale Schlüssellänge • 1 für Checksummen [sasl] use-sasl = true min-encryption = 128 max-encryption = 256 © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 89
  90. 90. Konfiguration mit Apache 2 • Benötigt • Apache 2, nicht 1.3 • mod_dav-Modul (von Apache 2) • mod_dav_svn Backend (von Subversion) • Und natürlich Subversion • Entweder müssen die Binärpackete diese enthalten oder man muss beim Kompilieren des Sourcecodes darauf achten • Apache2-Erfahrung ist ein Muss • Ein wenig „tricky“ © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 90
  91. 91. Laden der Module • Zentrale Konfigurationsdatei von Apache 2 • httpd.conf • Ergänzende Einträge • <Location /svn> • DAV svn • # SVNPath /pfad/zum/repository • SVNParentPath /pfad/zum • </Location> • Laden des Moduls für DAV (falls dynamisch gelinkt) • LoadModule dav_module modules/mod_dav.so • Laden des Moduls für Subversion • LoadModule dav_svn_module modules/mod_dav_svn.so • Sicherzustellen ist • ServerName oder NameVirtualHost gesetzt © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 91
  92. 92. Authentisierung über HTTP • Verwalten der Benutzerinformationen mit • htpasswd -cm /etc/svn-secrets USERNAME • Ergänzung der httpd.conf • <Location /svn> • DAV svn • SVNParentPath /pfad/zum • AuthType Basic • AuthName „Repository“ • AuthUserFile /etc/svn-secrets • Require valid-user • </Location> • Dieses ist für alle Requests • Passwörter werden unverschlüsselt übertragen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 92
  93. 93. Authentisierung über HTTP und SSL • Alternative • Übertragung von verschlüsselten Passwörtern • AuthType Digest • AuthDigestDomain /svn/ • Nachteil: • Client und Server müssen die Passwörter bekannt sein • Besser: • SSL • Subversion muss damit kompiliert worden sein • Siehe Apache 2-Handbücher • Jenseits dieses Vortrags © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 93
  94. 94. Authorisierung • Für alle Benutzer und jeden Zugriff • Require valid-user • Einschränkung der Zugriffsart • <LimitExcept GET PROPFIND OPTIONS REPORT> • Require valid-user • </LimitExcept> • Viele weitere mehr möglich • Siehe Apache 2-Handbücher © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 94
  95. 95. Pfadbasierte-Authorisierung • Feinere Unterteilung ist möglich • mod_authz_svn • Dieses muss ebenfalls geladen werden • LoadModule authz_svn_module modules/mod_authz_svn.so • Dieses • <Location /svn> • DAV svn • SVNParentPath /pfad/zum • AuthzSVNAccessFile /pfad/zur/datei • Satisfy Any • Require valid-user • </Location> • Achtung: Kann sehr rechenintensiv werden • SVNPathAuthz off © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 95
  96. 96. Pfadbasierte Rechtevergabe • Rechtevergabe auf Basis von Pfaden • Gleiche Syntax bei Apache 2 und Subversion • Frage: • Wird die wirklich benötigt? • Sind getrennte Repositories einfacher zu managen? • Administrationsaufwand ist hoch • Syntax für Pfadberechtigungen • [test1:/branches] • harry = rw • sally = r © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 96
  97. 97. Pfadbasierte Rechtevergabe • Allgemeine Syntax • [REPOSITORY:PFAD] • USER = RW • Überschreiben ist möglich (Vererbung) • [test1:/branches/V1.0] • harry = • Harry hat keinen Zugriff auf die Version 1.0 • Die Rechte der genausten Pfadangabe werden benutzt • [test1:/] • *=r • Alle Benutzer können test1 lesen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 97
  98. 98. Pfadbasierte Rechtevergabe • Bildung von Gruppen von Benutzern • [groups] • entwickler = harry, sally • alle = @entwickler, johny • Gruppen können Gruppen enthalten • Gruppen können bei der Rechtevergabe benutzt werden • [test1:/pfad/datei] • @entwickler = rw © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 98
  99. 99. Konfiguration mit hooks • Hier können selbstgeschriebene Skripte aufgerufen werden • start-commit • pre-commit • post-commit • pre-revprop-change • post-revprop-change • pre-lock • post-lock • pre-unlock • post-unlock • Ist nur Fortgeschrittenen zu empfehlen • Wird meistens nicht benötigt © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 99
  100. 100. Referenzen © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com
  101. 101. Bücher (Auswahl) • C. Michael Pilato, Ben Collins-Sussman, Brian W. Fitzpatrick. Version Control with Subversion. O‘Reilly. 2002. • Open-Source-Buch • http://svnbook.red-bean.com • Jeffrey Machols. Subversion in Action. Manning. 2004. • Mike Mason. Pragmatic Version Control using Subversion. Pragmatic Programmers, LLC. 2005. © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 101
  102. 102. Webseiten Hauptseite http://subversion.tigris.org Subversion CollabNet http://www.collab.net/ Buch http://svnbook.red-bean.com TortoiseSVN http://tortoisesvn.tigris.org/ Desktop Integration SCPlugin http://scplugin.tigris.org/ RapidSVN Admin http://rapidsvn.tigris.org/ Clients WebSVN http://websvn.tigris.org/ Konvertierung cvs2svn http://cvs2svn.tigris.org/ Subclipse http://subclipse.tigris.org/ Eclipse Subversive http://www.eclipse.org/subversive/ SVNAnt Ant Tasks http://subclipse.tigris.org/svnant.html Java Pure Java http://svnkit.com/ SVNKit Entwicklung Bibliothek Maven http://maven.apache.org/scm/plugins/index.html Subversion http://svk.bestpractical.com/view/HomePage SVK Erweiterungen Bazaar http://bazaar-vcs.org/ Darcs http://www.darcs.net/ Verteilte http://git.or.cz/ Git Systeme Mercurial http://www.selenic.com/mercurial/wiki/ Monotone http://www.monotone.ca/ © 2008 - 2009 Jörn Dinkla, http://www.dinkla.com 102

×