C/C++-Programmierung

Ähnliche Dokumente
Versionsverwaltung. Seminar Softwareentwicklung in der Wissenschaft Robert Wiesner

Versionskontrolle: Subversion und Git

Versionsverwaltung. Dr.-Ing. Matthias Sand. Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2009

Versionskontrolle mit Subversion

DNUG FN TOBIAS ALLWEIER

Einführung in Subversion

Revisionskontrollsystem GIT

Versionskontrolle mit SVK

Einführung in Subversion

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

Versionsverwaltung mit SVN

NT-Seminarvortrag am 11. Dezember Einführung in die Versionsverwaltung CVS. von Gordon Cichon

Versionskontrollsysteme

Arbeiten mit dem Versionsverwaltungssystem. Jannik Kramer Proseminar Werkzeuge für das wissenschaftliche Arbeiten

Versionskontrollsysteme. Uwe Berger & Markus Dahms <bralug@bralug.de>

Grundlagen der Informatik Vorlesungsskript

Einführung in Subversion

Einführung in Subversion

Softwaretechnik (Allgemeine Informatik) Überblick

Versionskontrolle. Verteilte Versionskontrollsysteme. Richard Madsack. 25. November Versionskontrolle. Richard Madsack.

Software Engineering

Brauche ich ein DVCS?

Git-Grundlagen für Entwickler. Thomas Claudius

Fachpraktikum Graphische Benutzungsoberflächen Wintersemester 2010/2011

Einführung in Subversion

SVN in use. Roger Burkhardt Fachhochschule Nordwestschweiz Hochschule für Technik Institut für Geistes- und Naturwissenschaft

Einführung in Git. Dirk Deimeke. 19. August My own IT. ddeimeke (My own IT) Einführung in Git 19. August / 23

Git - Grundlagen und Anwendungen

Programmieren 1 11 Versionsverwaltung mit Git - Grundlagen -

Programmieren 2 05 Versionsverwaltung mit Git

Von SVN zu Git. Daniel Willmann cbna

Versionskontrolle mit Subversion

Kennenlernen. Tutorium 7 iloveswt.de Fabian I. Miltenberger INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD)

Versionsverwaltung mit Git. Eine Einführung ins Source Code Management

Versionsverwaltung. Robert Wiesner. 13. März Inhaltsverzeichnis. 1 Inhaltsangabe 2. 2 Einleitung 2

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

Linux Cafe Referent: Bernd Strößenreuther

Semesterprojekt Entwicklung einer Suchmaschine für Alternativmethoden zu Tierversuchen. Versionierung und Bugtracking mit GitHub

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 D-Uebung2.fm

Fachpraktikum Graphische Benutzungsoberflächen Wintersemester 2007/08

Software Product Lines

Versionsverwaltung mit git. Christoph Knabe FB VI

Gitting started. Christian Neukirchen. 14dec2011

Software Engineering in der Praxis

git for noobs next generation distributed version control system(s) Michael Rodler Michael Rodler GIT 1 / 35

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

Concurrent Versions System CVS in der Technischen Informatik

Moodle aktuell halten mit Git

Versionierung und Bugtracking mit Git(Hub)

Versionsverwaltung mit git

Praktikum Ingenieurinformatik (PI)

Git. Dezentrale Versionsverwaltung im Team - Grundlagen und Workflows. Bearbeitet von René Preißel, Bjørn Stachmann

C/C++ Programmierung

Git Eine Einführung. LinuxTag 2013, Berlin. Julius Plenz. 22. Mai 2013

Einführung in die Programmiertechnik

Einführung zu Git. Das Nötigste für die Studienarbeit im Modul Datenkommunikation. Ege Inanc

Einführung in Verteilte Versionskontrollsysteme. am Beispiel von Git

U1 3. Übung U1 3. Übung. Die Kommandos auf den folgenden Folien dienen der Veranschaulichung. Sind nicht direkt auf die Übungsaufgabe übertragbar

Prof. Dr. Marko Boger. Prof. Dr. Christian Johner. Versionsmanagement

Änderungen verwalten mit git

Ein-Ausgabefunktionen in C (letzter Abschnitt Vorlesungsstoff ab C.110)

Bedienungshinweise für XEmacs, make und GNU Debugger

