Versionskontrolle mit Subversion



Ähnliche Dokumente
Einfu hrung in Subversion mit TortoiseSVN

Software Engineering in der Praxis

FS cs108 Programmierpraktikum Subversion. Lukas Beck Cedric Geissmann Alexander Stiemer

Subversion als Werkzeug in der Software-Entwicklung Eine Einführung. Tobias G. Pfeiffer Freie Universität Berlin

Apache Subversion (SVN)

SVN-Einführung für das SEP DS und CM. Julian Timpner, Stefan Brenner, Stephan Rottmann

Einführung in Subversion

WinCVS Version 1.3. Voraussetzung. Frank Grimm Mario Rasser

Subversion. Einstieg in die. Versionskontrolle

Kurzanleitung zu. von Daniel Jettka

Wie benutzt man TortoiseSVN

Versionskontrolle mit Subversion

Sourcecodeverwaltung

Mercurial. or how I learned to stop worrying and love the merge. Ted Naleid IAIK

Verteilte Versionskontrolle mit GIT Dortmund Ansgar Brauner - GreenPocket GmbH - Köln

Einführung in Subversion. Tutorium SWP

Software-Engineering Grundlagen des Software-Engineering 7.3 Sourcecode-Verwaltung mit Versionsmanagement-Systemen Einführung in Subversion (SVN)

Versionsverwaltung mit Mercurial für Einsteiger

PROJEKTVERZEICHNIS EINRICHTEN

Versionsverwaltung mit SVN

Subversion. 17. Oktober Subversion. Norbert Perk. Warum Versionsverwaltung? Wie funktioniert. Was ist Subversion? Subversion- Server.

Versionsverwaltung GIT & SVN. Alexander aus der Fünten. Proseminar: Methoden und Werkzeuge, SS Lehrstuhl i9, Prof. Dr. T.

Die Projek*ools. Files, Git, Tickets & Time

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

git & git-flow Jens Sandmann Warpzone Münster e.v. Jens Sandmann (WZ) git & git-flow / 31

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

Konfiguration von Igel ThinClients fu r den Zugriff via Netscaler Gateway auf eine Storefront/ XenDesktop 7 Umgebung

Versionsverwaltung für die KU Betriebssysteme. Eine Einführung

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

Von SVN zu Git. Daniel Willmann cbna

MailUtilities: Remote Deployment - Einführung

CVS. The open standard for version control. (Concurrent Versions System) Maik Zemann CVS

Team- Entwicklung unter Eclipse

8. Dokumentenverwaltung mit CVS eine Einführung

Praktikum Ingenieurinformatik (PI)

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.

Bauteilattribute als Sachdaten anzeigen

Konfigurationsdateien mit Git verwalten

Einführung Git Interna Workflows Referenzen. Git. Fast Version Control System. Michael Kuhn

HSR git und subversion HowTo

Drucken von Webseiten Eine Anleitung, Version 1.0

SFTP SCP - Synology Wiki

Anleitung über den Umgang mit Schildern

SharePoint Workspace 2010 Installieren & Konfigurieren

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

WOT Skinsetter. Nun, erstens, was brauchen Sie für dieses Tool zu arbeiten:

Installation und Inbetriebnahme von Microsoft Visual C Express

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

Moodle aktuell halten mit Git

1 Vorraussetzungen. 2 Installiere Eclipse. FS 2015 Herausgabe: Dr. A. L. Schüpbach, D. Sidler, Z. István Departement Informatik, ETH Zurich

CVS-Einführung. Sebastian Mancke,

Simulationsprojekte einfacher mit Subversion und Trac

Leichte-Sprache-Bilder

Windows 7 Winbuilder USB Stick

SVN Windows Howto. Inhaltsverzeichnis. 1 Revisionsgeschichte

OSF Integrator für Btracking und Salesforce Anleitung für die Nutzer

Hex Datei mit Atmel Studio 6 erstellen

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Crashkurs Subversion / Trac / Provisioning. Jan Zieschang, , Berlin

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Erfahrungen mit Hartz IV- Empfängern

AutoCAD Dienstprogramm zur Lizenzübertragung

Step by Step Webserver unter Windows Server von Christian Bartl

Anleitung: Webspace-Einrichtung

