SlideShare ist ein Scribd-Unternehmen logo
Welches Versionskontrollsystem sollte ich nutzen?

Subversion, Git, Mercurial und Co
#webmontag #paderborn

4. Februar 2013
Hi!
Warum sollte ich zuhören?

 2012:
• Kundenprojekte

• iUPB

• PINGO

• private Projekte, Uni-Projekte

• Open-Source-Contributions
Warum ein VCS?

                 Awesome
                   App



                            cool and awesome!




                 Awesome
                   App




                                   :(
                  Awesome
                     App
                 (with errors)
„Version control is the art of managing changes to
information“




„VC system is a general system that can be used to
manage any collection of files“
                                        + wit hin a team
For you, those files might be source code—for others, anything from grocery
shopping lists to digital video [...] and beyond




                                                         http://www.elixus.org/nightly/en/svk.intro.html
Lieblings-VCS: Welches nutzt du am meisten?
Tools

„A fool with a tool is still a fool“
VCS ist nur ein Tool

• Die besten Tools..
   • sind unsichtbar
   • integrieren sich in deinen Prozess und nicht umgekehrt




• VCS überhaupt notwendig?


• ausreichende „Versionierung“ schon vorhanden?
   z. B. TimeMachine oder Dropbox


• .NET/Visual Studio –> Team Foundation Server (Git-TF)
2000        2005           Zufall?    2005


a better CVS    you can‘t do CVS right


  zentral      verteilt                  verteilt


                          sehr ähnlich
Kriterien

• Konzept und Workflow


• Setup und Verwaltung


• Kommando-Zeile, GUIs
Konzept
Konzept


• zentrales Repository
   • (Ordner, SVN-/SSH-/Web-Server)

• Benutzer/Client hat eigene
 Arbeitskopie

• nach Fertigstellung werden die
 Änderungen zum Repository
 übertragen (commitet).




                                      http://onlamp.com/pub/a/oreilly/opensource/news/subversion_ch02.html
Konzept:
                  gleichzeitige Änderungen / Konflikte


• Benutzer arbeiten gleichzeitig an
 verschiedenen und gleichen Dateien

• Benuter „Sally“ ist fertig und commitet
 die Arbeit (= Senden an Server)

• Benutzer „Harry“ ist fertig, kann aber
 nicht commiten, da sein Stand nicht
 mehr aktuell ist



                                             Vorbeugen:
                                            Datei sperren?
                                                  svn:needs-lock
Konzept:
                 gleichzeitige Änderungen : Auflösung


• Harry updatet seine Arbeitskopie mit
 den neusten Änderungen vom
 Repository

• ... behebt evtl. Konflikte

• ... und commitet dann den
 zusammengeführten (gemergeten)
 Stand
Konzept:
                  Branching (Zweige)


• z. B. neue Features

• paralleler Entwicklungszweig mit
 gleicher Vorgeschichte

• Ein Branch ist nur ein Ordner

-> manuelles Zusammenführen der
   Änderungen
ea
                                     e en  ough, but in practice it can becom
„Merging changes sounds simpl                                                    e
                                    you re  peatedly merge changes from on
headache. The problem is that if                                               e.
                                     dent  ally merge the same change twic
branch to another, you might acci                                                e,
                                      ings  will work fine. When patching a fil
When this happens, sometimes th                                       , and does
Subversion typically notices   if the file already has the change                 ,
                                     g chan   ge has been modified in any way
 nothing. But if the already-existin
 you'll get a conflict.
                                                                                  n of
                                         sh ould prevent the double-applicatio
 Ideally, your version control system                                            a
                                      tom  atically remember which changes
 changes to a branch. It should au                                               use
                                       be  able to list them for you. It should
 branch has already received, and                                    le.
 this information to help auto mate merges as much as possib
                                                                                 does
                                     such   a system. Like CVS, Subversion
  Unfortunately, Subversion is not                                               mit
                                      out  merge operations. When you com
  not yet record any information ab                                                 me
                                        has  no idea whether those changes ca
  local modifications, the repository                                .“
  from running svn merge,     or from just hand-editing the files




                                                             http://svnbook.red-bean.com/en/1.1/ch04s03.html
Konzept

• dezentrales / verteiltes = eigenes Repository               git init
   • (Ordner, GIT-/SSH-/Web-Server)

• eigene Arbeitskopie = eigenes (vollwertiges!) Repository
 = eigener Entwicklungszweig (Branch)

• nach Fertigstellung werden die
 Änderungen commitet (lokal!)
                                                       ?




                                               Harry         Sally
• Commit bedeutet NICHT, dass es an einen Server gesendet wird

• Git hat eine Liste von entfernten Repositorys
  • push und pull

• „Ursprungsrepository“ (Vorlage des Klons) heißt origin




             (= fetch + merge)
Konzept:
                   Pull/Push, Branching/Merging


• Benutzer arbeiten gleichzeitig an
 verschiedenen und gleichen Dateien

• Benuter „David“ arbeitet und commitet
 währenddessen mehrmals (lokal!)
 • nach Fertigstellung: Push an
   entferntes Repository (origin)

• Benutzer „Bob“ ist auch fertig, kann
 aber seine „lokalen Commits“ nicht an
 origin pushen.
  • er pullt die Änderungen von David
    und pusht dann den (automatisch)
    gemergeten Stand.

                                          http://www.mageblog.de/wp-content/uploads/2012/06/centr-decentr.png
, an d rebasing are near flawless: git’s
„Git’s branching, tagging, merging                                        x
                                 nisc ient, having once merged 12 Linu
merging algorithm is close to om
                     kernel patches simultaneously“




                                                 http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/
Konzept
http://mercurial.selenic.com/wiki/UnderstandingMercurial
Git vs. Hg — Mac Gyver vs. James Bond

• Git ist eine Toolbox mit Werkzeugen zur Versionskontrolle


   • kommt mit jedem Workflow und in jeder Situation zurecht


   • (wenn man den passenden Befehl kennt)




• Mercurial ist ein Werkzeug gemacht für einen Zweck


   • ähnlich wie Git, aber nicht so viele Freiheiten
GUIs und Setup
TortoiseSVN, TortoiseGit, TortoiseHG (Win)
Subversion

• viele GUIs und Tools verfügbar




• vergleichsweise einfach aufzusetzen (CollabNet)




• zentraler Server zwingend notwendig
SmartSVN (Win, Mac, Linux)
Git

• viele GUIs verfügbar, einige schöner als andere ;-)


