Gitting started. Christian Neukirchen. 14dec2011



Ähnliche Dokumente
Gitting started. Christian Neukirchen. 05nov2010

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

Praktikum Ingenieurinformatik (PI)

Von SVN zu Git. Daniel Willmann cbna

git Änderungen verwalten mit git

Git - Fast Version Control System

Versionkontrolle mit git

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

Apache Subversion (SVN)

Eine Einführung in das verteilte Quelltextverwaltungssystem Git

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

Linux Cafe Referent: Bernd Strößenreuther

Einführung in git. Johannes Gilger & Matthias Lederhofer. Rechen- und Kommunikationszentrum der RWTH Aachen Network Operation Center. 14.

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

Versionsverwaltung mit git. Christoph Knabe FB VI

Moodle aktuell halten mit Git

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

Versionskontrollsysteme

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

Versionierung und Bugtracking mit Git(Hub)

Medieninformatik Praktikum. Jens Rademacher

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

Versionskontrolle mit Mercurial. Michael Gebetsroither

Dr. R. Guderlei exxcellent solutions gmbh Tim Felgentreff HPI. Versionsmanagement. Zentral oder Verteilt?

Konfigurationsdateien mit Git verwalten

Git. Dezentrale Versionsverwaltung im Team Grundlagen und Workflows. Rene Preißel Björn Stachmann. 2., aktualisierte und erweiterte Auflage

WOZU VERSIONSKONTROLLE?

Änderungen verwalten mit git

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

Programmieren 2 06 Git-Teamwork und Egit

Git in großen Projekten

Dezentrale Versionsverwaltung

Verteile Revisionskontrolle mit GIT

Spiel, Spaß und Spannung mit Git

Versionierung für OpenSourcler

Einführung in Verteilte Versionskontrollsysteme. am Beispiel von Git

git Alexander Bernauer Rico Schiekel

Git eine kurze Einführung

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

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

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

Git II. Dezentrale Versionsverwaltung im Team

Versionsverwaltung mit Mercurial für Einsteiger

Software Engineering

Sourcecodeverwaltung

Git-Grundlagen für Entwickler. Thomas Claudius

Git eine kurze Einführung. Malte Schmitz ~ Mai 2012

eclipse - EGit HowTo

Software Engineering in der Praxis

Git-Workflows im Alltag

Apache Subversion (SVN)

Migration von Subversion nach Mercurial und Einsatz dezentraler Versionskontrolle in Unternehmen

Einführung in Subversion

Einführung in Git. master. Initial commit

EGit: Die effiziente Git- Integration in Eclipse

Versionsverwaltung. Seminar Softwareentwicklung in der Wissenschaft Robert Wiesner

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

Vorlesung Programmieren. Versionskontrollsysteme. Ziele von VCS. Versionskontrolle

Versionskontrolle mit Subversion

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

Versionsverwaltung von Softwareartefakten. 21. Oktober 2014

an Hand eines Beispiels Konsole

Inhaltsverzeichnis. 1 Einleitung. Literatur. 1.1 CVS (Concurrent Version System) [Pru03, Zee02, Ced05]

Having fun with GIT. Chris Wewerka. Software Development Specialist

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

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

WinCVS Version 1.3. Voraussetzung. Frank Grimm Mario Rasser

Versionsverwaltung mit SVN

Tutorium SS17 EINFÜHRUNG + BREAKOUT

Subversion. Einstieg in die. Versionskontrolle

1 Zugang zum GIT Repository

AGILE APPLICATION LIFECYCLE MANAGEMENT IM ATLASSIAN ECOSYSTEM

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

git Workshop Matthias Beyer Hochschule Furtwangen University matthias. hs-furtwangen. de beyermatthias. de 19.

Einführung in Subversion. Tutorium SWP

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

Source Code Verwaltung mit Git

Vorlesung Unix-Praktikum

Vorlesung Unix-Praktikum

Revisionskontrollsystem GIT

Seminar. Bachelor Wirtschaftsinformatik

Einstieg in Git. Lukáš Kubánek

Deployment Deployment Seite 1 / 25

Programmieren 1 11 Versionsverwaltung mit Git - Grundlagen -

Eprog Starthilfe. 5. Oktober Einleitung 2

Versionsverwaltung mit git

Verteilte Versionskontrolle mit. Einführung und Nutzung von SVK FrOSCon 24./25. Juni 2006

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

Programmieren 2 05 Versionsverwaltung mit Git

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

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

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

FS cs108 Programmierpraktikum Subversion. Lukas Beck Cedric Geissmann Alexander Stiemer

Verteilte Versionskontrolle mit Mercurial (DVCS)

Open Source. Hendrik Ebbers 2015

Branching und Merging mit Visual Studio Team System

Versionsverwaltung mit git: Warum und wie.

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

Transkript:

Gitting started Christian Neukirchen 14dec2011

Wieso Versionskontrolle? Erste Schritte Branches Zusammenarbeit Nicht-trivale Features GUI Ausblick Agenda

Wieso Versionskontrolle? Den Verlauf eines Projekts speichern Zu alten Versionen zurückkehren Gestern ging das noch Mehrere Versionen parallel pflegen Gemeinsam an einem Projekt arbeiten

Zur Geschichte Klassisch: SCCS (1972), RCS (1982), CVS (1989), SVN (2000) Verteilt: GNU Arch (2001), Monotone (2003), Darcs (2003), Bazaar (jan2005), Git (7apr2005), Mercurial (19apr2005)