an Hand eines Beispiels Konsole

Um dies zu tun, öffnen Sie in den Systemeinstellungen das Kontrollfeld "Sharing". Auf dem Bildschirm sollte folgendes Fenster erscheinen:

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Installations Guide für YAJSW und DTLDAP

Git - Fast Version Control System

Festplatte defragmentieren Internetspuren und temporäre Dateien löschen

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Subversion und Trac. Michael Trunner. 23. Januar Fachschaft Informatik und Softwaretechnik Universität Stuttgart

Datei Erweiterungen Anzeigen!

Guide DynDNS und Portforwarding

Microsoft Access 2013 Navigationsformular (Musterlösung)

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

1.3. Installation und Konfiguration von Filr Desktop

Musterlösung für Schulen in Baden-Württemberg. Windows Basiskurs Windows-Musterlösung. Version 3. Stand:

Idimager ein Bildverwaltungsprogramm-DAM Software

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me

Artikel Schnittstelle über CSV

Ihren Kundendienst effektiver machen

Schritt-Schritt-Anleitung zum mobilen PC mit Paragon Drive Copy 10 und VMware Player

transfer.net Erste Schritte mit transfer.net

Elexis-BlueEvidence-Connector

Beheben von verlorenen Verknüpfungen

Informationen zur Installation und Nutzung von Subversion (SVN)

Wie räume ich mein Profil unter Windows 7 auf?

Tutorial Speichern. Jacqueline Roos - Riedstrasse 14, 8908 Hedingen, jroos@hispeed.ch -

Adami CRM - Outlook Replikation User Dokumentation

Wiederherstellen der Beispieldatenbanken zum Buch Microsoft Project 2010

Finder > 'Programme' > 'Dienstprogramme' > 'Terminal'

Werkschau Web-Präsentationen

Proseminar Unix-Tools CVS Daniel Weber & Zhen Zhang Betreuer: Volker Baier

FTP-Server einrichten mit automatischem Datenupload für

OP-LOG

Printserver und die Einrichtung von TCP/IP oder LPR Ports

Transkript:

Versionskontrolle mit Ralph Thesen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Seminar: Technische Numerik November 2009

Überblick 1 Warum? Aber! Konzepte 2 Zugriff auf ein Repository import list checkout 3 update add commit status diff 4 Parameter.svn Properties Keyword Substitution 5 Konflikte Branch Merge Blame und Log 6 TortoiseSVN RapidSVN KDESvn Subclipse Netbeans

Warum Versionskontrolle? Warum? Aber! Konzepte Mein tägliches zip -r megaprojekt.20091112.zip megaprojekt/ reicht mir! Nein. Mit (kurz: svn) kann man einfach kleinschrittig versionieren einfach zwischen Versionen springen einfach verschiedene Versionen vergleichen einfach die Arbeit an verschiedenen Plätzen synchron halten (Notebook, Uni, Zuhause)

Aber... Warum? Aber! Konzepte Das ist doch alles zuviel Aufwand! Mein Projekt ist riesig! Ich habe ganz viele Verzeichnisse und Dateien! Nein. - Es ist nur einmal Aufwand. Bevor man ein Projekt in ein Repository ablegt, muss/sollte man aufräumen. (Sollte man vermutlich eh längst gemacht haben.) das Projekt in einer geordneten Struktur ablegen. (Sollte man vermutlich...) generierte/kompilierte Dateien rauswerfen.

Warum? Aber! Konzepte Konzept (1): Lokale Kopie, zentrales Repository Repository getrennt von lokaler Kopie Änderungen werden zwischen dem Repository und lokalen Kopien übertragen Es können mehrere lokale Kopien existieren, auch bei verschiedenen Benutzern

Warum? Aber! Konzepte Konzept (2): Revisionen Jeder Übertragung von Änderungen wird eine Revisionsnummer zugeordnet. Import des Projekts. Revision 1. Änderung an den Dateien matrix.h und matrix.cpp. Revision 2. Löschen von Test/UnitTestMatrixSymmetrisch.cpp, Hinzufügen von Test/UnitTestMatrix.cpp, Änderung von main.cpp. Revision 3.... Zu jeder Revision gehört ein Kommentar. Dieser sollte durch Menschen lesbar sein. HEAD ist immer die aktuellste Revision, BASE immer die Revision, die die Basis der lokalen Kopie bildet.

