aptitude install git git-core
Καλό είναι να συστηθούμε αρχικά, δίνοντας το όνομα και το email μας, πληροφορίες που θα εμφανίζονται σε κάθε commit αρχείου
git config --global user.name "Your Name Comes Here" git config --global user.email you@yourdomain.example.com
Το αρχείο που δημιουργείται είναι το ~/.gitconfig ως
[user] name = "Your Name Comes Here" email = you@yourdomain.example.com
Μπαίνουμε στον φάκελο που θέλουμε (π.χ. ~/mygit) και δημιουργούμε ένα νέο project
mkdir ~/mygit cd ~/mygit git-init
Έτσι δημιουργήθηκε ένα .git repository μέσα σε αυτόν τον φάκελο
Στην συνέχεια προσθέτουμε κάποια αρχεία στον φάκελο που βρισκόμαστε (π.χ. ένα script αρχείο στο κέλυφος bash myscript)
cp ~/myscript .
Για να τo προσθέσουμε και στο .git repository εκτελούμε
git-add myscript git-commit myscript
Εδώ θα μας ανοίξει ένας editor για να γράψουμε ένα περιγραφικό μήνυμα. Θα αφήσουμε την περιγραφή initial commit, βγάζωντας τα σχόλια από την γραμμή
Για προτάσεις πως να γράφονται change logs (βλ. change logs standards)
Αφού τροποποιήσουμε το αρχείο μας, για να το εισάγουμε στο repository, κάνουμε απλά commit
git-commit myscript
Εάν έχουμε αρχεία στον ίδιο φάκελο που δεν θέλουμε να παρακολουθούνται για αλλαγές από το git τα σημειώνουμε στο αρχείο .gitignore π.χ.
myscript~ testscript testscript~ .gitignore~
Στην συνέχεια το προσθέτουμε και αυτό στο repository ώστε να κρατάμε και το ιστορικό των ενεργειών για αγνόηση ή όχι αρχείων
git add .gitignore git commit .gitignore
με μύνημα π.χ Make git ignore testscript and backup files.
Για να επαναλάβουμε το commit μαζί με τα τελευταία μηνύματα και τις αλλαγές
git commit --amend myscript
Αν είχαμε ορίσει και tag στο ακυρωμένο commit (π.χ. v0.1.1) το αφαιρούμε με
git tag -d v0.1.1
Και τέλος το ξαναορίζουμε στην τελευταία αλλαγή
git tag v0.1.1
Για να ορίσουμε την τελευταία έκδοση του project μας ως v0.1.0 εκτελούμε
git-tag v0.1.0
Για να ορίσουμε μια έκδοση ενός παλιού commit (π.χ. του 77d7ba625f25f989d5bf51f38d2c28e94b77645c)
git-tag v0.1.0beta 77d7ba
βλέπουμε ότι τα πρωτα γράμματα της ονομασίας αρκούν για να αναφερθούμε σε ένα commit
Για προτάσεις στο πως να σημειώνονται οι εκδόσεις (βλ. version numbering standards)
Για να διαγράψουμε μια ετικέτα έκδοσης π.χ. το tag v0.1.2
git tag -d v0.1.2
Για να πάμε π.χ. στην έκδοση v0.1.8 απλά εκτελούμε
git-checkout v0.1.8
Δεν διαγράφονται οι άλλες εκδόσεις αν συνεχίσουμε από εκεί, απλά γίνονται παρακλάδια
Εκτός από εκδόσεις μπορούμε να δώσουμε και ονόματα κλάδων
git-branch experimental
Για να μετονομάσουμε έναν κλαδο π.χ. τον master σε oldstable εκτελούμε
git-branch -m master oldstable
Για προτάσεις στο πως να ονομάζουμε κλάδους (βλ. branch naming standards)
Για να πάμε σε άλλο κλάδο (π.χ. experimental) απλά εκτελούμε
git-checkout experimental
Δεν διαγράφονται οι άλλοι κλάδοι αν συνεχίσουμε από εκεί, απλά γίνονται παρακλάδια
Αν έχουμε τραβήξει αλλαγές από άλλο repository και θέλουμε να τοποθετηθούμε στην έκδοση του αρχείο με τις τελευταίες αλλαγές ελέγχουμε τον κλάδο με git-log ώστε να δούμε την ονομασία του κλάδου και π.χ. για να εμφανίσουμε το αρχείο test.sh του κλάδου refs/remotes/remoteserver/master εκτελούμε
git-checkout refs/remotes/remoteserver/master test.sh
Για να δούμε το ιστορικό τον μέχρι τώρα αλλαγών
git-log
για ποιο όμορφο και συνοπτικό αποτέλεσμα σε μία γραμμή (το –decorate εμφανίζει τα tags)
git-log --decorate --color --pretty=oneline --abbrev-commit --abbrev=0
με πιο πλήρη μηνύματα και πληροφορίες για τις αλλαγές σε αρχεία
git-log --decorate --color --stat --pretty=short --abbrev-commit --abbrev=0
για περισσότερες ακόμα πληροφορίες
git-log --decorate --color --stat --pretty=fuller --graph --summary
Για να δούμε τις αλλαγές από την έκδοση v1.0.3 έως και τώρα
git-log v1.0.3..
Για να δούμε τις αλλαγές από την έκδοση v1.0.3 έως και την έκδοση v1.0.5
git-log v1.0.3..v1.0.5
Ομοίως για τους κλάδους Για να δούμε τις αλλαγές από τον κλάδο experimental έως και τώρα
git-log experimental..
Για να δούμε τις αλλαγές από την έκδοση testing έως και την experimental
git-log testing..experimental
Στο πακέτο git-buildpackage υπάρχει το εργαλείο git-dch του debian για δημιουργία changelogs (δημιουργήθηκε για debian πακέτα, αλλά αυτό δεν μας πειράζει καθόλου).
Εγκαθιστούμε με
aptitude install git-buildpackage
Για να δούμε τις αλλαγές που έγιναν στο commit μιας συγκεκριμένης έκδοσης
git show v1.0.1 --color
Υπάρχει η δυνατότητα να δούμε πότε τροποποιήθηκε μια οποιαδήποτε γραμμή ενός αρχείου με την εντολή git blame
git blame myscript
Για να αντιγράψουμε ένα repository από κάποιον server όπου έχουμε πρόσβαση ssh εκτελούμε την παρακάτω εντολή, π.χ.
cd /opt/develop git clone gitserver.mydomain.gr:/opt/develop/public/myproject
Έτσι θα δημιουργήσουμε τοπικά έναν νέο φάκελο myproject κάτω από τον φάκελο /opt/develop που θα είναι ακριβές αντίγραφο του φακέλου /opt/develop/public/myproject που βρίσκεται στο μηχάνημα gitserver.mydomain.gr
Για χρήση με εφαρμογές όπως redmine θα πρέπει να εκτελέσουμε την εντολή
git clone --bare ssh://user@domain.com/path/to/git/projectname projectname
Εάν εργαζόμαστε στο project και θέλουμε να τραβήξουμε από το απομακρυσμένο αποθετήριο τις αλλαγές ώστε να συγχρονίσουμε το τοπικό μας αντίγραφο εκτελούμε (ενώ είμαστε στο φάκελο του project)
git pull gitserver.mydomain.gr:/opt/develop/public/myproject master git pull --tags gitserver.mydomain.gr:/opt/develop/public/myproject master
Εάν θέλουμε να στείλουμε τις τελευταίες αλλαγές μας από το τοπικό αποθετήριο σε ένα απομακρυσμένο εκτελούμε (ενώ είμαστε στο φάκελο του project)
git push user@gitserver.mydomain.gr:/opt/develop/public/myproject master git push --tags user@gitserver.mydomain.gr:/opt/develop/public/myproject master
Τα αποθετήρια που τραβάμε και στέλνουμε αρχεία είναι συνήθως σταθερά. Μπορούμε να τα ορίσουμε π.χ. ως εξής
git remote add gitserver user@gitserver.mydomain.gr:/opt/develop/public/myproject master git config branch.master.remote 'gitserver' git config branch.master.merge 'refs/heads/master'
Στην το pull απλοποιείται
git pull gitserver
το ίδιο και το push
git push gitserver git push --tags gitserver
Για να δούμε την κατάσταση στο repository μας εκτελούμε
git-status
git-gc
Για να δούμε την τελευταία αλλαγή, πριν κάνουμε commit, εκτελούμε
git-diff myscript
Προσοχή! Η επαναφορά προυποθέτει ότι θα χάσουμε όλες τις μέχρι τότε αλλαγές
Για να διαγράψουμε και τις αλλαγές αλλά όχι τα παλιά ονόματα tags
git reset --hard HEAD^
Το καλούμε από κονσόλα ενώ είμαστε στον φάκελο που περιέχει το git repository
Από το μενού repository / visualize έχει την δυνατότητα να εμφανίσει το gitk
aptitude install giggle
aptitude install gitweb
Το καλούμε από κονσόλα ενώ είμαστε στον φάκελο που περιέχει το git repository
aptitude install gitk
Εάν κάνουμε παράλληλα αλλαγές στο repository από την γραμμή εντολών, για να τις εμφανίσουμε πηγαίνουμε File / Update. Προσοχή δεν κάνουμε Reload (ακόμα δεν γνωρίζω τι ακριβώς κάνει)
Δημιουργεί ενδιαφέροντα στατιστικά στοιχεία σε μορφή html για ένα repository
aptitude install gitstats
Εκτελούμε ως π.χ.
gitstats /path/to/myrepodir ~/gitstats
Στην συνέχεια ανοίγουμε την ιστοσελίδα ~/gitstats/index.html από έναν browser
Εγκατάσταση με
aptitude install tig
Aπό εδώ να δω οδηγίες για δημιουργία change logs http://www.luthi.eu/blog/2008/06/git-for-debian-packaging. Να δοκιμάσω σε άλλο φάκελο-αντίγραφο του repository
Να δοκιμάσω και να καταγράψω πως γίνονται 6 συνήθεις ενέργειες σε Version Control Systems (από ένα forum http://railsforum.com/viewtopic.php?pid=65590 - έχει και τις εντολές).