• einfaches Setup


• zentrales Repository mit Gitolite, etc. einfach (unter UNIX) einzurichten


• Kommandozeile sehr mächtig


      ➜ ~ git int
      WARNING: You called a Git command named 'int', which does not exist.
      Continuing under the assumption that you meant 'init'
      in 0.1 seconds automatically...
      Initialized empty Git repository in /Volumes/Daten/Users/mwhittak/.git/
      ➜ ~ git:(master) ✗
SourceTree (Mac)
git-bisect




             http://software-as-a-craft.blogspot.de/2010/12/how-git-saved-my-bacon-today.html
mehr Commits = besser?
Da sind noch...

• CVS – nicht benutzen


• SVK – dezentrales SVN


• Bazaar - verteiltes VCS von Ubuntu-Hersteller




• weitere open-source und proprietäre Tools
   en.wikipedia.org/wiki/List_of_revision_control_software
Fazit
• Subversion sehr einfach zu nutzen, einfacher Workflow

  • viele GUIs, Tools und Integrationsmöglichkeiten

• Einfachheit von Subversion gleichzeitig größtes Argument für Git/HG

  • verteilt

  • „natürliches“ Braching und Merging




• lineare und zentrale Entwicklung --> Subversion oder Git / Hg


• verteilte, sehr asynchrone oder „agile“ Entwicklung --> Git / Hg
.
      „Evaluate your workflow an d decide which tool suits you best
1.
                                                                   n.
     Learn how to use your chos en tool as well as you possibly ca
2.
3.                Hel p newbies to make the transition.

       Shut up about the tools you use and write some code.“
4.




                                               http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/
Das war‘s :-)

 MichaelWhi online:

 post@michael-whittaker.de


 michael-whittaker.de


 twitter.com/MichaelWhi


 github.com/MichaelWhi




                             Folien von heute
Links

• Git Wiki: Comparison with SVN: git.wiki.kernel.org/index.php/GitSvnComparison
• Sei (k)ein Blödmann und nimm Git: slideshare.net/kogakure/sei-kein-bldmann-und-
  nimm-git-1830449