C/C++-Programmierung

Einführung in die Programmiertechnik

Einführung in Git. master. Initial commit

Verteile Revisionskontrolle mit GIT

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Buildsysteme

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Software(technik)praktikum: SVN-Tutorial

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Torsten Flatter inovex GmbH. "Git.NET" gibt's nicht?

Grundkurs C++ Buildsysteme Versionsverwaltung mit git

Enes Kurnaz, Oliver Nagel Institut für Mathematik und Informatik. Versionsverwaltung mit Git

Revision Control System. Versionskontrolle

SOFTWAREPROJEKT (WI)

Versionsmanagement mit Subversion

Compiler Präprozessor Header Files

Eine kleine Makefile Einführung

CVS-Einführung. Sebastian Mancke,

Übungsblatt 1. Java Vorkurs (WS 2017)

Versionsverwaltung mit git

Versionsverwaltung mit RCS

: Einführung in die Programmierung Übungsblatt 1

Tool-Chain. Übung. Eclipse, SVN, Ant, Cobertura, Metrics Labor "Software Engineering Experiment" Sebastian Meyer und Kai Stapel

Versionsverwaltung von Softwareartefakten. Dr. Thorsten Arendt Marburg, 05. November 2015

Softwareproduktlinien Teil 4: Versionsverwaltungs- und Buildsysteme

Entwicklungswerkzeuge

Semesterprojekt Semantic Text Browsing

Softwareproduktlinien - Versionsverwaltungs- und Buildsysteme

Vorlesung Programmieren. Versionskontrollsysteme. Ziele von VCS. Versionskontrolle

Simulationsprojekte einfacher mit Subversion und Trac

Versionskontrolle mit Mercurial. Michael Gebetsroither

git Datamining und Sequenzanalyse Markus Fleischauer, Kai Dührkop

Medieninformatik Praktikum. Jens Rademacher

Thomas Rau (mit Material von Peter Brichzin) Repositories zur Unterstützung von kollaborativen Arbeiten in Softwareprojekten

Pre-tested commit 2.0 mit Gerrit und Jenkins

JUnit (Version 4.x) Framework zur Unterstützung von Unit-Tests. Wir verwenden nicht JUnit 3.x. Ideen dahinter. Test-Methode

Verteilte Versionskontrolle mit Mercurial

Transkript:

1 C/C++-Programmierung Werkzeuge: make, diff, patch, Versionsverwaltung Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010

2 make Problem: Projekte bestehen üblicherweise aus vielen Dateien Von Hand bauen ist mühsam und fehleranfällig Alles immer neu bauen dauert lange Idee: Spezifiziere Abhängigkeiten zwischen Dateien (Datei B wird aus Datei A erzeugt) Dateiname: Makefile Abhängigkeiten bilden gerichteten azyklischen Graphen make liest die Spezifiaktion ein und prüft die Zeitstempel der Abhängigkeiten Datei wird neu erzeugt werden, wenn sie älter ist als eine ihrer Abhängigkeiten oder sie nicht existiert Aufruf: make Erstes Ziel in Makefile wird als Wurzel verwendet

3 Syntax: Einfache Regel hello : hello.c hello.h cc -o hello hello. c Datei hello hängt von hello.c und hello.h ab Befehlszeile darunter muss mit einem Tabulator beginnen! Abhängigkeiten und Befehle trennbar hello : hello.c hello : hello.h hello : cc -o hello hello. c

4 Mehrere Ziele automatisch bauen Problem: Nur erstes Ziel wird automatisch beachtet Pseudoziel einfügen, das von anderen abhängt Kanonischer Name: all all : hello bye hello : hello.c hello.h cc -o hello hello. c bye : bye.c cc -o bye bye. c

5 Automatische Variablen hello : hello.c hello.h cc -o hello hello. c Problem: Duplikation, fehleranfällig $@: Aktuelles Ziel $<: Erste Abhängigkeit hello : hello.c hello.h cc -o $@ $<

6 Variablen hello : hello.c hello.h cc -o $@ $< Problem: Übersetzer in Befehl fest eingetragen Verwende Variablen Klammern sind wichtig, sonst ist nur erster Buchstabe nach $ der Variablenname CC wird normalerweise vom System bereits gesetzt, kann aber vom Benutzer überschrieben werden: make CC=icc hello : hello.c hello.h $(CC) -o $@ $<

