Ο βασιλιάς Git!

Post on 14-Apr-2017

269 views 0 download

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

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

Public Repo

Dev 1Dev 2Dev 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, τόσο ευκολότερο το

mergemaste

r AA1A2 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!

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