SlideShare uma empresa Scribd logo
1 de 27
Ο Βασιλιάς Git!
ΠΑΝΑΓΙΩΤΗΣ ΚΑΝΑΒΟΣ
“
”
Ο Πόλεμος των VCS τελείωσε
και
Νικητής είναι το Git!
ΘΡΑΣΥΒΟΥΛΑΣ
Git εδώ, Git εκεί...
 Δημοφιλέστερο VCS - 43% σύμφωνα με το Eclipse Foundation
 27% των αγγελιών στο ITJobsWatch, διπλάσιες από κάθε άλλο VCS
 Native υποστήριξη στον TFS
 Φάτσα-κάρτα στο Visual Studio Code
 MS Connect 2015 Git Git Git
 Τυχαίο;
Έτυχε ποτέ;
 Να είναι κλειδωμένο το αρχείο που χρειάζεται;
 Να θέλουν 10 devs το ίδιο αρχείο;
 Να θέλετε να κρατήσετε μισοτελειωμένη δουλειά πριν από επικίνδυνες
αλλαγές;
 Να χρειαστεί να πετάξετε αλλαγές μιας βδομάδας για ένα λάθος της Τετάρτης;
 Να μπλέκονται διάφορες αλλαγές σε ένα και μοναδικό branch;
 Να φοβάστε να φτιάξετε ένα branch γιατί θα πάρει χρόνια;
 Να παγώσετε δουλειά γιατί κάτι έσκασε στην παραγωγή; Και μετά να παλεύετε
να περάσετε τις διορθώσεις;
 Να χάσετε το ένα και μοναδικό repository;
Έτυχε ποτέ;
 Να σας κάψουν την εταιρεία;
 Πολλά repos
 Μεταφορά αλλαγών, συμπίεση
  Πανεύκολο replication
Λίγη ιστορία
 Δημιουργήθηκε από το Linus Torvalds
 Version Control για ανάπτυξη του Linux
 Στόχοι
 Scale σε χιλιάδες developers
 Γρήγορο
 Εύκολο branching
 Atomic commits
 Ανθεκτικό
Πως δουλεύει?
 Πολλαπλά ισότιμα repositories
 Αποθηκεύει αντικείμενα, όχι αρχεία
 Ένα commit είναι ένα σύνολο refs προς συγκεκριμένα αντικείμενα
 Ομοίως branches, tags
 Πανεύκολο και ταχύτατο branching
 Συλλογή εντολών και extensions a la Linux
 git svn, git flow, git tfs
 Και βιβλιοθήκη
 Libgit
 Libgitsharp (χρησιμοποιείται στον TFS)
 Και στην εφαρμογή σας
Πολλαπλά Repos
Dev 1
Dev 2
Dev 3
Team Repo
Other Team
Clients
 Console
 TortoiseGit
 Git clients
 Github for Windows
 SourceTree
 IDEs
Δημιουργία repo
 Τοπικά
 Create empty repo
 Προσθήκη .gitignore
 Από το IDE
 Πρώτα στο server
 Δημιουργία νέου repo
 Αρχικά αρχεία όπως readmes, .gitignore
Branching
 git checkout –b branch_name
 git branch branch_name
 Ταχύτατο
 Ευνοεί τη δημιουργία πολλών μικρών branches
 Όσο μικρότερο σε διάρκεια το branch, τόσο ευκολότερο το merge
master A
A1
A2 Tag1
Merging
 Ουσιαστικά ανανεώνονται τα refs του target branch
 Fast-forward των commits aν δεν έχουν γίνει αλλαγές στο target
 Αλλιώς merge αρχείων, έλεγχος για conflicts
Conflicts
 Don’t Panic! Πάντα υπάρχει και το abort!
 Και είναι μόνο τοπικά!
 Και δεν είναι συχνά – ακόμα και αν έχει αλλάξει το ίδιο αρχείο
 Commit επιτρέπεται μόνο όταν γίνουν όλα resolve
Workflows
 Δεν επιβάλλει συγκεκριμένο flow
 Εύκολο branching  εύκολη προσαρμογή
 Διαφορετικά flows ανάλογα με τις ανάγκες
Ατομικό μέγεθος
 Συχνά τοπικά commits
 Amends αν ξεχαστεί τίποτε
 Pull από το server
 Conflict resolution
 Push στο server
 Όχι amend μετά το Push!
 Τυπική διαδικασία σε κάθε περίπτωση
 Τοπικά branches για κάθε task, merge πριν το push