Zugriff auf ein Repository import list checkout

Ein Repository erstellen Zugriff auf ein Repository import list checkout Muss man ein Repository selber lokal erstellen, nimmt man den svnadmin zur Hilfe: > svnadmin create / path / repository > ls / path / repository conf / dav / db/ format hooks / locks / README. txt > Nun steht unter file:///path/repository ein leeres -Repository bereit.

74 Worte zur Repository-Url Zugriff auf ein Repository import list checkout Eine Repository-Url kann verschieden aussehen: file:// ein lokales Repository. http:// ein Repository auf einem Webserver. https://... via SSL. svn:// Zugang zu einem svnserve Server. svn+ssh:// Zugang zu einem Repository durch einen SSH-Tunnel. Keine Sorge! Man braucht die Url im täglichen Arbeitsablauf nie. Nur beim checkout und import ist sie unumgänglich.

import Zugriff auf ein Repository import list checkout Wir versuchen uns an einem neuen, leeren Repository. Wir importieren unsere existierende Struktur (Dateien und Verzeichnisse) mit svn import. > svnadmin create / path / repository > mkdir example ; cd example > mkdir trunk branches tags > svn import -m " Hello Svn!" file :/// path / repository Adding trunk Adding branches Adding tags Committed revision 1. >

list Zugriff auf ein Repository import list checkout Wir wollen uns ein Repository ansehen. Dazu dient svn list bzw. kurz svn ls. > svn list file :/// path / repository branches / tags / trunk / Ist ein Projekt neu und leer, bekommt man nichts weiter von svn list angezeigt. Will man detailliert Dateien ansehen, arbeitet svn cat wie man es erwartet.

checkout Zugriff auf ein Repository import list checkout Wir wollen eine lokale Kopie eines Repositories erstellen (um damit zu arbeiten). Dazu dient svn checkout bzw. kurz svn co. > svn checkout file :/// tmp / testrepo / example A example / trunk A example / branches A example / tags Checked out revision 1. >

update add commit status diff

update update add commit status diff Die erste Handlung eines Arbeitstages: Update! Vor einem Commit: Update! svn update oder kurz svn up. > svn update At revision 1. Im Repository hat sich nichts geändert, wir sind up-to-date. > svn update A main. cpp U readme. txt Updated to revision 3. Hier wurde die Datei readme.txt geändert U und die Datei main.cpp neu hinzugefügt A.

add update add commit status diff Mit svn add fügt man neue Dateien in der lokalen Kopie dem Repository hinzu. > vim helloworld. cpp > svn add helloworld. cpp A helloworld. cpp > Binäre Dateien erkennt in der Regel von selbst. > gimp svn_ commands. png > svn add svn_ commands. png A ( bin ) svn_commands. png >

commit (1) update add commit status diff Wir übertragen eine lokale Änderung ins Repository mit svn commit oder kurz svn ci. Wenn wir keinen Kommentar zu unserem commit angegeben haben, öffnet sich unser Lieblingseditor: -- This line, and those below, will be ignored -- M trunk / readme. txt A trunk / matrix.h Hier können wir den Kommentar ergänzen. Zur Unterstützung listet svn die betroffenen Dateien auf. Hier wurde die readme.txt geändert M und die matrix.h hinzugefügt A.

commit (2) update add commit status diff > svn commit -m " Ein menschenlesbarer Kommentar." Adding trunk / matrix.h Sending trunk / readme. txt Transmitting file data... Committed revision 4. Wenn alles passt, wird der commit ausgeführt und die Daten übertragen.

status update add commit status diff Was habe ich zuletzt gemacht? > svn status? run A matrix. cpp C readme. txt D bar. cpp M matrix.h? Datei ist nicht versionskontrolliert A Datei ist zum Hinzufügen vorgemerkt C Datei hat Konflikte durch ein Update D Datei ist zum Löschen vorgemerkt M Der Inhalt von bar.c hat lokale Änderungen -v erzählt mehr, -q weniger, -u kontaktiert das Repository.

