Git Εισαγωγή στην χρήση remotes

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

Στο git ο κώδικας (και η ποίηση) δεν υπάρχει σε ένα μόνο υπολογιστή. Σε αντίθεση με την ποίηση όμως, ο κώδικας είναι μια συλλογική προσπάθεια, όπου δεκάδες ή και εκατοντάδες άτομα δουλεύουν μαζί πάνω στα ίδια αρχεία. Ο κώδικας και το ιστορικό υπάρχει σε κάθε υπολογιστή των ατόμων μιας ομάδας. Για καλύτερο συντονισμό η ομάδα χρησιμοποιεί κάποιο git service που είναι μια υπηρεσία web. Αν το έργο είναι δημόσιο ή υπηρεσία αυτή είναι συχνά και η βιτρίνα της ομάδας, το μέρος που εμείς οι υπόλοιποι θα κατεβάσουμε τον μόχθο τους και θα τους αναφέρουμε προβλήματα ή θα ζητήσουμε νέα χαρακτηριστικά.

Έχω δείξει πως μπορείς να έχεις μια τέτοια υπηρεσία σε ένα δικό σου υπολογιστή με την χρήση του gitea.

Αν και εδώ θα χρησιμοποιήσω αυτό, δεν υπάρχει καμία σημαντική διαφορά από οποιαδήποτε άλλη υπηρεσία.

Τι είναι ενα git remote

Είναι με απλά λόγια το μακρυνό εκείνο μέρος που είναι αποθηκευμένος ο κώδικας. Και μπορούμε να έχουμε πολλά τέτοια μέρη. Στο καθένα θα του δώσουμε το δικό του όνομα για να το ξεχωρίζουμε. Αν έχουμε μόνο ένα, που είναι το σύνηθες. τότε το λέμε origin. Κάθε remote έχει και μια διεύθυνση σαν τις παρακάτω

  • https://github.com/user/repo.git
  • git@github.com:user/repo.git

Στην πρώτη μορφή το πρωτόκολλο επικοινωνίας είναι το http και συνήθως χρησιμοποιείτε από τους πελάτες και όχι από τα μέλη της ομάδας. Η δεύτερη μορφή χρησιμοποιεί το SSH και θα επιλέγουμε αυτή για τα δικά μας αποθετήρια.

git clone, fetch, push, pull

Να ξεκαθαρίσουμε πρώτα τις βασικές ενέργειες που κάνουμε σε ένα απομακρυσμένο αποθετήριο. Με την πρώτη εντολή git clone κάνουμε ένα αντίγραφο του αποθετηρίου τοπικά στον υπολογιστή μας. Αυτό θα το κάνουμε μια μόνο φορά.
Με την εντολή git push σπρώχνουμε τις αλλαγές που έχουμε κάνει σε κάποιο κλάδο στο απομακρυσμένο αποθετήριο. Η συνήθης χρήση της εντολής είναι

git push origin master

και θα μεταφέρει τις αλλαγές του εξ ορισμού κλάδου master στο αποθετήριο με όνομα origin.

Οι εντολές git fetch και git pull θα τραβήξουν αλλαγές που έχουν κάνει τα άλλα μέλη της ομάδας στο τοπικό μας αντίγραφο. Εδώ τα πράγματα δυσκολεύουν. Τι θα συμβεί αν οι αλλαγές που εμείς έχουμε κάνει δεν είναι συμβατές; Αν έχουμε αλλάξει πολλά άτομα την ίδια γραμμή; Θα τα δούμε αυτά σε επόμενα μαθήματα. Προς στιγμήν θα πω μόνο πως η εντολή git fetch τραβάει απλά τις αλλαγές αλλά δεν πειράζει κανένα αρχείο. Η εντολή git pull θα κάνει ένα git fetch πρώτα και μετά θα εφαρμόσει τις αλλαγές. Αν είμαστε οι μόνοι δημιουργοί και ξέρουμε πως πάντα κάνουμε git push αυτή θέλουμε να ξέρουμε, τουλάχιστον για τα πρώτα μας βήματα.

Δημιουργία απομακρυσμένου αποθετηρίου