GitHub flow
 Κατάλληλο για open source projects
 Τοπικά branches ανά feature
 Δημιουργία Pull Request στο τέλος και υποβολή
 Συζήτηση, τροποποίηση του pull request
 Merge του διορθωμένου PR
Gitflow
 Κατάλληλο για μακροχρόνια
projects
 Υποστήριξη από εργαλεία για
εύκολη δημιουργία, merge,
squash branches και commits
 Git flow feature start MyF1
 SourceTree
 Visual Studio Extension
Continuous Deployment
Ανάπτυξη στο master
 Βάι το καθηγητή, βάι ...
 Όχι ακριβώς
 Βραχύβια local branches
 Features στο master
 Ανενεργά μέσω Feature switches
 Στιβαρό testing
 Όσο μικρότερες οι αλλαγές τόσο ευκολότερο το testing
Continuous Deployment - 2
 Push-to-Deploy
 Βασική υποστήριξη από το 2.3 (είμαστε 2.6.3)
 git config receive.denyCurrentBranch updateInstead
Migrations
 Git svn, git tfs, git cvs
 Προσοχή με τα amends!
 Git svn commands for cloning
 Δεν χειρίζεται tags – στο SVN είναι ξεχωριστά branches
 Svn2git
Git Server?
 Τοπικά σε ένα άλλο folder
 Σε ένα file share
 Ως daemon
 Μέσω server εφαρμογών/υπηρεσιών όπως
 Gitlab
 Gitolite
 TFS
 GitHub
 …
Πάει παντού
 Ακόμα και σε Raspberry. Πάνω από docker
 Παράδειγμα - Gogs
Συντήρηση
 Γενικό τοπικό καθάρισμα
 git gc
 Έλεγχος
 git fsck
 Διαγραφή ανενεργών branches
 Git remote prune origin --dry-run
 Search for commit
 Git show <sha_number>
Αντιμετώπιση ατυχών πρωτοβουλιών
 Revert
 git reset στο remote
 Worst case – Clone from some remote
 AYTO EINAI FEATURE!
Pluralsight Courses
ΕΙΝΑΙ ΤΣΑΜΠΑ με το Dev Essentials
 Introduction to Git link
 Git Fundamentals link από τον James Kovacs
 Git for VS Developers link
 Github for Windows Developers link
 Advanced Git link
Χρήσιμα Links
 http://git-scm.com
 TortoiseGit link
 SourceTree link
 GitFlow Tutorial link
 Gitflow home link
 Gogs, Docker on Raspberry Pi link
Βιβλία (έχουμε εκπτώσεις σε O’Reilly, Manning!)
 Git Pocket Guide με How Do I link O’Reilly
 Learning Git in a month of Lunches link
Ο βασιλιάς Git!

Mais conteúdo relacionado

Mais de Panagiotis Kanavos

The server side story: Parallel and Asynchronous programming in .NET - ITPro...
The server side story:  Parallel and Asynchronous programming in .NET - ITPro...The server side story:  Parallel and Asynchronous programming in .NET - ITPro...
The server side story: Parallel and Asynchronous programming in .NET - ITPro...Panagiotis Kanavos
 
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...Panagiotis Kanavos
 
65ο DotNetZone event: Tpl data flow και railway oriented programming
65ο DotNetZone event: Tpl data flow και railway oriented programming65ο DotNetZone event: Tpl data flow και railway oriented programming
65ο DotNetZone event: Tpl data flow και railway oriented programmingPanagiotis Kanavos
 
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...Panagiotis Kanavos
 
Parallel and Asynchronous Programming - ITProDevConnections 2012 (English)
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (English)Parallel and Asynchronous Programming -  ITProDevConnections 2012 (English)
Parallel and Asynchronous Programming - ITProDevConnections 2012 (English)Panagiotis Kanavos
 
Pithos - Architecture and .NET Technologies
Pithos - Architecture and .NET TechnologiesPithos - Architecture and .NET Technologies
Pithos - Architecture and .NET TechnologiesPanagiotis Kanavos
 
Πίθος - Αρχιτεκτονική και τεχνολογίες .NET
Πίθος - Αρχιτεκτονική και τεχνολογίες .NETΠίθος - Αρχιτεκτονική και τεχνολογίες .NET
Πίθος - Αρχιτεκτονική και τεχνολογίες .NETPanagiotis Kanavos
 
Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)Panagiotis Kanavos
 
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)Panagiotis Kanavos
 

