LinuxFanClub Wiki

Υπηρεσίες, Προγραμματισμός, Εκπαίδευση ..

User Tools

Site Tools


el:linux:debian:server:git

Git - Version Control

Εγκατάσταση

aptitude install git git-core

Βασικές εντολές

Όνομα και email χρήστη

Καλό είναι να συστηθούμε αρχικά, δίνοντας το όνομα και το 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

Δημιουργία repository

Μπαίνουμε στον φάκελο που θέλουμε (π.χ. ~/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 (βλ. 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

Για να επαναλάβουμε το commit μαζί με τα τελευταία μηνύματα και τις αλλαγές

git commit --amend myscript

Αν είχαμε ορίσει και tag στο ακυρωμένο commit (π.χ. v0.1.1) το αφαιρούμε με

git tag -d v0.1.1

Και τέλος το ξαναορίζουμε στην τελευταία αλλαγή

git tag v0.1.1

tags (εκδόσεις)

Για να ορίσουμε την τελευταία έκδοση του 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

Checkout σε άλλη έκδοση

Για να πάμε π.χ. στην έκδοση v0.1.8 απλά εκτελούμε

git-checkout v0.1.8

Δεν διαγράφονται οι άλλες εκδόσεις αν συνεχίσουμε από εκεί, απλά γίνονται παρακλάδια

Κλάδοι (branches)

Εκτός από εκδόσεις μπορούμε να δώσουμε και ονόματα κλάδων

git-branch experimental

Για να μετονομάσουμε έναν κλαδο π.χ. τον master σε oldstable εκτελούμε

git-branch -m master oldstable

Ονομασίες κλάδων

Για προτάσεις στο πως να ονομάζουμε κλάδους (βλ. branch naming standards)

Checkout σε άλλο κλαδο

Για να πάμε σε άλλο κλάδο (π.χ. experimental) απλά εκτελούμε

git-checkout experimental 

Δεν διαγράφονται οι άλλοι κλάδοι αν συνεχίσουμε από εκεί, απλά γίνονται παρακλάδια

Αν έχουμε τραβήξει αλλαγές από άλλο repository και θέλουμε να τοποθετηθούμε στην έκδοση του αρχείο με τις τελευταίες αλλαγές ελέγχουμε τον κλάδο με git-log ώστε να δούμε την ονομασία του κλάδου και π.χ. για να εμφανίσουμε το αρχείο test.sh του κλάδου refs/remotes/remoteserver/master εκτελούμε

git-checkout refs/remotes/remoteserver/master test.sh

History

revisions

Για να δούμε το ιστορικό τον μέχρι τώρα αλλαγών

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

Δημιουργία ChangeLogs

Στο πακέτο git-buildpackage υπάρχει το εργαλείο git-dch του debian για δημιουργία changelogs (δημιουργήθηκε για debian πακέτα, αλλά αυτό δεν μας πειράζει καθόλου).

Εγκαθιστούμε με

aptitude install git-buildpackage

Diffs

Για να δούμε τις αλλαγές που έγιναν στο commit μιας συγκεκριμένης έκδοσης

git show v1.0.1 --color

Ανά Γραμμή Αρχείου

Υπάρχει η δυνατότητα να δούμε πότε τροποποιήθηκε μια οποιαδήποτε γραμμή ενός αρχείου με την εντολή git blame

git blame myscript

Κατανεμημένη ανάπτυξη

clone - Αρχική αντιγραφή

Για να αντιγράψουμε ένα 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 

pull - Συγχρονισμός προς τοπικό αποθετήριο

Εάν εργαζόμαστε στο project και θέλουμε να τραβήξουμε από το απομακρυσμένο αποθετήριο τις αλλαγές ώστε να συγχρονίσουμε το τοπικό μας αντίγραφο εκτελούμε (ενώ είμαστε στο φάκελο του project)

git pull gitserver.mydomain.gr:/opt/develop/public/myproject master
git pull --tags gitserver.mydomain.gr:/opt/develop/public/myproject master

push - Συγχρονισμός προς απομακρυσμένο αποθετήριο

Εάν θέλουμε να στείλουμε τις τελευταίες αλλαγές μας από το τοπικό αποθετήριο σε ένα απομακρυσμένο εκτελούμε (ενώ είμαστε στο φάκελο του project)

git push user@gitserver.mydomain.gr:/opt/develop/public/myproject master
git push --tags user@gitserver.mydomain.gr:/opt/develop/public/myproject master

remote - config - ρύθμιση αποθετηρίων

Τα αποθετήρια που τραβάμε και στέλνουμε αρχεία είναι συνήθως σταθερά. Μπορούμε να τα ορίσουμε π.χ. ως εξής

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

Cleanup/Compress

git-gc

Διαφορές αρχείων

Για να δούμε την τελευταία αλλαγή, πριν κάνουμε commit, εκτελούμε

git-diff myscript

Μόνιμη διαγραφή αλλαγών τελευταίου commit

Προσοχή! Η επαναφορά προυποθέτει ότι θα χάσουμε όλες τις μέχρι τότε αλλαγές

Για να διαγράψουμε και τις αλλαγές αλλά όχι τα παλιά ονόματα tags

git reset --hard HEAD^

git-gui - γραφικό εργαλείο

Το καλούμε από κονσόλα ενώ είμαστε στον φάκελο που περιέχει το git repository

Από το μενού repository / visualize έχει την δυνατότητα να εμφανίσει το gitk

giggle - γραφικό εργαλείο

aptitude install giggle

gitweb - Web Interface

aptitude install gitweb

Gitk - γραφικό εργαλείο

Το καλούμε από κονσόλα ενώ είμαστε στον φάκελο που περιέχει το git repository

Εγκατάσταση

aptitude install gitk

Λειτουργίες

Εάν κάνουμε παράλληλα αλλαγές στο repository από την γραμμή εντολών, για να τις εμφανίσουμε πηγαίνουμε File / Update. Προσοχή δεν κάνουμε Reload (ακόμα δεν γνωρίζω τι ακριβώς κάνει)

GitStats

Δημιουργεί ενδιαφέροντα στατιστικά στοιχεία σε μορφή html για ένα repository

aptitude install gitstats

Εκτελούμε ως π.χ.

gitstats /path/to/myrepodir ~/gitstats

Στην συνέχεια ανοίγουμε την ιστοσελίδα ~/gitstats/index.html από έναν browser

tig - command line frontend

Εγκατάσταση με

aptitude install tig

TODO

FIXME Aπό εδώ να δω οδηγίες για δημιουργία change logs http://www.luthi.eu/blog/2008/06/git-for-debian-packaging. Να δοκιμάσω σε άλλο φάκελο-αντίγραφο του repository

FIXME Να δοκιμάσω και να καταγράψω πως γίνονται 6 συνήθεις ενέργειες σε Version Control Systems (από ένα forum http://railsforum.com/viewtopic.php?pid=65590 - έχει και τις εντολές).

  • How do I create a new repository?
  • How do I check code out?
  • How do I submit changes?
  • I screwed up, broke everything, how do I roll back my entire tree to what I had last Thursday at 0900?
  • I just hit a huge milestone, how do I mark/tag/branch my code at this point?
  • I fixed a huge bug, how do I move changes from just that bug into my previous release?

Πηγές

el/linux/debian/server/git.txt · Last modified: Y/m/d H:i (external edit)