Πώς να χρησιμοποιήσετε το git-blame;

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

  • κατάσταση git: Εμφανίζει την τρέχουσα κατάσταση του αποθετηρίου git. Λέει πληροφορίες σχετικά με τα αρχεία εάν παρακολουθούνται, δεν έχουν καταγραφεί, σκηνοθετηθούν ή μη σταδιακά, κ.λπ.
  • καταγραφή git: Δηλώνει λεπτομέρειες σχετικά με το ιστορικό δέσμευσης.
  • ετικέτα git: Βοηθά στη δημιουργία σημείων ελέγχου σε ένα ιστορικό δεσμεύσεων git σε συγκεκριμένες δεσμεύσεις, τα οποία μπορούν να προβληθούν αργότερα χρησιμοποιώντας την εντολή git show.

Επίσης, υπάρχει μια άλλη ισχυρή εντολή git για την επιθεώρηση ενός αποθετηρίου git, η εντολή git blame.

Καλύτερα:

  • Τι είναι το Git Blame
  • Σύνταξη και χρήση
  • Γραμμή εντολών και προσέγγιση βασισμένη στο GUI

git -κατηγορώ

Η εντολή git blame εμφανίζει τα στοιχεία του συγγραφέα που τροποποίησε ή πρόσθεσε τελευταία κάθε γραμμή κώδικα σε ένα δεδομένο αρχείο μαζί με το commit id τροποποίησης.Το commit id μπορεί να χρησιμοποιηθεί με την εντολή git log για να λάβετε λεπτομέρειες για τη δέσμευση. Θα αποδειχθεί αργότερα σε αυτό το άρθρο.

Μπορούμε να αναγνωρίσουμε το όνομα και το αναγνωριστικό email του τελευταίου ατόμου που έκανε αλλαγές ή πρόσθεσε μια δεδομένη γραμμή κώδικα σε ένα αρχείο χρησιμοποιώντας την εντολή git blame. Θα μας βοηθούσε να προσεγγίσουμε αυτό το άτομο και να τον ρωτήσουμε για αυτό το κομμάτι κώδικα και τη λειτουργικότητά του σε ορισμένες περιπτώσεις.

Σύνταξη:

git blame [επιλογές] <file-name>

Επίδειξη:

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

Βήμα 1: Μετακινηθείτε σε έναν κενό φάκελο και αρχικοποιήστε τον με ένα κενό αποθετήριο git.

Βήμα 2: Κλωνοποιήστε το αποθετήριο για το οποίο θέλετε τις πληροφορίες. Εδώ κλωνοποιώ ένα διάσημο αποθετήριο create-react-app από το GitHub. Φροντίστε να αλλάξετε τον κατάλογο στο κλωνοποιημένο αποθετήριο.

κλωνοποίηση αποθετηρίου δημιουργίας-react-app από το GitHub

Βήμα 3: Για να λάβετε το όνομα του συγγραφέα και τις πληροφορίες δέσμευσης, εκτελέστε την εντολή git blame όπως φαίνεται παρακάτω. Αντικαταστήστε το <όνομα αρχείου> επιλογή με τη σχετική διαδρομή του αρχείου από τον τρέχοντα κατάλογο για τον οποίο θέλετε λεπτομέρειες:

git blame <file-name>

Βήμα 4: Εδώ θέλω λεπτομέρειες για το αρχείο CONTRIBUTING.md που υπάρχει στον ίδιο κατάλογο στον οποίο βρίσκομαι αυτήν τη στιγμή. Λοιπόν, θα εκτελέσω την παρακάτω εντολή:

git blame CONTRIBUTING.md

Έξοδος: Μοιάζει παρακάτω ως εξής:

Η έξοδος της εντολής git blame στο αρχείο CONTRIBUTING.md

Συμβουλή: Παρατηρήστε ότι η τελευταία στήλη εξόδου εμφανίζει τον αριθμό γραμμής μαζί με τον κωδικό σε αυτήν τη γραμμή.

Μελέτη αποτελεσμάτων:

Ας εξετάσουμε την πρώτη γραμμή εξόδου:

Αναγνωριστικό δέσμευσης Όνομα συγγραφέα Χρονική σήμανση Κώδικας
46cf3fc43 Νταν Αμπράμοφ 02-09-2016 14:29:08 +0100 # Συμβολή στη δημιουργία εφαρμογής React
  • Αναγνωριστικό δέσμευσης:Είναι το αναγνωριστικό δέσμευσης της τελευταίας δέσμευσης στην οποία τροποποιήθηκε αυτή η γραμμή. Στις επόμενες γραμμές, θα το χρησιμοποιήσουμε για να λάβουμε τις λεπτομέρειες της δέσμευσης.
  • Όνομα συγγραφέα: Είναι το όνομα του συγγραφέα που τροποποίησε τελευταία φορά τη δεδομένη γραμμή κώδικα. Θα δούμε πώς μπορείτε να λάβετε το αναγνωριστικό ηλεκτρονικού ταχυδρομείου του συγγραφέα αντί για το όνομα του συγγραφέα.
  • Χρονική σήμανση: Είναι η ημερομηνία και η ώρα κατά την οποία έγινε η δέσμευση, εκφρασμένες με τυπική σημείωση. Μπορούμε να λάβουμε την ακατέργαστη χρονική σήμανση χρησιμοποιώντας την επιλογή -t όπως φαίνεται παρακάτω:
git blame -t CONTRIBUTING.md

