Skip to content

grigoria/git-style-guide

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 

Repository files navigation

Git Style Guide

Αυτό είναι ένα style guide, εμπνευσμένο από το How to Get Your Change Into the Linux Kernel, τα git man pages και διάφορα practices που χρησιμοποιούνται ευρέως στην κοινότητα.

Υπάρχουν μεταφράσεις στις παρακάτω γλώσσες:

Αν θέλετε να συνεισφέρετε, παρακαλώ να το κάνετε! Κάντε fork το project και ανοίξτε ένα pull request.

Περιεχόμενα

  1. Branches
  2. Commits
  3. [Τίτλοι & περιγραφές](#Τίτλοι & περιγραφές)
  4. Merging
  5. Λοιπά

Branches

  • Επιλέγετε μικρά και περιγραφικά ονόματα:

    # καλό
    $ git checkout -b oauth-migration
    
    # λάθος - πολύ ασαφές
    $ git checkout -b login_fix
  • Αναγνωριστικά IDs από αντίστοιχα tickets εξωτερικών υπηρεσιών (π.χ. ένα Github issue) είναι καλοί υποψήφιοι για χρήση μέσα σε όνομα ενός branch. Για παράδειγμα:

    # GitHub issue #15
    $ git checkout -b issue-15
  • Χρησιμοποιείτε παύλες ως διαχωριστικά λέξεων.

  • Όταν δουλεύουν πολλά άτομα στο ίδιο feature, είναι βολικό να υπάρχουν προσωπικά feature branches και ένα ομαδικό feature branch. Χρησιμοποιείτε την εξής σύμβαση:

    $ git checkout -b feature-a/master # ομαδικό feature branch
    $ git checkout -b feature-a/maria  # feature branch της Μαρίας
    $ git checkout -b feature-a/nick   # feature branch του Νίκου

    Τα προσωπικά branches γίνονται περιοδικά merge στο ομαδικό branch (βλ. "Merging"). Στο τέλος, το ομαδικό branch είναι αυτό που θα γίνει merge στο "master".

  • Όταν κάνετε merge ένα branch σας, διαγράψτε το από το remote repository (εκτός αν υπάρχει συγκεκριμένος λόγος ώστε να μην το κάνετε).

    Tip: Χρησιμοποιείστε την παρακάτω εντολή ενώ είστε στο "master" branch, για να δείτε τη λίστα με τα branches που έχουν γίνει ήδη merge:

    $ git branch --merged | grep -v "\*"

Commits

  • Κάθε commit πρέπει να αντιπροσωπεύει μια συγκεκριμένη λογική αλλαγή. Μην κάνετε πολλές λογικές αλλαγές σε ένα commit. Για παράδειγμα, αν ένα patch διορθώνει ένα bug και βελτιώνει το performance ενός feature, διαχωρίστε το σε δύο ξεχωριστά commits.

  • Μη καταμερίζετε μια λογική αλλαγή σε διαφορετικά commits. Για παράδειγμα, το implementation ενός feature και τα αντίστοιχα tests, ανήκουν στο ίδιο commit.

  • Κάντε commit νωρίς και συχνά. Τα μικρά και ανεξάρτητα commits είναι πιο εύκολο να κατανοηθούν και να γίνουν revert αν κάτι πάει στραβά.

  • Τα commits πρέπει να είναι ταξινομημένα με λογική σειρά. Για παράδειγμα, αν το commit X εξαρτάται από αλλαγές που έγιναν στο commit Y, τότε το commit Y πρέπει να προηγείται του commit X.

Τίτλοι & περιγραφές

  • Χρησιμοποιείτε τον editor και όχι το terminal, όταν γράφετε το commit message:

    # καλό
    $ git commit
    
    # λάθος
    $ git commit -m "Quick fix"

    Το να γράφεις σχόλια commit από το terminal ενισχύει το σκεπτικό του να πρέπει να "στριμώξεις" τα πάντα σε μια γραμμή, το οποίο συνήθως έχει ως αποτέλεσμα κακής ποιότητας commit messages.

  • O τίτλος του commit (δηλ. η πρώτη γραμμή) πρέπει να είναι περιγραφικός και σύντομος. Ιδανικά, δεν πρέπει να ξεπερνάει τους 50 χαρακτήρες. Πρέπει να ξεκινάει με κεφαλαία και να είναι γραμμένος σε προστακτική ενεστώτα. Δεν πρέπει να τελειώνει με τελεία.

    # καλό - προστακτική ενεστώτα, λιγότερο από 50 χαρακτήρες, χρήση κεφαλαίων
    Mark huge records as obsolete when clearing hinting faults
    
    # λάθος
    fixed ActiveModel::Errors deprecation messages failing when AR was used outside of Rails.

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

    Θα πρέπει επίσης να περιέχει υποδείξεις σε σχετικές πηγές (π.χ. link στο αντίστοιχο θέμα ενός bug tracker).

    Short (50 chars or fewer) summary of changes
    
    More detailed explanatory text, if necessary. Wrap it to
    72 characters. In some contexts, the first
    line is treated as the subject of an email and the rest of
    the text as the body.  The blank line separating the
    summary from the body is critical (unless you omit the body
    entirely); tools like rebase can get confused if you run
    the two together.
    
    Further paragraphs come after blank lines.
    
    - Bullet points are okay, too
    
    - Use a hyphen or an asterisk for the bullet,
      followed by a single space, with blank lines in
      between
    
    Source http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html

    Τέλος, όταν γράφετε ένα commit message, σκεφτείτε τι θα θέλατε να δείτε αν διαβάζατε αυτό το commit ένα χρόνο αργότερα.

  • Αν το commit A εξαρτάται από το commit B, τότε θα πρέπει αυτός ο συσχετισμός να φαίνεται στο μήνυμα του commit A. Χρησιμοποιείτε τa hashes τους για να αναφερθείτε σε commits.

    Ομοίως, αν το commit A διορθώνει ένα bug που εισήχθη από το commit B, τότε αυτό θα πρέπει να αναφερθεί στο μήνυμα του commit A.

  • Αν ένα commit πρέπει να γίνει squash σε ένα άλλο commit, χρησιμοποιείτε τα --squash και --fixup flags αντίστοιχα, έτσι ώστε να φαίνεται ξεκάθαρα το γεγονός:

    $ git commit --squash f387cab2

    (Tip: Χρησιμοποιείτε το --autosquash flag όταν κάνετε rebase και μαρκαρισμένα commits θα γίνουν αυτόματα squash.)

Merging

  • Μην κάνετε rewrite το ιστορικό του git. Το ιστορικό ενός repository είναι πολύτιμη πληροφορία από μόνο του και είναι πολύ σημαντικό να φαίνεται τί πραγματικά συνέβη. Το να αλλάζει κάποιος ένα ήδη δημοσιευμένο ιστορικό, είναι πολύ συχνή πηγή προβλημάτων για όσους δουλεύουν στο ίδιο project.

  • Παρόλα αυτά, υπάρχουν περιπτώσεις όπου το να κάνεις rewrite το ιστορικό είναι θεμιτό. Αυτό συμβαίνει συνήθως όταν:

    • Είστε ο μόνος που δουλεύει στο branch και δεν γίνεται ακόμα review απο κάποιον

    • Θέλετε να καθαρίσετε το branch σας (π.χ. να κάνετε squash τα commits) ή rebase πάνω στο master, έτσι ώστε να το κάνετε αργότερα merge.

    Ωστόσο, ποτέ μην κάνετε rewrite το ιστορικό του "master" branch ή οποιουδήποτε άλλου "σημαντικού" branch (π.χ. κάποιου που χρησιμοποιείται στο production ή σε CI servers).

  • Κρατάτε το ιστορικό καθαρό και απλό. Αμέσως πριν γίνει merge το branch:

  1. Βεβαιωθείτε ότι συμμορφώνεται με το style guide και αν δε το κάνει, εκτελέστε τις απαραίτητες ενέργειες (squash/αναδιαξτε τα commits, αναδιατυπώστε τα σχόλια κ.ά.)

  2. Kάντε το rebase πάνω στο branch στο οποίο πρόκειται να γίνει merge:

    [my-branch] $ git fetch
    [my-branch] $ git rebase origin/master
    # then merge

    Αυτό έχει ως αποτέλεσμα ένα branch που μπορεί να εφαρμοστεί κατευθείαν στο τέλος του "master" branch και έχει ως αποτέλεσμα ένα απλό, γραμμικό ιστορικό.

(Σημείωση: Αυτή η προσέγγιση ταιριάζει καλύτερα σε projects με βραχυπρόθεσμα branches. Διαφορετικά, ίσως είναι καλύτερο να κάνετε περιστασιακά merge το "master" branch αντί να κάνετε rebase πάνω σ' αυτό.)

  • Αν το branch αποτελείται από περισσότερα από ένα commit, μην το κάνετε merge με fast-forward:

    # καλό - δημιουργείται merge commit
    $ git merge --no-ff my-branch
    
    # λάθος
    $ git merge my-branch

Λοιπά

  • Υπάρχουν διάφορα workflows και καθένα από αυτά έχει πλεονεκτήματα και μειονεκτήματα. Το αν ένα workflow ταιριάζει στην περίπτωσή σας, εξαρτάται από την ομάδα, το project και τις διαδικασίες που χρησιμοποιείτε στο development.

    Ωστόσο, είναι σημαντικό να επιλέξετε μια ροή εργασίας και να την εφαρμόζετε με συνέπεια.

  • Να είστε συνεπείς. Αυτό σχετίζεται με το workflow αλλά έχει να κάνει και με πράγματα όπως commit messages, ονόματα branch και tags. Το να είστε συνεπείς κάνει πιο εύκολο το να καταλάβει κανείς τι ακριβώς έγινε και γιατί, απλά κοιτάζοντας το ιστορικό, ένα commit message κτλ.

  • Τρέξτε τα tests πριν κάνετε push. Μην κάνετε push μη ολοκληρωμένη δουλειά.

  • Χρησιμοποιείτε annotated tags για να μαρκάρετε release versions ή άλλα σημαντικά σημεία στο ιστορικό. Προτιμάτε lightweight tags για προσωπική χρήση, όπως π.χ. για να μαρκάρετε commits για να μπορείτε μελλοντικά να ανατρέξετε σε αυτά.

  • Κρατάτε τα repository σας σε καλή κατάσταση με το να εκτελείτε τις παρακάτω εντολές συντήρησης, ανά τακτά χρονικά διαστήματα:

Άδεια

cc license

Αυτό το έργο χορηγείται με άδεια Creative Commons Attribution 4.0 International license.

Συντελεστές

Agis Anastasopoulos / @agisanast / http://agis.io

Μετάφραση στα Ελληνικά:

Grigoria Pontiki / @grigoriap / http://grigoria.gr

About

A Git Style Guide

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published