7 Generische Regeln a l l : h e l l o bye h e l l o : h e l l o. o $ (CC) o $@ $< bye : bye. o $ (CC) o $@ $< h e l l o. o : h e l l o. c h e l l o. h $ (CC) c $< bye. o : bye. c $ (CC) c $< Problem: Duplikation.c.o:.o-Dateien werden aus.c erzeugt.o: Datei ohne Endung wird aus.o erzeugt a l l : h e l l o bye h e l l o : h e l l o. h. c. o : $ (CC) o $@ $<. o : $ (CC) c $<

8 diff Findet zeilenweise Änderungen in Textdateien Theoretischer Hintergrund: Längste gemeinsame Teilsequenz (longest common subsequence, LCS) NP-hart in Anzahl der zu vergleichenden Sequenzen Üblicherweise zwei, daher polynomiell lösbar

9 Beispiel: LCS ABAB ABBA ABAB ABBA Beispiel zeichenweise statt zeilenweise Longest common subsequence: ABA Nicht verwechseln mit longest common substring: AB oder BA

10 Beispiel % cat alt 1 2 alt 3 4 % cat neu 1 2 neu 3 4

11 Standardformat % diff alt neu 3c3 < alt --- > neu Standardformat von diff <: Entfernte Zeilen >: Hinzugefügte Zeilen Problem: Kein Kontext, patch funktioniert nur mit exakt der alten Datei

Context Diff % diff -c alt neu *** alt --- neu *************** *** 1,5 **** 1 2! alt 3 4 --- 1,5 ---- 1 2! neu 3 4 Zeigt (bis zu) drei Zeilen Kontext Oben: alt, unten neu!: geänderte Zeilen Problem: Format recht langatmig (Kontext wird wiederholt) 12

13 Unified Diff % diff -u alt neu --- alt +++ neu @@ -1,5 +1,5 @@ 1 2 -alt + neu 3 4 Heute gebräuchlichstes Format, ebenfalls (bis zu) drei Zeilen Kontext -: Entfernte Zeilen +: Hinzugefügte Zeilen

14 patch Umkehrung von diff: Wende Änderungen auf Datei an Datei muss nicht exakt mit Original übereinstimmen, z.b. verschobene Zeilen kann patch kompensieren Verwendung: patch $DATEI < $DIFF Wende DIFF auf DATEI an Dateiangabe optional, kann aus DIFF ausgelesen werden

15 diff/patch vs. Minus b - a = c diff a b > c a + c = b patch a < c -o b a - b = -c diff b a > _c b + -c = a patch b < _c -o a patch -R b < c -o a

Versionsverwaltungssysteme... gibt es wie Sand am Meer: Source Code Control System (SCCS) Revision Control System (RCS) Concurrent Versioning System (CVS) Visual Source Safe (VSS) Perforce (P4) Bitkeeper Darcs Bazaar Arch Monotone Team Foundation Server (TFS) Subversion (SVN) SVK Git Mercurial (HG)... 16

17 Warum Versionsverwaltung? Probleme/Fragen: Was habe ich gestern gemacht? Warum wurde das gemacht? Wer hat das gemacht? Was wurde seit der letzten Veröffentlichung gemacht? Archivierung älterer Versionen Beherbergung mehrer Entwicklungszweige Zusammenarbeit von mehreren Entwicklern Es gibt keinen Grund gegeben Versionsverwaltung: Plattenplatz ist billig: weniger als 10 Cent/GB 10 Cent für mehr als 250.000 vollgeschriebene Seiten (80x50) Versionsverwaltungssysteme sind hinreichend schnell und einfach zu bedienen Liefern direkt Mehrwert: Was habe ich gerade geändert? usw.

18 Aber... Versionsverwaltungssysteme können nicht die Kommunikation zwischen Entwicklern ersetzen Sie können nur die Zusammenarbeit erleichtern Soziale Probleme sind nicht technisch lösbar

