Τρόπος εναλλαγής μεταξύ ζητημάτων στο τοπικό αποθετήριο Git

Στο ταξίδι μου στο ανοιχτό κώδικα, συνάντησα μια απλή (αλλά δύσκολη) κατάσταση που μπορεί να σας ταξιδέψει αν το κάνετε λάθος. Και αυτό θα συζητήσουμε σε αυτό το άρθρο.

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

Για να ξεκινήσετε με το ανοιχτό κώδικα, πρέπει να έχετε μια βασική κατανόηση των εργαλείων ελέγχου εκδόσεων όπως το Git. Οι συνεργάτες χρησιμοποιούν το Git για να παρακολουθούν τις αλλαγές στα αρχεία έργου και βοηθά επίσης τους ανθρώπους να συντονίζουν τη δουλειά τους σε αυτά τα αρχεία.

Προαπαιτούμενα

  1. Έχετε εγκαταστήσει το Git
  2. Έχετε μια βασική κατανόηση του Git

Γιατί ζητήματα;

Τα ζητήματα σε ένα αποθετήριο μπορούν να χρησιμοποιηθούν για να παρακολουθείτε εργασίες, ιδέες, σφάλματα ή βελτιώσεις για το έργο στο οποίο εργάζεστε. Βασικά, σας παρέχουν μια περιγραφή του τι συνεπάγεται η εργασία.

Για να αντιμετωπίσετε ένα ζήτημα, οι διαχειριστές του έργου πρέπει να σας εκχωρήσουν το συγκεκριμένο ζήτημα. Με αυτόν τον τρόπο άλλα μέλη της ομάδας θα γνωρίζουν ότι κάποιος εργάζεται για το θέμα.

Εργασία σε ένα ζήτημα

Για να ξεκινήσετε να εργάζεστε σε ένα ζήτημα, πρέπει να δημιουργήσετε έναν κλώνο ή ένα αντίγραφο του αποθετηρίου προορισμού χρησιμοποιώντας την εντολή Git clone στον τοπικό υπολογιστή σας.

git clone 

Δημιουργήστε ένα upstream που σας επιτρέπει να παρακολουθείτε τις τελευταίες αλλαγές upstream (δηλ. Αρχικό αποθετήριο). Με αυτόν τον τρόπο το Git σας ενημερώνει όταν υπάρχουν αλλαγές, ώστε να μπορείτε να ενημερώσετε το κλωνοποιημένο αποθετήριο.

git remote add upstream  

Για να κάνετε προεπισκόπηση της λίστας των διαθέσιμων απομακρυσμένων και των εργασιών που μπορούν να εκτελεστούν (λήψη και ώθηση) πληκτρολογήστε:

git remote -v

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

git fetch /

Προχωρώντας προς τα εμπρός, θα πρέπει να συγχωνεύσετε τις δεσμεύσεις άλλων συντελεστών στο τοπικό αποθετήριο.

git merge / 

Ο στόχος της συγχώνευσης Git είναι να κάνει το τοπικό αντίγραφο του κύριου κλάδου να ταιριάζει ακριβώς με το ανάντη αντίγραφο του κύριου κλάδου.

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

Git υποκατάστημα

Ένας κλάδος σάς δίνει ένα στιγμιότυπο των αλλαγών που έχουν γίνει. Όταν γίνεται μια δέσμευση, το Git αποθηκεύει τις πληροφορίες από τη δέσμευση. Αυτό παρέχει ένα δείκτη που μπορεί αργότερα να χρησιμοποιηθεί για αναφορά ή παρακολούθηση των αλλαγών που έγιναν. Γι 'αυτό είναι χρήσιμο να δημιουργήσετε ένα υποκατάστημα όταν εργάζεστε σε νέα εργασία, διόρθωση σφαλμάτων ή οποιαδήποτε άλλη δυνατότητα.

Όταν ξεκινήσουμε, το Git μας παρέχει έναν κύριο κλάδο. Ο κύριος κλάδος περιέχει κώδικα εργασίας. Για να αποφύγετε την ανάμειξη των αλλαγών σας με τον κωδικό παραγωγής, πρέπει να δημιουργήσετε έναν νέο κλάδο.

Για να δημιουργήσετε έναν κλάδο πρέπει να εισαγάγετε την ακόλουθη εντολή Git:

git checkout -b 

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

git checkout -b   

Για να παραθέσετε όλους τους διαθέσιμους κλάδους στο αποθετήριο σας, πληκτρολογήστε:

