Version control ή Revision Control είναι μια ομάδα εργαλείων που χρησιμοποιείται για την αποτελεσματική διαχείριση του πηγαίου κώδικα ενός προγράμματος οποιουδήποτε τύπου.

Χρησιμοποιώντας τέτοια ένα τέτοιο σύστημα υπάρχει η δυνατότητα να αποθηκεύετε το ιστορικό αλλαγών στο κώδικα και γενικότερα να κάνεται tracking στο τι συμβαίνει στα αρχεία ενός λογισμικού τόσο στη φάση ανάπτυξης αλλά και στη συνέχεια.

Eίναι ιδιαίτερα χρήσιμο όταν αναπτύσεται project λογισμικού, στο πλαίσιο μιας ομάδας όπου αποτελείται από δύο ή περισσότερα ατόμα γιατί μπορούν να ενώσουν πολύ εύκολα τα κομμάτια του κώδικα που γράφει ο κάθε developer ξεxωριστά.

Αλλά και στη περίπτωση που δουλεύει κάποιος μόνος του, αν δημιουργηθεί πρόβλημα στο λογισμικό ή έχει κάποιο σημαντικό bug μπορείτε πολύ εύκολα να επαναφέρετε σε μία προηγούμενη έκδοση μέχρι να λυθεί το bug.

Τρία γνωστά Version Control Systems, είναι το Mercurial το οποίο δημιουργήθηκε το 2005 και είναι κυρίως γραμμένο στη python, SVN ή αλλιώς Apache Subversion, και το τελευαταίο δημοφιλές είναι το Git

Το Git αναπτύχθηκε από τον Linus Torvalds το 2005 για την ανάπτυξη του πηρύνα του Linux

Αυτό που επικράτησε ως πιο δημοφιλής τελικά είναι το git ο κυριος λόγος είναι το καθε repository είναι αυτόνομο. Εάν έχουμε εγκαταστήσει το git στο λειτουργικό μας σύστημα για να δημιουργήσουμε ένα κενό repository κάνουμε

git init

Για να προσθούσουμε όλα τα αρχείο από το project μας στη προσωρινή περιοχή (staging area) εκτελούμε

git add .

Για να αποθηκεύσουμε τις αλλαγές στο τοπικό repository

git commit -m "to minimima mou"

Δύο βασικά κλαδια είναι το master και το develop, αλλά θέλουμε να δημιουργήσουμε ένα χαρακτηριστικό ανεξάρτητα μπορούμε να δημιουργήσουμε καινούργια για να δουλεύψουμε.

git branch "onoma kladiou"

Για να αλλάξουμε κλαδί

git checkout "onoma kladiou"

Τώρα αν βρισκόμαστε στο  branch και υπάρχουν καινούργιες αλλαγές στο master branch μπορούμε να τις ενσωματώσουμε στο κλαδί "onoma kladiou" κάνοντας merge

git merge master

Στη συνέχεια αν υπάρχουν confict

git mergetool

Ενα γνωστό εργαλείο είναι το meld

Μπορείτε να έχετε τα remote directories σε δικός σας server έχοντας εγκαταστησει λογισμικό όπως gitlab ή να χρησiμοποιήσετε δημοφιλής υπηρεσίες για αποθετήρια λογισμικός όπως το GitHub, BitBucket, BeanStalk. Αλλά ειδικά όταν αναπτύσσεται επιχειρηματικό λογισμικό και όχι απλά να κάνετε παραμετροποιήσεις η χρήση του source controls είναι απαραίτητη.

Ένα tip γιατ περίπτωση που γίνει corrupt το τοπικό directory

fatal: loose object 201a213e2db8c8b2d907718af0836aeed32fad95 (stored in .git/objects/20/1a213e2db8c8b2d907718af0836aeed32fad95) is corrupt

find .git/objects/ -size 0 -exec rm -f {} \;
git fetch origin