• Hoster:
   GitHub (www.github.com, 5 private Repos für Studenten: github.com/edu),
   BitBucket (www.bitbucket.org, private Repos gratis, Git und Hg),
   Uni Paderborn (IMT-Link 91411, SVN)
   Beanstalk (beanstalkapp.com, SVN, Git und Hg)
• Selbst hosten
  Git:
  Ordner+SSH, Gitolite (github.com/sitaramc/gitolite/wiki), GitLab (gitlabhq.com), Gitorious (gitorious.org/gitorious), Stash (atlassian.com/software/stash/)
 Subversion:
  SVN-Server, Apache-Setup, CollabNet (www.collab.net/products/subversion) , Redmine (redmine.org), …


• GUIs
 SourceTree (sourcetreeapp.com, Mac, Git+Hg), SmartGit (syntevo.com/smartgithg/, Git+Hg), Tortoise (gitorious.org/gitorious, Win, Git+Hg+SVN),
 GitHub App (mac.github.com / windows.github.com, Mac/Win), Versions (versionsapp.com, Mac, SVN, $), SmartSVN (smartsvn.com, alle, SVN), …
 EGit for Eclipse, MercurialEclipse, GitHub for Eclipse, …
Links II

• SVK: svk.bestpractical.com
• Bazaar: bazaar.canonical.com


• iUPB: www.i-upb.de (Code [und Commits]: github.com/yippie-io/iUPB)
BONUS: Commit Messages – „Fool a tool“
Pflicht bei Git (<=> SVN), aber... :)




                   bessere Idee: github.com/erlang/otp/wiki/Writing-good-commit-messages

Weitere ähnliche Inhalte

Was ist angesagt?

GIT / SVN
GIT / SVNGIT / SVN
GIT / SVN
Torben Brodt
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen
B1 Systems GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
QAware GmbH
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
agilemethoden
 
Docker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemachtDocker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemacht
B1 Systems GmbH
 
Einführung in Git
Einführung in GitEinführung in Git
Einführung in Git
andreaswo
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
Thorsten Höger
 
docker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easydocker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easy
inovex GmbH
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
Ulrich Gerkmann-Bartels
 
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
inovex GmbH
 
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easydocker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
inovex GmbH
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
remigius-stalder
 
"git.net" gibt's nicht?
"git.net" gibt's nicht?"git.net" gibt's nicht?
"git.net" gibt's nicht?
inovex GmbH
 
Jenkins Acceleration
Jenkins AccelerationJenkins Acceleration
Jenkins Acceleration
Patrick Paechnatz
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & Verwendung
Tilo Baller
 
Docker for Python Development
Docker for Python DevelopmentDocker for Python Development
Docker for Python Development
Martin Christen
 
Geoinformatik-Kolloquium Juni 2012: High Performance Computing Cluster GIS
Geoinformatik-Kolloquium Juni 2012: High Performance Computing Cluster GISGeoinformatik-Kolloquium Juni 2012: High Performance Computing Cluster GIS
Geoinformatik-Kolloquium Juni 2012: High Performance Computing Cluster GIS
Peter Löwe
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
Christian Colbach
 
Docker Einführung @GPN15
Docker Einführung @GPN15Docker Einführung @GPN15
Docker Einführung @GPN15
m1no
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
Nicholas Dille
 

Was ist angesagt? (20)

GIT / SVN
GIT / SVNGIT / SVN
GIT / SVN
 
Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen Docker - Automatisches Deployment für Linux-Instanzen
Docker - Automatisches Deployment für Linux-Instanzen
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
 
Docker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemachtDocker - Containervirtualisierung leichtgemacht
Docker - Containervirtualisierung leichtgemacht
 
Einführung in Git
Einführung in GitEinführung in Git
Einführung in Git
 
systemd & Docker
systemd & Dockersystemd & Docker
systemd & Docker
 
docker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easydocker.io - Secure And Portable Containers Made Easy
docker.io - Secure And Portable Containers Made Easy
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
Docker Security - Architektur und Sicherheitsfunktionen von Containervirtuali...
 
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easydocker.io @ CentOS 7 - Secure And Portable Containers Made Easy
docker.io @ CentOS 7 - Secure And Portable Containers Made Easy
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
"git.net" gibt's nicht?
"git.net" gibt's nicht?"git.net" gibt's nicht?
"git.net" gibt's nicht?
 