diff update add commit status diff Was habe ich zuletzt wirklich geändert? svn diff zeigt den Unterschied zur letzten Revision. =================================================================== > svn diff Index : helloworld. cpp --- helloworld. cpp ( revision 1) +++ helloworld. cpp ( working copy ) @@ -1,8 +1,12 @@ # include <iostream > using namespace std ; + void hello () { + cout << " Hello World " << endl ; +} int main () { - cout << " Hello World " << endl ; + hello (); } Mit svn diff -r N kann man mit Revision N vergleichen.

Parameter.svn Properties Keyword Substitution

Parameter Parameter.svn Properties Keyword Substitution Wird kein Parameter angegeben, nimmt svn immer das aktuelle Verzeichnis. an. svn diff zeigt rekursiv alle Änderungen an. svn diff matrix.h matrix.cpp zeigt nur die Änderungen dieser beiden Dateien an. svn add core fügt das komplette Verzeichnis core dem Repository hinzu, mit allen Daten und Unterverzeichnissen. svn diff -N core fügt nur das Verzeichnis core hinzu. -N ist sehr wichtig, da svn normalerweise alles rekursiv macht.

Das Verzeichnis.svn Parameter.svn Properties Keyword Substitution In jedem Verzeichnis der lokalen Kopie liegt das Verzeichnis.svn/ > ls. svn all - wcprops format props / tmp / entries prop - base / text - base / > Das Verzeichnis enthält die kompletten Daten der aktuellen Revision. Vorteil: Für die Operationen svn status, svn diff und svn revert muss nicht das Repository bemüht werden, die Informationen liegen lokal vor. Im Allgemeinen gilt: Pfoten weg.

Properties Parameter.svn Properties Keyword Substitution Dateien und Verzeichnisse können Eigenschaften (Properties) haben. svn propset Setzt eine Property, mit -F aus einer Datei. svn propedit Öffnet die Property im Editor. svn propget Zeigt eine Property an. svn proplist Zeigt existierende Properties an, mit -v auch was drin steht. svn propdel Löscht eine Property. Auch hier muss ein svn commit ausgeführt werden.

Properties (2) Parameter.svn Properties Keyword Substitution > svn propset copyright ( c) 2009 example. com main. cpp property copyright set on main. cpp > svn propget copyright main. cpp ( c) 2009 example. com > svn proplist main. cpp Properties on main. cpp : copyright > svn status M main. cpp > svn diff Property changes on: main. cpp Name : copyright + ( c) 2009 example. com > svn commit -m " copyright set for main. cpp " main. cpp Sending main. cpp Committed revision 5. >

Properties (3) svn:ignore Parameter.svn Properties Keyword Substitution Lästig: > svn status? 20091110 _1014. log? 20091110 _0837. log M main. cpp Lösung: > svn propset svn : ignore "* log ". property svn : ignore set on. > svn status M main. cpp global-ignores setzt man in der /.subversion/config für Dateien, die nie in ein Repository gehören:.* *.o *.swp usw.

Keyword Substitution Parameter.svn Properties Keyword Substitution Aus // header.h // $Date$ // $Revision$ mach // header.h // $Date : 2009-11 -12 16:14:59 +0100 ( Thu, 12 Nov 2009) $ // $Revision : 42 $ $Date$ $Revision$ $Author$ $HeadURL$ $Id$ Keyword Substitution schaltet man mit der Property svn:keywords ein: svn propset svn : keywords \ " Date Revision " header. h

Konflikte Branch Merge Blame und Log

Konflikte (1) Konflikte Branch Merge Blame und Log Alice ändert // hello. cpp # include <iostream > use namespace std ; int main () { cout << " Hello!"; } Bob ändert // hello. cpp # include <iostream > use namespace std ; int main () { cout << " Hello Svn!"; } Alice checkt ein. Bob will einchecken und erhält die Meldung: svn: Commit failed (details follow): File hello.cpp is out of date Bob führt svn update aus... Conflict discovered in hello. cpp. Select : (p) postpone, (df) diff -full, (e) edit, ( h) help for more options :

