Ο βασιλιάς Git!
-
Upload
panagiotis-kanavos -
Category
Software
-
view
269 -
download
0
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!
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