Jenkins Acceleration
Jenkins AccelerationJenkins Acceleration
Jenkins Acceleration
 
Vagrant - Einführung & Verwendung
Vagrant - Einführung & VerwendungVagrant - Einführung & Verwendung
Vagrant - Einführung & Verwendung
 
Docker for Python Development
Docker for Python DevelopmentDocker for Python Development
Docker for Python Development
 
Geoinformatik-Kolloquium Juni 2012: High Performance Computing Cluster GIS
Geoinformatik-Kolloquium Juni 2012: High Performance Computing Cluster GISGeoinformatik-Kolloquium Juni 2012: High Performance Computing Cluster GIS
Geoinformatik-Kolloquium Juni 2012: High Performance Computing Cluster GIS
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
Docker Einführung @GPN15
Docker Einführung @GPN15Docker Einführung @GPN15
Docker Einführung @GPN15
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
 

Ähnlich wie Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)

Git class german / english
Git class german / englishGit class german / english
Git class german / english
Kevin Read
 
Version management mit Git und Github
Version management mit Git und Github Version management mit Git und Github
Version management mit Git und Github
fg.informatik Universität Basel
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Ant Maven
Ant MavenAnt Maven
Ant Maven
Fabian Lange
 
WordPress vs. TYPO3
WordPress vs. TYPO3WordPress vs. TYPO3
WordPress vs. TYPO3
webpard UG
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
Thorsten Kamann
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHFlorian Holzhauer
 
Mehr Sicherheit durch Automatisierung
Mehr Sicherheit durch AutomatisierungMehr Sicherheit durch Automatisierung
Mehr Sicherheit durch Automatisierung
OPEN KNOWLEDGE GmbH
 
git Vorstellung
git Vorstellunggit Vorstellung
git Vorstellung
Sven-S. Porst
 
Groupware Linuxtag 2008 Cb
Groupware Linuxtag 2008 CbGroupware Linuxtag 2008 Cb
Groupware Linuxtag 2008 Cb
bofh42
 
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Wiest Simon
 
Vagrant
VagrantVagrant
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
Joachim Baumann
 
Server Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerSandro Sonntag
 
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantDeployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Christoph Möller
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
QAware GmbH
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
Gregor Goldbach
 
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
Wiest Simon
 
Ec2009 Templates
Ec2009 TemplatesEc2009 Templates
Ec2009 Templates
Ulrich Krause
 

Ähnlich wie Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg) (20)

Git class german / english
Git class german / englishGit class german / english
Git class german / english
 
Version management mit Git und Github
Version management mit Git und Github Version management mit Git und Github
Version management mit Git und Github
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Ant Maven
Ant MavenAnt Maven
Ant Maven
 
WordPress vs. TYPO3
WordPress vs. TYPO3WordPress vs. TYPO3
WordPress vs. TYPO3
 
Mercurial
MercurialMercurial
Mercurial
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Entwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HHEntwicklung mit Chef und Vagrant - PHPUG HH
Entwicklung mit Chef und Vagrant - PHPUG HH
 
Mehr Sicherheit durch Automatisierung
Mehr Sicherheit durch AutomatisierungMehr Sicherheit durch Automatisierung
Mehr Sicherheit durch Automatisierung
 
git Vorstellung
git Vorstellunggit Vorstellung
git Vorstellung
 
Groupware Linuxtag 2008 Cb
Groupware Linuxtag 2008 CbGroupware Linuxtag 2008 Cb
Groupware Linuxtag 2008 Cb
 
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
 
Vagrant
VagrantVagrant
Vagrant
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
Server Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM Server
 
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantDeployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
Continuous Integration mit Hudson (JUG Mannheim, 27.01.2010)
 
Ec2009 Templates
Ec2009 TemplatesEc2009 Templates
Ec2009 Templates
 