Υπάρχουν πολλά σενάρια, να το φτιάξουμε ενώ έχουμε γράψει ήδη κάποιο κώδικα, να πάρουμε τον κώδικα από κάποιο άλλο αποθετήριο, ή αυτό που θα δείξω εδώ, να ξεκινήσουμε με την δημιουργία του αποθετηρίου σαν το πρώτο μας βήμα.
Την τελευταία περίπτωση θα δείξω εδώ, και αν υπάρχει ενδιαφέρον θα επανέλθω και με άλλα σενάρια. Θα χρησιμοποιήσω το gitea, αλλά λίγα πράγματα θα αλλάξουν αν χρησιμοποιήσουμε κάτι άλλο.

Το πρώτο βήμα είναι να φτιάξουμε το αποθετήριο


θα πρέπει να απαντήσουμε σε κάποιες βασικές ερωτήσεις

Είναι καλή ιδέα να βάλουμε ένα αρχείο README που να εξηγεί τι κάνει το αποθετήριο, κάποια κατάλληλη άδεια χρήσης, και ένα αρχείο .gitignore, το οποίο περιέχει πραγματα που δεν θέλουμε να είναι στο αποθετήριο, εκτός αν ρητά το ζητήσουμε. Το gitea έχει κάποια πρότυπα για αυτά τα αρχεία τα οποία πάντα μπορούμε στην συνέχεια να τα αλλάξουμε.

Το νέο μας αποθετήριο είναι έτοιμο.

Κλωνοποίηση

Θα επιλέξουμε από την σελίδα το πρωτόκολλο ssh και θα πατήσουμε το πλήκτρο copy όπως δείχνει η εικόνα. Αν δεν έχουμε δικαιώματα εγγραφής στο αποθετήριο και απλά θέλουμε τον κώδικα θα επιλέξουμε το http. Σε ενα τερματικό θα πάμε στον κατάλογο που θέλουμε τα αρχεία και θα δώσουμε την εντολή

git clone  git@____________________.git

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

Χρήση απομακρυσμένου αποθετηρίου

Ας κάνουμε κάποιες αλλαγές

echo "Αρνάκι άσπρο και παχύ" > arni.txt

και ας τις περάσουμε στο απομακρυσμένο αποθετήριο

git add arni.txt
git commit -m "Η πρώτη γραμμή"

git status
git push origin master

Πρώτα θα πούμε στο git πως μας ενδιαφέρει να κρατήσει τις αλλαγές git add, μετά θα του πούμε να τις κρατήσει στα αλήθεια λέγοντας και στην ομάδα το τι αλλάξαμε git commit και μετά θα στείλουμε τις αλλαγές στο απομακρυσμένο αποθετήριο. Ουφ !!

workspace, index, local, remote

Αν καταλάβεις το παρακάτω έχεις καταλάβει πολλά. Το ερώτημα που πρέπει να απαντηθεί είναι απλό: Που είναι αποθηκευμένα τα αρχεία μου; Η απάντηση δεν είναι στον φάκελο που σου δείχνει το IDE σου. Τα αρχεία εκεί είναι θα έλεγα αδιάφορα :smile:

Αυτό που βλέπεις είναι το workspace κάποιος προσωρινός χώρος εργασίας. Τα αρχεία είναι στο local repository στο τοπικό αποθετήριο. Που είναι αυτό; Είναι κρυμμένο μέσα σε ενα κρυφό φάκελο με την ονομασία .git. Στο αποθετήριο μπορούμε να βάλουμε μόνο πακέτα αλλαγών, δεν μπορούμε να βάλουμε, άμεσα τουλάχιστον, αρχεία. Προετοιμάζουμε ένα σύνολο από αλλαγές βάζοντας τα πρώτα σε και που λέμε index.

Τις αλλαγές τις στέλνουμε στην συνέχεια στο απομακρυσμένο αποθετήριο remote repository. Το παρακάτω σχήμα είναι αρκετά χρήσιμο. Ξέρουμε ήδη τις μισές εντολές, αλλά είναι αρκετές για να φτιάξεις στο git το επόμενο έργο σου.

%CE%B5%CE%B9%CE%BA%CF%8C%CE%BD%CE%B1

Επόμενα βήματα

Εδώ θα βρεις οτι υπαχει εδώ μεσα για το git https://linux-user.gr/tags/git

4 Likes