Η έξοδος φαίνεται παρακάτω:

ακατέργαστη χρονική σήμανση χρησιμοποιώντας την επιλογή -t με την εντολή git blame

Προβολή των λεπτομερειών commit: Για να προβάλουμε τις λεπτομέρειες commit, θα εκτελέσουμε την εντολή git log με το commit id για το οποίο θέλουμε τις λεπτομέρειες. Έτσι, αντιγράψτε το commit id από την προηγούμενη έξοδο της εντολής git blame. Στην περίπτωσή μου, θέλω τις λεπτομέρειες commit για την πρώτη γραμμή του αρχείου CONTRIBUTING.md, οπότε θα αντιγράψω το commit id από την προηγούμενη έξοδο της εντολής git blame. Το αναγνωριστικό δέσμευσης για αυτό είναι 46cf3fc43.

Τώρα, εκτελέστε την παρακάτω εντολή. Αντικαταστήστε το <commit-id> με το commit id που αντιγράψατε μόλις τώρα.

git log -p <commit-id>

Στην περίπτωσή μου η εντολή είναι η παρακάτω:

git log -p 46cf3fc43

Η εντολή git log βοηθά στην προβολή του ιστορικού δέσμευσης. Η επιλογή -p ή -patch εμφανίζει τα στοιχεία του συγγραφέα και τις αλλαγές (προσθήκη ή διαγραφή) στον κώδικα στο commit of commit id που παρέχεται.

Επιλογές με git blame: Το Git παρέχει διάφορες επιλογές με την εντολή git blame για την προβολή των λεπτομερειών τροποποίησης σε κώδικα σε ένα αρχείο. Μερικές επιλογές που χρησιμοποιούνται συνήθως δίνονται παρακάτω:

Για να προβάλετε την έξοδο για μια σειρά γραμμών

git blame -L start-line,end-line <file-name>

Η παρακάτω εντολή δείχνει την έξοδο για τις γραμμές 2 έως 5 συμπεριλαμβανομένων και των δύο.

git blame -L 2,5 CONTRIBUTING.md

Η έξοδος φαίνεται παρακάτω:

Η έξοδος της εντολής git blame για ένα δεδομένο εύρος γραμμών

Σημείωση: Θα λάβετε την ίδια έξοδο για την εντολή – git blame -L 4,+3 README.md. Εδώ το 4,+3 σημαίνει έξοδο για 3 γραμμές που ξεκινούν από την τέταρτη γραμμή.

Για να δείτε το αναγνωριστικό ηλεκτρονικού ταχυδρομείου του συγγραφέα

git blame -e CONTRIBUTING.md

Η παραπάνω εντολή θα εμφανίσει το αναγνωριστικό email του συγγραφέα αντί για το όνομα του συγγραφέα στο αποτέλεσμα. Η έξοδος φαίνεται παρακάτω:

Για να προβάλετε αλλαγές που δεν είναι παλαιότερες από τον καθορισμένο χρόνο

git blame --since=3.months-- CONTRIBUTING.md

Η παραπάνω εντολή χρησιμοποιείται για την προβολή εξόδου git blame για δεσμεύσεις όχι παλαιότερες των 3 μηνών για το αρχείο CONTRIBUTING.md. Η έξοδος φαίνεται παρακάτω:

Η έξοδος της εντολής git blame με δεσμεύσεις όχι παλαιότερες των τριών μηνών (χωρίς να αφαιρεθούν οι μη απαιτούμενες δεσμεύσεις)

Στην παραπάνω εντολή, μπορούμε να δούμε ότι εμφανίζει πολλές δεσμεύσεις με commit id που ξεκινούν με ^. Τα σύμβολα caret σημαίνουν τις δεσμεύσεις που έγιναν πριν από τον καθορισμένο χρόνο, στην περίπτωσή μας, είναι τρεις μήνες. Ως εκ τούτου, πρέπει να τα φιλτράρουμε από την έξοδο μας. Για να το αντιμετωπίσουμε, μπορούμε να τροποποιήσουμε τον κώδικά μας ως εξής:

git blame --since=3.months -- CONTRIBUTING.md | grep -v '^\^'

Ο παραπάνω κώδικας απλώς φιλτράρει την έξοδο μετά την αφαίρεση των δεσμεύσεων που ξεκινούν με το σύμβολο ^. Ως εκ τούτου, η έξοδος δείχνει δεσμεύσεις όχι παλαιότερες από τρεις μήνες (από τη στιγμή που εκτελείται ο κώδικας). Το αποτέλεσμα φαίνεται παρακάτω:

Η έξοδος της εντολής git blame με δεσμεύσεις όχι παλαιότερες από τρεις μήνες (μετά την κατάργηση των μη απαιτούμενων δεσμεύσεων)

Μια εναλλακτική επιλογή στη γραμμή εντολών (με βάση το GUI): Οι ιστότοποι φιλοξενίας Git, όπως – το GitHub, το Bitbucket, το GitLab προσφέρουν οθόνες GUI για το git blame, το οποίο παρέχει μια σαφή εμφάνιση του ιστορικού τροποποιήσεων σε ένα αρχείο.

Παράδειγμα: GitHub

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

Βήμα 2: Η δομή της εξόδου περιγράφεται στην παρακάτω εικόνα:

επιλογή ετικετών εικόνας ευθυνών στο GitHub

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

Leave a Reply

Your email address will not be published. Required fields are marked *