Welches Versionskontrollsystem sollte ich nutzen? (SVN, Git, Hg)

  • 1. Welches Versionskontrollsystem sollte ich nutzen? Subversion, Git, Mercurial und Co #webmontag #paderborn 4. Februar 2013
  • 2. Hi!
  • 3. Warum sollte ich zuhören? 2012: • Kundenprojekte • iUPB • PINGO • private Projekte, Uni-Projekte • Open-Source-Contributions
  • 4. Warum ein VCS? Awesome App cool and awesome! Awesome App :( Awesome App (with errors)
  • 5. „Version control is the art of managing changes to information“ „VC system is a general system that can be used to manage any collection of files“ + wit hin a team For you, those files might be source code—for others, anything from grocery shopping lists to digital video [...] and beyond http://www.elixus.org/nightly/en/svk.intro.html
  • 7. Tools „A fool with a tool is still a fool“
  • 8. VCS ist nur ein Tool • Die besten Tools.. • sind unsichtbar • integrieren sich in deinen Prozess und nicht umgekehrt • VCS überhaupt notwendig? • ausreichende „Versionierung“ schon vorhanden? z. B. TimeMachine oder Dropbox • .NET/Visual Studio –> Team Foundation Server (Git-TF)
  • 9. 2000 2005 Zufall? 2005 a better CVS you can‘t do CVS right zentral verteilt verteilt sehr ähnlich
  • 10. Kriterien • Konzept und Workflow • Setup und Verwaltung • Kommando-Zeile, GUIs
  • 12. Konzept • zentrales Repository • (Ordner, SVN-/SSH-/Web-Server) • Benutzer/Client hat eigene Arbeitskopie • nach Fertigstellung werden die Änderungen zum Repository übertragen (commitet). http://onlamp.com/pub/a/oreilly/opensource/news/subversion_ch02.html
  • 13. Konzept: gleichzeitige Änderungen / Konflikte • Benutzer arbeiten gleichzeitig an verschiedenen und gleichen Dateien • Benuter „Sally“ ist fertig und commitet die Arbeit (= Senden an Server) • Benutzer „Harry“ ist fertig, kann aber nicht commiten, da sein Stand nicht mehr aktuell ist Vorbeugen: Datei sperren? svn:needs-lock
  • 14. Konzept: gleichzeitige Änderungen : Auflösung • Harry updatet seine Arbeitskopie mit den neusten Änderungen vom Repository • ... behebt evtl. Konflikte • ... und commitet dann den zusammengeführten (gemergeten) Stand
  • 15. Konzept: Branching (Zweige) • z. B. neue Features • paralleler Entwicklungszweig mit gleicher Vorgeschichte • Ein Branch ist nur ein Ordner -> manuelles Zusammenführen der Änderungen
  • 16. ea e en ough, but in practice it can becom „Merging changes sounds simpl e you re peatedly merge changes from on headache. The problem is that if e. dent ally merge the same change twic branch to another, you might acci e, ings will work fine. When patching a fil When this happens, sometimes th , and does Subversion typically notices if the file already has the change , g chan ge has been modified in any way nothing. But if the already-existin you'll get a conflict. n of sh ould prevent the double-applicatio Ideally, your version control system a tom atically remember which changes changes to a branch. It should au use be able to list them for you. It should branch has already received, and le. this information to help auto mate merges as much as possib does such a system. Like CVS, Subversion Unfortunately, Subversion is not mit out merge operations. When you com not yet record any information ab me has no idea whether those changes ca local modifications, the repository .“ from running svn merge, or from just hand-editing the files http://svnbook.red-bean.com/en/1.1/ch04s03.html
  • 17. Konzept • dezentrales / verteiltes = eigenes Repository git init • (Ordner, GIT-/SSH-/Web-Server) • eigene Arbeitskopie = eigenes (vollwertiges!) Repository = eigener Entwicklungszweig (Branch) • nach Fertigstellung werden die Änderungen commitet (lokal!) ? Harry Sally
  • 18. • Commit bedeutet NICHT, dass es an einen Server gesendet wird • Git hat eine Liste von entfernten Repositorys • push und pull • „Ursprungsrepository“ (Vorlage des Klons) heißt origin (= fetch + merge)
  • 19. Konzept: Pull/Push, Branching/Merging • Benutzer arbeiten gleichzeitig an verschiedenen und gleichen Dateien • Benuter „David“ arbeitet und commitet währenddessen mehrmals (lokal!) • nach Fertigstellung: Push an entferntes Repository (origin) • Benutzer „Bob“ ist auch fertig, kann aber seine „lokalen Commits“ nicht an origin pushen. • er pullt die Änderungen von David und pusht dann den (automatisch) gemergeten Stand. http://www.mageblog.de/wp-content/uploads/2012/06/centr-decentr.png
  • 20. , an d rebasing are near flawless: git’s „Git’s branching, tagging, merging x nisc ient, having once merged 12 Linu merging algorithm is close to om kernel patches simultaneously“ http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/
  • 22.
  • 24. Git vs. Hg — Mac Gyver vs. James Bond • Git ist eine Toolbox mit Werkzeugen zur Versionskontrolle • kommt mit jedem Workflow und in jeder Situation zurecht • (wenn man den passenden Befehl kennt) • Mercurial ist ein Werkzeug gemacht für einen Zweck • ähnlich wie Git, aber nicht so viele Freiheiten
  • 27. Subversion • viele GUIs und Tools verfügbar • vergleichsweise einfach aufzusetzen (CollabNet) • zentraler Server zwingend notwendig
  • 29. Git • viele GUIs verfügbar, einige schöner als andere ;-) • einfaches Setup • zentrales Repository mit Gitolite, etc. einfach (unter UNIX) einzurichten • Kommandozeile sehr mächtig ➜ ~ git int WARNING: You called a Git command named 'int', which does not exist. Continuing under the assumption that you meant 'init' in 0.1 seconds automatically... Initialized empty Git repository in /Volumes/Daten/Users/mwhittak/.git/ ➜ ~ git:(master) ✗
  • 31. git-bisect http://software-as-a-craft.blogspot.de/2010/12/how-git-saved-my-bacon-today.html
  • 32. mehr Commits = besser?
  • 33. Da sind noch... • CVS – nicht benutzen • SVK – dezentrales SVN • Bazaar - verteiltes VCS von Ubuntu-Hersteller • weitere open-source und proprietäre Tools en.wikipedia.org/wiki/List_of_revision_control_software
  • 34. Fazit • Subversion sehr einfach zu nutzen, einfacher Workflow • viele GUIs, Tools und Integrationsmöglichkeiten • Einfachheit von Subversion gleichzeitig größtes Argument für Git/HG • verteilt • „natürliches“ Braching und Merging • lineare und zentrale Entwicklung --> Subversion oder Git / Hg • verteilte, sehr asynchrone oder „agile“ Entwicklung --> Git / Hg
  • 35. . „Evaluate your workflow an d decide which tool suits you best 1. n. Learn how to use your chos en tool as well as you possibly ca 2. 3. Hel p newbies to make the transition. Shut up about the tools you use and write some code.“ 4. http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/
  • 36. Das war‘s :-) MichaelWhi online: post@michael-whittaker.de michael-whittaker.de twitter.com/MichaelWhi github.com/MichaelWhi Folien von heute
  • 37. Links • Git Wiki: Comparison with SVN: git.wiki.kernel.org/index.php/GitSvnComparison • Sei (k)ein Blödmann und nimm Git: slideshare.net/kogakure/sei-kein-bldmann-und- nimm-git-1830449 • Hoster: GitHub (www.github.com, 5 private Repos für Studenten: github.com/edu), BitBucket (www.bitbucket.org, private Repos gratis, Git und Hg), Uni Paderborn (IMT-Link 91411, SVN) Beanstalk (beanstalkapp.com, SVN, Git und Hg) • Selbst hosten Git: Ordner+SSH, Gitolite (github.com/sitaramc/gitolite/wiki), GitLab (gitlabhq.com), Gitorious (gitorious.org/gitorious), Stash (atlassian.com/software/stash/) Subversion: SVN-Server, Apache-Setup, CollabNet (www.collab.net/products/subversion) , Redmine (redmine.org), … • GUIs SourceTree (sourcetreeapp.com, Mac, Git+Hg), SmartGit (syntevo.com/smartgithg/, Git+Hg), Tortoise (gitorious.org/gitorious, Win, Git+Hg+SVN), GitHub App (mac.github.com / windows.github.com, Mac/Win), Versions (versionsapp.com, Mac, SVN, $), SmartSVN (smartsvn.com, alle, SVN), … EGit for Eclipse, MercurialEclipse, GitHub for Eclipse, …
  • 38. Links II • SVK: svk.bestpractical.com • Bazaar: bazaar.canonical.com • iUPB: www.i-upb.de (Code [und Commits]: github.com/yippie-io/iUPB)
  • 39. BONUS: Commit Messages – „Fool a tool“ Pflicht bei Git (<=> SVN), aber... :) bessere Idee: github.com/erlang/otp/wiki/Writing-good-commit-messages