Mais de Panagiotis Kanavos (9)

The server side story: Parallel and Asynchronous programming in .NET - ITPro...
The server side story:  Parallel and Asynchronous programming in .NET - ITPro...The server side story:  Parallel and Asynchronous programming in .NET - ITPro...
The server side story: Parallel and Asynchronous programming in .NET - ITPro...
 
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...
 
65ο DotNetZone event: Tpl data flow και railway oriented programming
65ο DotNetZone event: Tpl data flow και railway oriented programming65ο DotNetZone event: Tpl data flow και railway oriented programming
65ο DotNetZone event: Tpl data flow και railway oriented programming
 
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
The Server-SIde Story: Παράλληλος και ασύγχρονος προγραμματισμός στο .NET - I...
 
Parallel and Asynchronous Programming - ITProDevConnections 2012 (English)
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (English)Parallel and Asynchronous Programming -  ITProDevConnections 2012 (English)
Parallel and Asynchronous Programming - ITProDevConnections 2012 (English)
 
Pithos - Architecture and .NET Technologies
Pithos - Architecture and .NET TechnologiesPithos - Architecture and .NET Technologies
Pithos - Architecture and .NET Technologies
 
Πίθος - Αρχιτεκτονική και τεχνολογίες .NET
Πίθος - Αρχιτεκτονική και τεχνολογίες .NETΠίθος - Αρχιτεκτονική και τεχνολογίες .NET
Πίθος - Αρχιτεκτονική και τεχνολογίες .NET
 
Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)
 
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
Real Life Task Parallel Library, ITProDevConnections 2011 (Greek)
 