Konflikte (2) Konflikte Branch Merge Blame und Log Conflict discovered in hello. cpp. Select : (p) postpone, (df) diff -full, (e) edit, ( h) help for more options : (p) postpone Datei im Konfliktzustand lassen. (df) diff-full Unterschiede anzeigen. (e) edit Datei im Konfliktzustand editieren. # include <iostream > using namespace std ; int main () { <<<<<<<. mine cout << " Hello Svn!"; ======= cout << " Hello!"; >>>>>>>.r2 }

Konflikte (3) Konflikte Branch Merge Blame und Log > ls hello. cpp hello. cpp. mine hello. cpp.r1 hello. cpp.r2 > svn commit -m " changed hello - string " svn : Commit failed ( details follow ): svn : Aborting commit : / home / bob /svn - work / hello.cpp remains in conflict Den Konflikt lösen mit svn resolve working Die aktuelle Version, Konflikt wurde manuell gelöst. base Zurück zur Version vor dem Konflikt. mine-full Meine Version annehmen. theirs-full Die Version des Updates annehmen. > svn resolve -- accept working hello. cpp Verwirft man seine Änderungen mit svn revert, löst dies auch den Konflikt.

Branch Konflikte Branch Merge Blame und Log Wenn man am Projekt aufwendig experimentieren möchte, legt man eine Verzweigung (Branch) an. > svn copy file :/// path / repositor / trunk \ file :/// path / repository / branches /my - branch \ -m " Creating a private branch." Danach dann den Branch auschecken: > svn checkout \ file :/// path / repositor / branches /my - branch Wie gewohnt weiter arbeiten.

Merge Konflikte Branch Merge Blame und Log Einen Branch will man mit dem Stamm (Trunk) des Projekts aktuell halten. Dazu dient svn merge. > cd my - branch > svn merge \ file :/// path / repositor / trunk U hello. cpp svn merge schreibt immer auch die Property svn:mergeinfo. Diese beinhaltet Infos darüber, was bereits in den Branch gemerged wurde. svn propget svn:mergeinfo. Tipp: Mit der Option --dry-run kann man den merge testen. Mit svn merge --reintegrate kann man einen Branch zurück in den Stamm (Trunk) mergen.

log Konflikte Branch Merge Blame und Log Wir können uns die Kommentare zu den Revisionen mit svn log ansehen: > svn log hello. cpp ------------------------------------------------------------------- r3 alice 2009-11 -12 15:33:55 ( Do, 12 Nov 2009) 2 lines Hello! ------------------------------------------------------------------- r2 bob 2009-11 -12 15:27:12 ( Do, 12 Nov 2009) 2 lines Hello World -------------------------------------------------------------------

blame Konflikte Branch Merge Blame und Log > svn blame hello. cpp 2 bob # include < iostream > 2 bob 2 bob using namespace std ; 2 bob 2 bob int main () 2 bob { 3 alice cout << " Hello!" << endl ; 2 bob } 2 bob Wem svn blame nicht gefällt, kann seine Kollegen mit svn praise wertschätzen.

That s all, folks! TortoiseSVN RapidSVN KDESvn Subclipse Netbeans Vielen Dank! Mehr Infos gibt es hier: svn help http://svnbook.red-bean.com/

TortoiseSVN RapidSVN KDESvn Subclipse Netbeans in bunt

TortoiseSVN TortoiseSVN RapidSVN KDESvn Subclipse Netbeans Plugin für den Windows Explorer http://tortoisesvn.tigris.org/

RapidSVN TortoiseSVN RapidSVN KDESvn Subclipse Netbeans GUI für (gibts für Linux, Windows und Mac OS) http://rapidsvn.tigris.org/

KDESvn TortoiseSVN RapidSVN KDESvn Subclipse Netbeans GUI für unter Linux, integrierbar in den Konquerer (KDE) http://kdesvn.alwins-world.de/

Subclipse (1) TortoiseSVN RapidSVN KDESvn Subclipse Netbeans Plugin für Eclipse http://subclipse.tigris.org/

Subclipse (2) TortoiseSVN RapidSVN KDESvn Subclipse Netbeans Hier finden sich alle Befehle, die wir in svn kennen:

Subclipse (3) TortoiseSVN RapidSVN KDESvn Subclipse Netbeans Diffs in Subclipse

Netbeans TortoiseSVN RapidSVN KDESvn Subclipse Netbeans http://www.netbeans.org (auch für C++, PHP u.a.)