git branch

Όταν ολοκληρωθεί η εργασία στην οποία εργάζεστε, προωθήστε τις αλλαγές στο τοπικό αποθετήριο για έλεγχο. Μετά από αυτό, δημιουργήστε μια αίτηση έλξης για να ειδοποιήσετε τους διαχειριστές έργων σχετικά με την τρέχουσα κατάσταση της εργασίας που έχει ανατεθεί.

git push -u origin  

Τώρα πώς μπορώ να κάνω μετάβαση στο επόμενο τεύχος;  

Δημιουργήστε έναν διαφορετικό κλάδο με περιγραφικό όνομα, όπως αυτό:

git checkout -b   

Μόλις αποκτήσουμε τον κλάδο μας, θα χρησιμοποιήσουμε μια εντολή βοηθητικού προγράμματος από το διανομέα. Η εντολή θα μας βοηθήσει να πάρουμε κώδικα από το upstream και θα εκτελέσει επίσης τη συγχώνευση (εάν εγκαταστήσετε το βοηθητικό πρόγραμμα hub)

hub sync

Η εντολή ανακτά τις μεταγενέστερες αλλαγές και τις συγχωνεύει με τον νέο κλάδο. Μπορείτε πάντα να ελέγχετε για αλλαγές με το υποκατάστημα σας και προς τα πάνω χρησιμοποιώντας την εντολή κατάστασης Git:

git status

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

Λάθη που μπορεί να κάνετε.

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

Ακολουθεί ένα δείγμα για το τι μπορεί να γίνει για τη διαγραφή ανεπιθύμητων δεσμεύσεων από ένα υποκατάστημα:

Βήμα 1: Μεταβείτε στον κλάδο όπου θέλετε να καταργήσετε τις ανεπιθύμητες δεσμεύσεις:

git checkout  

Βήμα 2: Εκτελέστε τα αρχεία των δεσμεύσεων που έγιναν στον κλάδο. Αυτό θα σας βοηθήσει να αποφασίσετε ποιες δεσμεύσεις θέλετε να διατηρήσετε με βάση το μοναδικό Commit Hash (έλεγχος χαρακτήρων SHA1 40 των περιεχομένων των δεσμεύσεων) συνήθως σε αυτήν τη μορφή: da034f6ff3e856b5ba155bc01def0847a1c4ed7e .

git log

Αξίζει επίσης να σημειωθεί ότι εάν θέλετε να διατηρήσετε την πιο πρόσφατη δέσμευση (πείτε το τελευταίο) μπορείτε απλά να το κάνετε αυτό:

git log -n 1

Βήμα 3: Δεδομένου ότι θέλετε να απορρίψετε όλες τις άλλες δεσμεύσεις σε αυτόν τον κλάδο, απλώς εφαρμόστε αυτήν την ενιαία δέσμευση στον κλάδο. Η απόρριψη και η εφαρμογή είναι δύο βήματα:

Αρχικά, απορρίψτε όλες τις δεσμεύσεις στον κλάδο με:

git reset --hard / 

Με απλά λόγια, η παραπάνω εντολή λέει στο Git να πετάξει όλες τις σταδιακές και μη σταδιακές αλλαγές. Θα ξεχάσει τα πάντα στο τρέχον τοπικό υποκατάστημα και θα το κάνει ακριβώς το ίδιο με το upstream/master.

Δεύτερον, εφαρμόστε αυτήν την ενιαία δέσμευση στον κλάδο με την εντολή:

git cherry-pick Hash //where Hash is a commit hash from other branch

Αυτή η εντολή επιλέγει μια μεμονωμένη αναφορά (δηλ. Commit) από προεπιλογή από έναν κλάδο και την εφαρμόζει σε άλλη.

Βήμα 4: Όταν το εκτελέσετε git status, θα αναφέρει ότι το υποκατάστημα σας /αποκλίνει. Δεδομένου ότι αναμένεται, πρέπει να αναγκάσουμε το τηλεχειριστήριο να περιέχει μόνο αυτές τις αλλαγές που έχουμε επιλέξει.

Για να γίνει αυτό, πρέπει να χρησιμοποιήσουμε μια εντολή για να διαγράψουμε το απομακρυσμένο ιστορικό και να το αντικαταστήσουμε με ένα διαφορετικό ιστορικό:

git push --force origin

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

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

Ευχαριστούμε που το διαβάσατε ?! Μεγάλη φωνή στον Mark Waite;  

Ακολούθησέ με στο τουίτερ.