Ο βασιλιάς Git!

27
Ο Βασιλιάς Git! ΠΑΝΑΓΙΩΤΗΣ ΚΑΝΑΒΟΣ

Transcript of Ο βασιλιάς Git!

Page 1: Ο βασιλιάς Git!

Ο Βασιλιάς Git!ΠΑΝΑΓΙΩΤΗΣ ΚΑΝΑΒΟΣ

Page 2: Ο βασιλιάς Git!

“”

Ο Πόλεμος των VCS τελείωσε και Νικητής είναι το Git!

ΘΡΑΣΥΒΟΥΛΑΣ

Page 3: Ο βασιλιάς Git!

Git εδώ, Git εκεί...

Δημοφιλέστερο VCS - 43% σύμφωνα με το Eclipse Foundation 27% των αγγελιών στο ITJobsWatch, διπλάσιες από κάθε άλλο

VCS Native υποστήριξη στον TFS Φάτσα-κάρτα στο Visual Studio Code MS Connect 2015 Git Git Git

Τυχαίο;

Page 4: Ο βασιλιάς Git!

Έτυχε ποτέ;

Να είναι κλειδωμένο το αρχείο που χρειάζεται; Να θέλουν 10 devs το ίδιο αρχείο; Να θέλετε να κρατήσετε μισοτελειωμένη δουλειά πριν από

επικίνδυνες αλλαγές; Να χρειαστεί να πετάξετε αλλαγές μιας βδομάδας για ένα λάθος

της Τετάρτης; Να μπλέκονται διάφορες αλλαγές σε ένα και μοναδικό branch; Να φοβάστε να φτιάξετε ένα branch γιατί θα πάρει χρόνια; Να παγώσετε δουλειά γιατί κάτι έσκασε στην παραγωγή; Και μετά

να παλεύετε να περάσετε τις διορθώσεις; Να χάσετε το ένα και μοναδικό repository;

Page 5: Ο βασιλιάς Git!

Έτυχε ποτέ;

Να σας κάψουν την εταιρεία; Πολλά repos Μεταφορά αλλαγών, συμπίεση Πανεύκολο replication

Page 6: Ο βασιλιάς Git!

Λίγη ιστορία

Δημιουργήθηκε από το Linus Torvalds Version Control για ανάπτυξη του Linux Στόχοι

Scale σε χιλιάδες developers Γρήγορο Εύκολο branching Atomic commits Ανθεκτικό

Page 7: Ο βασιλιάς Git!

Πως δουλεύει?

Πολλαπλά ισότιμα repositories Αποθηκεύει αντικείμενα, όχι αρχεία Ένα commit είναι ένα σύνολο refs προς συγκεκριμένα αντικείμενα Ομοίως branches, tags Πανεύκολο και ταχύτατο branching Συλλογή εντολών και extensions a la Linux

git svn, git flow, git tfs Και βιβλιοθήκη

Libgit Libgitsharp (χρησιμοποιείται στον TFS) Και στην εφαρμογή σας

Page 8: Ο βασιλιάς Git!

Πολλαπλά Repos

Public Repo

Dev 1Dev 2Dev 3

Team Repo

Other Team

Page 9: Ο βασιλιάς Git!

Clients

Console TortoiseGit Git clients

Github for Windows SourceTree IDEs

Page 10: Ο βασιλιάς Git!

Δημιουργία repo

Τοπικά Create empty repo Προσθήκη .gitignore Από το IDE

Πρώτα στο server Δημιουργία νέου repo Αρχικά αρχεία όπως readmes, .gitignore

Page 11: Ο βασιλιάς Git!

Branching

git checkout –b branch_name git branch branch_name Ταχύτατο Ευνοεί τη δημιουργία πολλών μικρών branches Όσο μικρότερο σε διάρκεια το branch, τόσο ευκολότερο το

mergemaste

r AA1A2 Tag1

Page 12: Ο βασιλιάς Git!

Merging

Ουσιαστικά ανανεώνονται τα refs του target branch Fast-forward των commits aν δεν έχουν γίνει αλλαγές στο target Αλλιώς merge αρχείων, έλεγχος για conflicts

Page 13: Ο βασιλιάς Git!

Conflicts

Don’t Panic! Πάντα υπάρχει και το abort! Και είναι μόνο τοπικά! Και δεν είναι συχνά – ακόμα και αν έχει αλλάξει το ίδιο αρχείο Commit επιτρέπεται μόνο όταν γίνουν όλα resolve

Page 14: Ο βασιλιάς Git!

Workflows

Δεν επιβάλλει συγκεκριμένο flow Εύκολο branching εύκολη προσαρμογή

Διαφορετικά flows ανάλογα με τις ανάγκες

Page 15: Ο βασιλιάς Git!

Ατομικό μέγεθος

Συχνά τοπικά commits Amends αν ξεχαστεί τίποτε Pull από το server Conflict resolution Push στο server Όχι amend μετά το Push!

Τυπική διαδικασία σε κάθε περίπτωση Τοπικά branches για κάθε task, merge πριν το push

Page 16: Ο βασιλιάς Git!

GitHub flow

Κατάλληλο για open source projects Τοπικά branches ανά feature Δημιουργία Pull Request στο τέλος και υποβολή Συζήτηση, τροποποίηση του pull request Merge του διορθωμένου PR

Page 17: Ο βασιλιάς Git!

Gitflow Κατάλληλο για μακροχρόνια

projects Υποστήριξη από εργαλεία

για εύκολη δημιουργία, merge, squash branches και commits

Git flow feature start MyF1

SourceTree Visual Studio Extension

Page 18: Ο βασιλιάς Git!

Continuous DeploymentΑνάπτυξη στο master

Βάι το καθηγητή, βάι ... Όχι ακριβώς Βραχύβια local branches Features στο master Ανενεργά μέσω Feature switches Στιβαρό testing Όσο μικρότερες οι αλλαγές τόσο ευκολότερο το testing

Page 19: Ο βασιλιάς Git!

Continuous Deployment - 2

Push-to-Deploy Βασική υποστήριξη από το 2.3 (είμαστε 2.6.3) git config receive.denyCurrentBranch updateInstead

Page 20: Ο βασιλιάς Git!

Migrations

Git svn, git tfs, git cvs Προσοχή με τα amends! Git svn commands for cloning Δεν χειρίζεται tags – στο SVN είναι ξεχωριστά branches Svn2git

Page 21: Ο βασιλιάς Git!

Git Server?

Τοπικά σε ένα άλλο folder Σε ένα file share Ως daemon Μέσω server εφαρμογών/υπηρεσιών όπως

Gitlab Gitolite TFS GitHub …

Page 22: Ο βασιλιάς Git!

Πάει παντού

Ακόμα και σε Raspberry. Πάνω από docker Παράδειγμα - Gogs

Page 23: Ο βασιλιάς Git!

Συντήρηση

Γενικό τοπικό καθάρισμα git gc

Έλεγχος git fsck

Διαγραφή ανενεργών branches Git remote prune origin --dry-run

Search for commit Git show <sha_number>

Page 24: Ο βασιλιάς Git!

Αντιμετώπιση ατυχών πρωτοβουλιών

Revert git reset στο remote

Worst case – Clone from some remote AYTO EINAI FEATURE!

Page 26: Ο βασιλιάς Git!

Χρήσιμα 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

Page 27: Ο βασιλιάς Git!