webtrends

Τετάρτη, 02 Ιανουαρίου 2013 11:42

Χρησιμοποιώντας το GIT αντί για FTP

Mια από τις μεγαλύτερες ανακαλύψεις του 2012 για εμένα, ήταν το GIT και η προσθήκη του στην καθημερινότητα μου. Το git είναι μια σχεδόν μαγική εφαρμογή που λύνει τα χέρια στους προγραμματιστές αφού παρακολουθεί τις αλλαγές που γίνονται στα αρχεία και μπορείς πολύ εύκολα και με ασφάλεια να πειραματίζεσαι με το πρόγραμμα που γράφεις χωρίς να επηρεάζεις την αρχική του μορφή. Το πιο σημαντικό βέβαια είναι ότι σε περίπτωση που υπάρχει ομάδα, γίνεται να δουλεύουν όλα τα μέλη της πάνω στο ίδιο project χωρίς κανένα πρόβλημα, να ενημερώνονται όλοι για τις αλλαγές που έγιναν, να κάνει ο καθένας τις δικές του αλλαγές κ.ο.κ.

Είναι ένα άρθρο από μόνο του να σας εξηγήσω τι ακριβώς είναι το GIT και γιατί είναι σημαντικό, ρίξτε μια ματιά σε αυτό εδώ το Ελληνικό άρθρο που περιγράφει τι ακριβώς ειναι το GIT. Για περίπου μισό χρόνο το χρησιμοποιούσα τοπικά, δούλευα δηλαδή κώδικα σε Desktop και Laptop και με ενδιάμεσες υπηρεσίες όπως το http://www.bitbucket.org όλα δούλευαν καλύτερα απο ποτέ. Όμως είχα ένα πρόβλημα. Έπρεπε τις τελικές αλλαγές στο πραγματικό (LIVE site) να τις κάνω με το "χέρι" και FTP!

 

Μπορεί να μου έλυνε τα χέρια το GIT αφού μέσω του ιστορικού του έβλεπα ποια αρχεία έπρεπε να αντικαταστήσω, αλλά και πάλι ειναι πολύ χρονοβόρο και μπορείς πάντα να ξεχάσεις κάτι, ή ακόμα χειρότερα να προκύψει κάποιο πρόβλημα και να μην μπορείς εύκολα και με μια εντολή να γυρίσεις στην μορφή που δούλευε. Έτσι και αλλιώς η λογική "backup/restore" σε τέτοιες περιπτώσεις ειναι απαραίτητη, αλλά αλήθεια τώρα, δεν έχω ιδέα πόσες ώρες έχω χάσει απο την ζωή μου κάνοντας backup και τρέμοντας μην διαλυθεί το live site όσο αλλάζω τα αρχεία μέσω FTP. Μετα απο αρκετό ψάξιμο κατάφερα τελικά να χρησιμοποιήσω το GIT αντί για FTP.  Αν και η δουλειά του δεν είναι αυτή θεώρησα πάρα πολύ σημαντικό να καταφέρω κάτι τέτοιο, αφού πλέον εύκολα μπορείς να μεταφέρεις τις αλλαγές στον πραγματικό Live Server χωρίς να χρησιμοποιείς καθόλου FTP σύνδεση. Νιώθω ήδη καλύτερα,μπορώ να κάνω ότι αλλαγές θέλω και να γυρίσω πίσω σε αυτό που ήταν - αν κάτι δεν πάει καλά - μέσα σε δευτερόλεπτα.

 

Θεωρώ ότι δεν είστε αρχάριος, έχετε εγκασταστήσει τοπικά (στο pc/laptop σας) το GIT και έχετε πρόσβαση στον Server σας μέσω Shell. Αν δεν καταλαβατε καν τι είπα, αφήστε σχόλιο και θα προσπαθήσω να σας βοηθήσω με παραπομπές.

Εγκατάσταση στον Server

Θα ξεκινήσουμε δημιουργώντας ένα αποθετήριο στο πραγματικό μας site. Ας το ονομάσουμε "myproject" και θεωρούμε ότι βρίσκεται στον server εδώ /home/username/myproject

$ cd /home/username/myproject && git init

To επόμενο βήμα ειναι να δημιουργήσουμε ένα "γυμνό" αποθετήριο, επίσης στον server και να "σπρώξουμε"(Push) το τοπικό μας αποθετήριο σε αυτό. Ας το φτιάξουμε στο /var/git για παράδειγμα. Πρέπει να βεβαιωθείτε ότι μπορείτε να γράψετε σε αυτό (έχετε τα αντίστοιχα δικαιώματα)

$ mkdir -p /var/git/myproject.git && cd /var/git/myproject.git 
$ git init --bare


Ρύθμιση παραμέτρων και "hooks"

