Ο Βασιλιάς 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!

Ο βασιλιάς Git!

  • 1.
  • 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 Dev2 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