19 Verwendungsbeispiel: Fehlersuche Revision 2000 zeigt ein Fehlersympton Revision 1000 zeigt Fehlersympton nicht Idee: Binäre Suche Teste Version in der Mitte Falls Fehler: neue obere Schranke Kein Fehler: neue untere Schranke Wiederholen bis Fehler exakt eingegrenzt ist Laufzeit: O(ld n), da Intervall in jedem Schritt halbiert wird Hier also 10 Schritte (2 10 = 1024 > 2000 1000)

20 Fallbeispiel: RCS Revision Control System Eines des ersten Systeme (SCCS ist älter) Verwaltet einzelne Dateien Nomenklatur/Befehle heutiger Systeme stammt zumeist von RCS-Befehlen: co (checkout), ci (commit) Speichert Autor, Zeitstempel, Commit-Nachricht Verwendet Rückwertsdeltas Neuste Version am häufigsten angefragt, muss nicht aus älteren rekonstruiert werden Weiterentwicklung: CVS (Concurrent Versioning System) begann als Sammlung von Shellskripten für RCS benutzt selbes Dateiformat Netzwerkunterstützung: Multiplayer-RCS

21 Beispiel (leicht gekürzt) head 1. 2 ; 1. 2 d a t e 2 0 0 9. 1 2. 1 4. 0 9. 5 3. 0 4 ; a u t h o r m a l l o n ; s t a t e Exp ; branches ; n e x t 1. 1 ; 1. 1 d a t e 2 0 0 9. 1 2. 1 4. 0 9. 5 2. 0 5 ; a u t h o r m a l l o n ; s t a t e Exp ; branches ; n e x t ; 1. 2 l o g @Reformat @ t e x t @#i n c l u d e <s t d i o. h> i n t main ( v o i d ) { p r i n t f ( h e l l o w o r l d \n ) ; } @ 1. 1 l o g @ I n i t i a l r e v i s i o n @ t e x t @d3 4 a6 1 i n t main ( v o i d ) { p r i n t f ( h e l l o w o r l d \n ) ; } @

22 Fallbeispiel: Git Grundideen: Speichere Inhalte statt Unterschiede Unterschiede aus Inhalten berechenbar Versionen bilden gerichteten azyklischen Graphen Eine Version zeigt auf seine Vorgängerversion(en) Hierarchische Ordnung von Objekten, die als Hash ihres Inhalts abgelegt werden: Dateiinhalte, Verzeichnisse, Commits

23 Blobs Blobs (Binary Large Obects, Datien) werden gespeichert Name ist der Hash ihres Inhalts #i n c l u d e <s t d i o. h> i n t main ( v o i d ) { p r i n t f ( h e l l o, w o r l d \n ) ; r e t u r n 0 ; } 4727e0131811ddce76dbb8321724d85b56405fe8 (laut git hash-object)

24 Trees Trees (Verzeichnisse) enthalten Listen von Blob-/Tree-Hashs mit Datei-/Verzeichnisnamen Name ist wiederrum Hash 100644 blob 4727 e0131811ddce76dbb8321724d85b56405fe8 h e l l o. c 8d5bd2d4136f0a4f6a57e8a1b88f9ed59768278c

25 Commits Ein Commit besteht aus einem Tree, einem Committer, einem Autor, einer Liste von Elterncommits (leer bei erstem) und einer Nachricht Name ist wieder ein Hash t r e e 8 d5bd2d4136f0a4f6a57e8a1b88f9ed59768278c author C h r i s t o p h Mallon <mallon@cs. uni s a a r l a n d. de> 1262424493 +0100 committer C h r i s t o p h Mallon <mallon@cs. uni s a a r l a n d. de> 1267002986 +0100 A h e l l o w o r l d program. da4b16f97e2db9d7b594f9410acfb03435990d3f

26 Zweige, symbolische Referenzen Ein Zweig (Branch, eigtl. Ast) ist eine Datei, die den Hash eines Commits enthält Der Dateiname ist der Name des Zweigs Wird mit jedem Commit auf diesen Zweig auf den neuen Commit umgebogen %c a t. g i t / r e f s / heads / master da4b16f97e2db9d7b594f9410acfb03435990d3f Eine symbolische Referenz zeigt auf einen Zweig HEAD: Aktueller Zweig %c a t. g i t /HEAD r e f : r e f s / heads / master