Wieso verteile Versionskontrolle? Jedes Repo hat die gesamte History. Alle repositories sind a priori gleich. Ideal für open source aber auch für die Arbeit offline.

Wieso Git? Populär: Linux, X.org, GCC, Android, Wine, Exherbo, Fedora, GNOME, Perl 5, Rails, Qt, VLC, Samba Schnell, Robust, Unixig GPL

Jetzt gits los! % packer -S git % emerge -av dev-vcs/git % brew install git-core % apt-get install git-core

whoami Um Commitbeschreibungen sinnvoll auszufüllen, braucht Git einmalig den Namen und die Mail-Adresse des Users. % git config --global user.name \ "Christian Neukirchen" % git config --global user.email \ chneukirchen@gmail.com Editor kontrollieren: % echo $EDITOR

Erste Schritte: Workshop % git init myrepo % cd myrepo myrepo% vi hello-world.c myrepo% git status myrepo% git add hello-world.c myrepo% git status myrepo% git commit

Zweite Schritte: Workshop myrepo% git log myrepo% vi hello-world.c myrepo% git status myrepo% git diff myrepo% git add hello-world.c #!!! myrepo% git diff --staged myrepo% git commit

Der Index working directory git add index / cache (staging area) git commit repository

Interaktiv committen: Workshop myrepo% git add -p myrepo% git commit

Schneller: Workshop myrepo% vi hello-world.c myrepo% git commit hello-world.c

Noch schneller: Workshop myrepo% vi hello-world.c myrepo% git commit -a

Mehrere Dateien: Workshop % mv hello-world.c goodbye-world.c % git add goodbye-world.c % git rm hello-world.c % git status % git commit % git mv hello-world.c goodbye-world.c Git speichert das Umbenennen nicht, sondern erkennt es heuristisch. Funktioniert prima.

Wie funktioniert das alles? git show-ref git show --format=raw $COMMITID git ls-tree $TREEID git show $BLOBID

Exkurs: Revisionsnamen angeben HEAD b130ec682 refs/tags/$name refs/heads/$name refs/remotes/$name $REF^ $REF~n $REF:$PATH $REF1..$REF2 Stamm Eindeutiges Hash-Präfix Tags Andere Stämme Andere Repos Erster Vater n-ter Vorfahre $PATH im Tree $REF Alle Eltern von $REF2 ohne Eltern von $REF1

Branching % git branch % git checkout -b chris2 % git branch % git log % git log master % git log master..chris2 % git diff master..chris2

Merging % git checkout master %... % git diff chris2 % git merge chris2 % git diff % git log --graph --oneline

Tagging % git tag $TAGNAME % git show-ref

fetch, pull und push % git clone ssh.fs.lmu.de:/home/gaf/alle/git/hello hello% git fetch hello% git pull hello% git remote add goodbye \ ssh.fs.lmu.de:/home/gaf/alle/git/goodbye hello% git fetch goodbye hello% git log master..goodbye/master hello% git log -p master..goodbye/master hello% git merge goodbye/master hello% git pull goodbye master hello% git push (Das Remote, auf das standardmäßig gepusht wird, kann man mit git push -u... festlegen.)

Neue remote Repos erzeugen Will man in ein Repo pushen, so sollte man es als bare repo anlegen: % ssh hund.fs.lmu.de hund% git init --bare myrepo.git hund% ls myrepo.git HEAD branches/ config description hooks/ info/ objects/ refs/ myrepo% git remote add hund hund.fs.lmu.de:myrepo.git myrepo% git push hund master

Git Repos publizieren HTTP Github Gitorious Google Code gitosis/gitolite

blame Wer hat das verbrochen? % git blame hello-world.c

Patches erstellen % git checkout catwell/master % git diff master.. % git format-patch \ --stdout origin/master % git format-patch origin/master~3

Empfehlungen Viele, kleine Commits Spezifische Commits Sinnvolle Commit-Messages Feature-Branches Nur einer (oder wenige) committed in den master.

Commit-Zyklus (local): git add git commit Publish-Zyklus (global): git pull git push Workflow

Upps, was vergessen/vertippt % git show-ref master % git commit --amend % git show-ref master Die Operation ist destruktiv, history is rewritten. Nur Privat verwenden!

Upps, zurück % git add foo # Upps, nee... % git reset % git commit -a % git log # Upps, nee... % git reset --hard HEAD^ % git log Obacht, kann zu Datenverlust führen!

Wie werd ich diese tausend Dateien los? % find.git/objects % git gc % find.git/objects Eigentlich nicht nötig, von Hand aufgerufen zu werden.

Dateien ignorieren % latex foo.tex % git status % echo "*.aux" >>.gitignore % echo "*.toc" >>.gitignore % git status Am besten committed man die.gitignore auch ins Repo.

Stashing *werkel... oh mist, ich muss pullen* % git pull Updating 3e4833b..85ca454 error: Your local changes to the following files would be overwritten by merge: lib/rack/request.rb % git stash % git pull % git stash list % git stash apply *weiterwerkel*

Git GUIs gitk (Visualisierung der History, nützlich) git-gui (Grafisches Commit-Tool) Mac OS X: GitX, Gity

Ausblick % ls -l /usr/lib/git-core wc -l 153