Ο βασιλιάς Git!

  • 2. “ ” Ο Πόλεμος των VCS τελείωσε και Νικητής είναι το Git! ΘΡΑΣΥΒΟΥΛΑΣ
  • 3. Git εδώ, Git εκεί...  Δημοφιλέστερο VCS - 43% σύμφωνα με το Eclipse Foundation  27% των αγγελιών στο ITJobsWatch, διπλάσιες από κάθε άλλο VCS  Native υποστήριξη στον TFS  Φάτσα-κάρτα στο Visual Studio Code  MS Connect 2015 Git Git Git  Τυχαίο;
  • 4. Έτυχε ποτέ;  Να είναι κλειδωμένο το αρχείο που χρειάζεται;  Να θέλουν 10 devs το ίδιο αρχείο;  Να θέλετε να κρατήσετε μισοτελειωμένη δουλειά πριν από επικίνδυνες αλλαγές;  Να χρειαστεί να πετάξετε αλλαγές μιας βδομάδας για ένα λάθος της Τετάρτης;  Να μπλέκονται διάφορες αλλαγές σε ένα και μοναδικό branch;  Να φοβάστε να φτιάξετε ένα branch γιατί θα πάρει χρόνια;  Να παγώσετε δουλειά γιατί κάτι έσκασε στην παραγωγή; Και μετά να παλεύετε να περάσετε τις διορθώσεις;  Να χάσετε το ένα και μοναδικό repository;
  • 5. Έτυχε ποτέ;  Να σας κάψουν την εταιρεία;  Πολλά repos  Μεταφορά αλλαγών, συμπίεση   Πανεύκολο replication
  • 6. Λίγη ιστορία  Δημιουργήθηκε από το Linus Torvalds  Version Control για ανάπτυξη του Linux  Στόχοι  Scale σε χιλιάδες developers  Γρήγορο  Εύκολο branching  Atomic commits  Ανθεκτικό
  • 7. Πως δουλεύει?  Πολλαπλά ισότιμα repositories  Αποθηκεύει αντικείμενα, όχι αρχεία  Ένα commit είναι ένα σύνολο refs προς συγκεκριμένα αντικείμενα  Ομοίως branches, tags  Πανεύκολο και ταχύτατο branching  Συλλογή εντολών και extensions a la Linux  git svn, git flow, git tfs  Και βιβλιοθήκη  Libgit  Libgitsharp (χρησιμοποιείται στον TFS)  Και στην εφαρμογή σας
  • 8. Πολλαπλά Repos Dev 1 Dev 2 Dev 3 Team Repo Other Team
  • 9. Clients  Console  TortoiseGit  Git clients  Github for Windows  SourceTree  IDEs
  • 10. Δημιουργία repo  Τοπικά  Create empty repo  Προσθήκη .gitignore  Από το IDE  Πρώτα στο server  Δημιουργία νέου repo  Αρχικά αρχεία όπως readmes, .gitignore
  • 11. Branching  git checkout –b branch_name  git branch branch_name  Ταχύτατο  Ευνοεί τη δημιουργία πολλών μικρών branches  Όσο μικρότερο σε διάρκεια το branch, τόσο ευκολότερο το merge master A A1 A2 Tag1
  • 12. Merging  Ουσιαστικά ανανεώνονται τα refs του target branch  Fast-forward των commits aν δεν έχουν γίνει αλλαγές στο target  Αλλιώς merge αρχείων, έλεγχος για conflicts
  • 13. Conflicts  Don’t Panic! Πάντα υπάρχει και το abort!  Και είναι μόνο τοπικά!  Και δεν είναι συχνά – ακόμα και αν έχει αλλάξει το ίδιο αρχείο  Commit επιτρέπεται μόνο όταν γίνουν όλα resolve
  • 14. Workflows  Δεν επιβάλλει συγκεκριμένο flow  Εύκολο branching  εύκολη προσαρμογή  Διαφορετικά flows ανάλογα με τις ανάγκες
  • 15. Ατομικό μέγεθος  Συχνά τοπικά commits  Amends αν ξεχαστεί τίποτε  Pull από το server  Conflict resolution  Push στο server  Όχι amend μετά το Push!  Τυπική διαδικασία σε κάθε περίπτωση  Τοπικά branches για κάθε task, merge πριν το push
  • 16. GitHub flow  Κατάλληλο για open source projects  Τοπικά branches ανά feature  Δημιουργία Pull Request στο τέλος και υποβολή  Συζήτηση, τροποποίηση του pull request  Merge του διορθωμένου PR
  • 17. Gitflow  Κατάλληλο για μακροχρόνια projects  Υποστήριξη από εργαλεία για εύκολη δημιουργία, merge, squash branches και commits  Git flow feature start MyF1  SourceTree  Visual Studio Extension
  • 18. Continuous Deployment Ανάπτυξη στο master  Βάι το καθηγητή, βάι ...  Όχι ακριβώς  Βραχύβια local branches  Features στο master  Ανενεργά μέσω Feature switches  Στιβαρό testing  Όσο μικρότερες οι αλλαγές τόσο ευκολότερο το testing
  • 19. Continuous Deployment - 2  Push-to-Deploy  Βασική υποστήριξη από το 2.3 (είμαστε 2.6.3)  git config receive.denyCurrentBranch updateInstead
  • 20. Migrations  Git svn, git tfs, git cvs  Προσοχή με τα amends!  Git svn commands for cloning  Δεν χειρίζεται tags – στο SVN είναι ξεχωριστά branches  Svn2git
  • 21. Git Server?  Τοπικά σε ένα άλλο folder  Σε ένα file share  Ως daemon  Μέσω server εφαρμογών/υπηρεσιών όπως  Gitlab  Gitolite  TFS  GitHub  …
  • 22. Πάει παντού  Ακόμα και σε Raspberry. Πάνω από docker  Παράδειγμα - Gogs
  • 23. Συντήρηση  Γενικό τοπικό καθάρισμα  git gc  Έλεγχος  git fsck  Διαγραφή ανενεργών branches  Git remote prune origin --dry-run  Search for commit  Git show <sha_number>
  • 24. Αντιμετώπιση ατυχών πρωτοβουλιών  Revert  git reset στο remote  Worst case – Clone from some remote  AYTO EINAI FEATURE!
  • 25. Pluralsight Courses ΕΙΝΑΙ ΤΣΑΜΠΑ με το Dev Essentials  Introduction to Git link  Git Fundamentals link από τον James Kovacs  Git for VS Developers link  Github for Windows Developers link  Advanced Git link
  • 26. Χρήσιμα Links  http://git-scm.com  TortoiseGit link  SourceTree link  GitFlow Tutorial link  Gitflow home link  Gogs, Docker on Raspberry Pi link Βιβλία (έχουμε εκπτώσεις σε O’Reilly, Manning!)  Git Pocket Guide με How Do I link O’Reilly  Learning Git in a month of Lunches link