Πρέπει να δηλώσουμε ότι το αποθετήριο με χρέη "hub" (το γυμνό αποθετήριο που φτιάξαμε λίγο νωρίτερα) είναι το "απομακρυσμένο"(remote) αποθετήριο μας. Για να γίνει αυτό πρέπει να επεξεργαστείτε το /home/username/myproject/.git/config και να προσθέσετε τις εξής γραμμές στο τέλος του

[remote "hub"]
url =/var/git/myproject.git  fetch = +refs/heads/*:refs/remotes/hub/*

Στην συνέχεια θα πρέπει να εισάγουμε ένα - ή και περισσότερα εφόσον θέλετε - hooks (αρχείο εντολών που ενεργοποιείται
μέσω κάποιου γεγονότοτος). Αυτό το "hook" στην προκειμένη θα έχει ως στόχο κάθε φορά που γίνεται ένα "push" sto "hub" αποθετήριο να μεταφέρει τις αλλαγές στο πραγματικό.

Τα hooks αποθηκεύονται στην διαδρομή .git/hooks, οπότε πρέπει να το δημιουργήσουμε στο /var/git/myproject.git/hooks/post-update:

#!/bin/sh
echo
echo "**** Pulling changes into Live [Hub's post-update hook]"
echo
cd /home/username/myproject || exit
unset GIT_DIR
git pull hub master
exec git-update-server-info

ΣΗΜΑΝΤΙΚΟ: Πρέπει να βεβαιωθούμε ότι έχει δικαιώματα "εκτέλεσης"

$ chmod +x /var/git/myproject.git/hooks/post-update


Κλωνοποίηση και σπρώξιμο(Push) στο ενεργό site.

To επόμενο βήμα ειναι να "σπρώξετε" (push) το site σας απο το τοπικό σας μηχάνημα, στον Server σας!. Θεωρούμε ότι ειναι .git enabled, αλλιώς κάντε init όπως κάνουμε πάντα για ένα νέο git αποθετήριο. Αφού λοιπόν βρεθείτε στο τοπικό σας root folder πρέπει να δηλώσετε τον Server σας, ώστε με μια εντολή να μεταφέρετε τις αλλαγές σας στον live server. Θα χρησιμοποιήσουμε την εντολή "git remote add" γι'αυτό τον λόγο. Πρέπει όμως πρώτα να δηλώσουμε τον USER ( συνήθως ειναι ο ίδιος με τον FTP user που έχουμε για να συνδεθούμε σε ένα site), οπότε αντικαταστήστε το με τον δικό σας όνομα χρήστη και βεβαιαωθείτε ότι επιπλέον ο χρήστης αυτός έχει SHELL δικαίωματα. Στους Cpanel enabled servers υπάρχει ειδική ρύθμιση γι'αυτό,  να δηλώσεις δηλαδή ποιος χρήστης μπορεί να συνδέεται μεσω Shell.

$ git remote add live user @ yourserver.com:/var/git/myproject.git
$ git push live master

Τώρα λοιπόν απο το μηχάνημά σας έχετε "ανεβάσει" το site σας στον Server. Αν κάτι δεν έχει πάει καλά, βεβαιωθείτε ότι ο χρήστης "user" που γράφει η εντολή remote είναι ο δικός σας χρήστης, υπάρχει και έχει δικαιώματα πρόσβασης με Shell.

Αυτό που σίγουρα θέλει προσοχή είναι τα δικαιώματα των αρχείων, ώστε να μπορεί να γράψει πληροφορία το/τα Hook στο live directory. Τέλος είναι καλό να προστατευτεί η πρόσβαση στον .git κατάλογο του ενεργού(Live) Site σας.

H καλύτερη λύση μέσω του Apache.conf

# do not allow .git version control files to be issued 
<Directorymatch "^/.*/\.git+/"> 
Order deny,allow Deny from all </Directorymatch>
<Files ~ "^\.git"> 
Order allow,deny Deny from all 
</Files>

'Η αν δεν έχετε πρόσβαση μπορείτε να το κάνετε και μέσω αρχείου .htaccess

RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L] 
ErrorDocument 403 "Access Forbidden"

Για την ροή της δουλειάς με βοήθησε επίσης αρκετά αυτή εδώ η ιστοσελίδα http://nvie.com/posts/a-successful-git-branching-model/. Αξίζει την ανάγνωση σας!

 

Αν όλα έχουν πάει όπως πρέπει τότε έχετε το workflow που έχω και εγώ για τα περισσότερα Project. Με ένα git push live ενημερώνω τον live Server, με ένα git push origin ενημερώνω το bitbucket λογαριασμό που έχει καθήκοντα backup και Sync.

 

 

logogit

 

Διαβάστηκε 2582 φορές

Lollypop :: Κατασκευή Ιστοσελίδων

Τσαμαδού 82-84 Πειραιάς, 18534

Τηλ 211 790 5890
Φαξ 211 770 5763

Χάρτης Lollypop