IT-Swarm.Net

Git για αρχάριους: Ο οριστικός πρακτικός οδηγός

Εντάξει, αφού είδε αυτή η δημοσίευση από τον PJ Hyett , αποφάσισα να παραλείψω το τέλος και να πάω με Git .

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

Το "Πρακτικό" που ορίζεται ως αυτό το άτομο δεν θέλει να πάρει σε μεγάλη λεπτομέρεια σχετικά με το τι κάνει το Git στο παρασκήνιο, και δεν νοιάζεται ούτε (ή δεν γνωρίζει) ότι είναι διανεμημένο. Οι απαντήσεις σας ενδέχεται να υποδεικνύουν τις δυνατότητες, αλλά προσπαθήστε να στοχεύσετε στον αρχάριο που θέλει να διατηρήσει ένα "κύριο" αποθετήριο σε ένα "διακομιστή" που υποστηρίζεται και ασφαλίζεται και αντιμετωπίζει τον τοπικό αποθετήριο ως απλώς πόρο "πελάτη".

Ετσι:

Εγκατάσταση/Ρύθμιση

Εργασία με τον κώδικα

Ετικέτες, διακλάδωση, απελευθερώσεις, γραμμές βάσης

Αλλα

  • Περιγράψτε και συνδεθείτε με ένα καλό γραφικό περιβάλλον, πρόσθετο IDE κ.λπ. που κάνει το Git έναν πόρο μη γραμμής εντολών, αλλά παραθέστε τους περιορισμούς του καθώς και το καλό του.
    • msysgit - Σταυροειδής πλατφόρμα, περιλαμβάνεται στο Git
    • gitk - Πρόγραμμα προβολής ιστορικού διασταυρώσεων, που περιλαμβάνεται στο Git
    • gitnub - Mac OS X
    • gitx - Πρόγραμμα προβολής ιστορικού Mac OS X.
    • smartgit - Σταυροειδής πλατφόρμα, εμπορική, βήτα
    • tig - κονσόλα GUI για Linux
    • qgit - GUI για Windows, Linux
    • Git Extensions - πακέτο για Windows, περιλαμβάνει φιλικό GUI
  • Οποιαδήποτε άλλα κοινά καθήκοντα πρέπει να γνωρίζει ένας αρχάριος;
  • Πώς μπορώ να εργαστώ αποτελεσματικά με ένα αποθετήριο Subversion που έχει οριστεί ως πηγή ελέγχου πηγή μου;

Άλλες αναφορές αρχαρίων του Git

Περπατώντας στο Git

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

854
Adam Davis

Πώς δημιουργείτε ένα νέο έργο/αποθετήριο;

Μια αποθήκη git είναι απλά ένας κατάλογος που περιέχει έναν ειδικό κατάλογο .git.

Αυτό είναι διαφορετικό από τα "κεντρικά" συστήματα ελέγχου έκδοσης (όπως το Subversion), όπου φιλοξενείται ένας "αποθετήριος" σε έναν απομακρυσμένο διακομιστή, ο οποίος checkout σε έναν κατάλογο "εργασίας αντίγραφο". Με το git, το αντίγραφο εργασίας είναι το αποθετήριο.

Απλά εκτελέστε git init στον κατάλογο που περιέχει τα αρχεία που θέλετε να παρακολουθήσετε.

Για παράδειγμα,

cd ~/code/project001/
git init

Αυτό δημιουργεί ένα φάκελο .git (κρυφό) στον τρέχοντα κατάλογο.

Για να δημιουργήσετε ένα νέο έργο, εκτελέστε git init με ένα πρόσθετο όρισμα (το όνομα του καταλόγου που θα δημιουργηθεί):

git init project002

(This is equivalent to: mkdir project002 && cd project002 && git init)

Για να ελέγξετε αν η τρέχουσα διαδρομή είναι εντός ενός αποθετηρίου git, εκτελέστε απλά το git status - εάν δεν είναι αποθετήριο, θα αναφέρει "fatal: Not a git repository"

Θα μπορούσατε επίσης να ορίσετε τον κατάλογο .git και να τον ελέγξετε ότι περιέχει αρχεία/καταλόγους παρόμοια με τα παρακάτω:

$ ls .git
HEAD         config       hooks/       objects/
branches/    description  info/        refs/

Αν για οποιονδήποτε λόγο θέλετε να "de-git" ένα αποθετήριο (θέλετε να σταματήσετε να χρησιμοποιείτε git για να παρακολουθήσετε το έργο). Απλά καταργήστε τον κατάλογο .git στο βασικό επίπεδο του αποθετηρίου.

cd ~/code/project001/
rm -rf .git/

Προσοχή: Αυτό θα καταστρέψει όλα ιστορικό αναθεώρησης, όλα οι ετικέτες σας, όλα git έχει κάνει. Δεν θα αγγίξει τα "τρέχοντα" αρχεία (τα αρχεία που μπορείτε να δείτε αυτή τη στιγμή), αλλά οι προηγούμενες αλλαγές, τα διαγραμμένα αρχεία και ούτω καθεξής θα είναι ανεπανόρθωτα!

118
dbr

Λοιπόν, παρά το γεγονός ότι ζητήσατε να μην "συνδέουμε" απλώς με άλλους πόρους, είναι αρκετά ανόητο όταν υπάρχει ήδη ένας αναπτυσσόμενος (και αναπτυσσόμενος) πόρος της κοινότητας που είναι πραγματικά αρκετά καλός: το Git Community Book . Σοβαρά, αυτά τα 20 + ερωτήματα σε μια ερώτηση θα είναι οτιδήποτε, αλλά συνοπτικό και συνεπές. Το βιβλίο του Git Community Book είναι διαθέσιμο ως HTML και PDF και απαντά σε πολλές από τις ερωτήσεις σας με σαφείς, καλά μορφοποιημένες και αξιολογούμενες από ομότιμους απαντήσεις και σε μορφή που σας επιτρέπει να μεταβείτε ευθέως στο πρόβλημά σας στο χέρι.

Δυστυχώς, αν η ανάρτηση μου αναστατώσει τότε θα το διαγράψω. Απλά το πείτε.

59
Pat Notz

Πώς να το ρυθμίσετε ώστε να αγνοεί τα αρχεία:

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

Για να αγνοήσετε ένα αρχείο ή ένα σύνολο αρχείων, παρέχετε ένα μοτίβο. Η σύνταξη μοτίβο για git είναι αρκετά απλή, αλλά ισχυρή. Ισχύει και για τα τρία διαφορετικά αρχεία που θα αναφέρω παρακάτω.

  • Μια κενή γραμμή αγνοεί κανένα αρχείο, χρησιμοποιείται γενικά ως διαχωριστικό.
  • Οι γραμμές που κοιτάζουν με # χρησιμεύουν ως σχόλια.
  • Το πρόθεμα ! είναι προαιρετικό και θα αρνηθεί το πρότυπο. Οποιοδήποτε αρνητικό μοτίβο που ταιριάζει θα αντικαταστήσει τα χαμηλότερα πρότυπα προτεραιότητας.
  • Υποστηρίζει προηγμένες εκφράσεις και άγριες κάρτες
    • Ex: Το πρότυπο: *. [Oa] θα αγνοήσει όλα τα αρχεία στο αποθετήριο που τελειώνουν σε .o ή .a (αρχεία αντικειμένων και αρχείων)
  • Εάν ένα μοτίβο έχει κατάλογο που τελειώνει με μια πλάγια όψη, το git θα αντιστοιχεί μόνο σε αυτόν τον κατάλογο και τις διαδρομές κάτω από αυτό. Αυτό αποκλείει κανονικά αρχεία και συμβολικούς συνδέσμους από τον αγώνα.
  • Μια κορυφαία κάθετο θα ταιριάζει με όλα τα αρχεία σε αυτό το όνομα διαδρομής.
    • Ex: Το μοτίβο /* .c θα ταιριάζει με το αρχείο foo.c αλλά όχι bar/awesome .c

Μεγάλο παράδειγμα από τη σελίδα man gitignore (5) :

$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
#       Documentation/gitignore.html
#       file.o
#       lib.a
#       src/internal.o
[...]
$ cat .git/info/exclude
  # ignore objects and archives, anywhere in the tree.
  *.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
[...]

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

1) Ignore για όλους τους χρήστες του αποθετηρίου:

Προσθέστε ένα αρχείο με όνομα . Gitignore στη ρίζα του αντιγράφου εργασίας σας.

Επεξεργασία . Gitignore για να ταιριάζει με τις προτιμήσεις σας για τα οποία τα αρχεία πρέπει να/δεν πρέπει να αγνοούνται.

git add .gitignore 

και να δεσμευτείτε όταν τελειώσετε.

2) Ignore μόνο για το αντίγραφο του αποθετηρίου:

Προσθέστε/Επεξεργαστείτε το αρχείο $ GIT_DIR/info/exclude στο αντίγραφο εργασίας σας, με τα προτιμώμενα πρότυπά σας.

Ex: Το αντίγραφο εργασίας μου είναι ~/src/project1 έτσι θα επεξεργαστώ ~/src/project1/.git/info/exclude

Τελείωσες!

3) Ignore σε όλες τις περιπτώσεις, στο σύστημά σας:

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

Το προσωπικό μου ονομάζεται ~/.gitglobalignore

Στη συνέχεια, μπορώ να ξέρω το git γνωρίζοντας αυτό το αρχείο τροποποιώντας το αρχείο μου ~/.gitconfig με την ακόλουθη γραμμή:

core.excludesfile = ~/.gitglobalignore

Τελείωσες!

Θεωρώ ότι η σελίδα gitignore είναι η καλύτερη πηγή για περισσότερες πληροφορίες.

56
Brian Gianforcaro

Πώς ετικέτατε ένα συγκεκριμένο σύνολο αναθεωρήσεων

Πώς σημαίνετε μια ετικέτα ή μια "απελευθέρωση" ενός συγκεκριμένου συνόλου αναθεωρήσεων για ένα συγκεκριμένο σύνολο αρχείων, ώστε να μπορείτε πάντα να το τραβάτε αυτό αργότερα;

Χρησιμοποιώντας την εντολή git tag.

Για απλά "ετικέτα" την τρέχουσα αναθεώρηση, θα τρέξετε μόνο ..

git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'

Για να ορίσετε τις τρέχουσες ετικέτες, απλώς εκτελέστε το git tag χωρίς επιχειρήματα ή -l (πεζά L):

$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname

Για να διαγράψετε μια ετικέτα, χρησιμοποιείτε τη σημαία -d:

$ git tag -d thetagname 
Deleted tag 'thetagname'
$ git tag
[no output]

Για να επισημάνετε μια συγκεκριμένη (προηγούμενη) δέσμευση, απλά κάνετε ..

git tag [tag name] [revision SHA1 hash]

Για παράδειγμα:

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

Σημείωση: από προεπιλογή, το git δημιουργεί μια "ελαφριά" ετικέτα (βασικά μια αναφορά σε μια συγκεκριμένη αναθεώρηση). Ο "σωστός" τρόπος είναι να χρησιμοποιήσετε τη σημαία -a. Αυτό θα ξεκινήσει ο συντάκτης σας ζητώντας ένα μήνυμα ετικέτας (το ίδιο με το ερώτημα για ένα μήνυμα δέσμευσης, μπορείτε επίσης να χρησιμοποιήσετε τη σημαία -m για την παροχή του μηνύματος ετικέτας στη γραμμή εντολών). Χρησιμοποιώντας μια ετικέτα σχολιασμού δημιουργεί ένα αντικείμενο με δική του ταυτότητα, ημερομηνία, tagger (συγγραφέας) και προαιρετικά μια υπογραφή GPG (χρησιμοποιώντας την ετικέτα -s). Για περισσότερες πληροφορίες σχετικά με αυτό, δείτε αυτή την ανάρτηση

git tag mytagwithmsg -a -m 'This is a tag, with message'

Και για να απαριθμήσετε τις ετικέτες με σχολιασμούς, χρησιμοποιήστε τη σημαία -n1 για να εμφανίσετε 1 γραμμή κάθε μηνύματος ετικέτας (-n245 για να εμφανίσετε τις πρώτες 245 γραμμές κάθε σχολιασμού κ.ο.κ.):

$ git tag -l -n1
mytagwithmsg    This is a tag, with message

Για περισσότερες πληροφορίες, δείτε την git-tag (1) Χειροκίνητη Σελίδα

47
dbr

Παράδειγμα ροής εργασίας με GIT.

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

Αυτό το blog post εξηγεί ωραία μια πολύ απλή αλλά αποτελεσματική ροή εργασιών που είναι πραγματικά εύκολο στη ρύθμιση χρησιμοποιώντας git.

αναφέροντας από το blog post: Θεωρούμε ότι ο Origin/master είναι ο κύριος κλάδος όπου ο πηγαίος κώδικας του HEAD αντικατοπτρίζει πάντα μια κατάσταση έτοιμη για παραγωγή:

Η ροή εργασίας έχει γίνει αρκετά δημοφιλής ώστε να έχει κάνει ένα έργο που υλοποιεί αυτή τη ροή εργασίας: git-flow

Νίκαια απεικόνιση μιας απλής ροής εργασίας, όπου κάνετε όλες τις αλλαγές σας στην ανάπτυξη και μόνο Push to master όταν ο κώδικας βρίσκεται σε κατάσταση παραγωγής:

simple workflow

Τώρα, ας υποθέσουμε ότι θέλετε να εργαστείτε σε ένα νέο χαρακτηριστικό ή να επαναχρησιμοποιήσετε μια ενότητα. Θα μπορούσατε να δημιουργήσετε ένα νέο υποκατάστημα, αυτό που θα μπορούσαμε να ονομάσουμε ένα "χαρακτηριστικό" υποκατάστημα, κάτι που θα πάρει κάποιο χρονικό διάστημα και μπορεί να σπάσει κάποιο κωδικό. Μόλις η λειτουργία σας είναι "αρκετά σταθερή" και θέλετε να την μετακινήσετε "πιο κοντά" στην παραγωγή, συγχωνεύετε τον κλάδο των χαρακτηριστικών σας για να αναπτύξετε. Όταν όλα τα σφάλματα έχουν ταξινομηθεί μετά τη συγχώνευση και ο κωδικός σας περνάει όλες τις δοκιμές ροκ στερεά, Πιέστε τις αλλαγές σας σε master.

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

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

Git workflow example

46
ashwoods

Ακολουθεί ένα αντίγραφο της δημοσίευσης της PJ Hyett, καθώς δεν είναι πλέον διαθέσιμο:

Το Git δεν είναι δύσκολο

23 Νοεμβρίου 2008

Όταν λέμε στους ανθρώπους γιατί πρέπει να χρησιμοποιήσουν το Git για την Subversion, η γραμμή go-to είναι: "Το Git κάνει Subversion καλύτερα από την Subversion, αλλά κάνει πολύ περισσότερα από αυτό."

Το "πολύ περισσότερο" αποτελείται από ένα σωρό πράγματα που κάνει το Git πραγματικά λάμπει, αλλά μπορεί να είναι αρκετά συντριπτική για εκείνους που προέρχονται από άλλα SCM όπως Subversion.

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

Υποθέτοντας ότι έχετε εγκαταστήσει το απαραίτητο λογισμικό και έχετε κάπου ένα απομακρυσμένο αποθετήριο, έτσι θα τραβήξετε τον κώδικα και Πιέστε τις αλλαγές σας με το Subversion:

$ svn checkout svn://foo.googlecode.com/svn/trunk foo
# make your changes
$ svn commit -m "my first commit"

Και πώς θα το κάνατε στο Git:

$ git clone git@github.com:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git Push

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

Βλέπετε, πραγματικά δεν είναι τόσο δύσκολο.

Ενημέρωση: Θα ήθελα να είμαι remiss να μην αναφέρει επίσης ότι το ισοδύναμο της ενημέρωσης τοπικό αντίγραφό σας σε Subversion σε σύγκριση με Git είναι svn update και git pull, αντίστοιχα. Μόνο μία εντολή και στις δύο περιπτώσεις.

39
Adam Davis

Πώς να εγκαταστήσετε το Git

Στα Windows:

Εγκατάσταση msysgit

Υπάρχουν πολλές λήψεις:

  • Git: Χρησιμοποιήστε αυτό εάν δεν χρειάζεστε συγκεκριμένα μία από τις άλλες επιλογές παρακάτω.
  • PortableGit: Χρησιμοποιήστε αυτό εάν θέλετε να εκτελέσετε το Git σε έναν υπολογιστή χωρίς να το εγκαταστήσετε σε αυτόν τον υπολογιστή (π.χ. τρέχοντας Git από μια μονάδα USB)
  • msysGit: Χρησιμοποιήστε αυτό εάν θέλετε να αναπτύξετε το ίδιο το Git. Αν θέλετε απλά να χρησιμοποιήσετε το Git για τον πηγαίο κώδικα your , αλλά δεν θέλετε να επεξεργαστείτε Git's τον πηγαίο κώδικα, t χρειάζεται αυτό.

Αυτό εγκαθιστά επίσης το Shell της Cygwin bash, ώστε να μπορείτε να χρησιμοποιήσετε το git σε ένα ωραιότερο Shell (από το cmd.exe) και επίσης να συμπεριλάβετε το git-gui (προσβάσιμο μέσω της εντολής git gui ή του Start > All Programs > Git)

Mac OS X

Χρησιμοποιήστε το git-osx-installer ή μπορείτε επίσης να το εγκαταστήσετε από την πηγή

Μέσω ενός διαχειριστή πακέτων

Εγκαταστήστε git χρησιμοποιώντας τον εγγενή σας διαχειριστή πακέτων. Για παράδειγμα, στο Debian (ή στο Ubuntu):

apt-get install git-core

Ή σε Mac OS X, μέσω MacPorts :

Sudo port install git-core+bash_completion+doc

... ή fink:

fink install git

... ή Homebrew :

brew install git

Στις κατανομές που βασίζονται στο Red Hat, όπως το Fedora:

yum install git

Στο Cygwin το πακέτο Git μπορεί να βρεθεί κάτω από την ενότητα "devel"

Από την πηγή (Mac OS X/Linux/BSD/κλπ.)

Στο Mac OS X, αν έχετε εγκαταστήσει τα Εργαλεία για προγραμματιστές, μπορείτε να μεταγλωττίσετε εύκολα το Git από την πηγή. Κατεβάστε την τελευταία έκδοση του Git ως .tar.bz ή .tar.gz από http://git-scm.com/ και εξαγάγετε (κάντε διπλό κλικ στο Finder)

Σε Linux/BSD/etc. θα πρέπει να είναι το ίδιο. Για παράδειγμα, στο Debian (και στο Ubuntu), πρέπει να εγκαταστήσετε το πακέτο build-essential μέσω apt.

Στη συνέχεια, σε ένα τερματικό, cd όπου εξάγετε τα αρχεία (το τρέξιμο cd ~/Downloads/git*/ θα πρέπει να λειτουργήσει), και στη συνέχεια εκτελέστε ..

./configure && make && Sudo make install

Αυτό θα εγκαταστήσει το Git στην προεπιλεγμένη θέση (/usr/local - έτσι git θα βρίσκεται σε /usr/local/bin/git)

Θα σας ζητήσει να εισαγάγετε τον κωδικό πρόσβασής σας (για Sudo), έτσι μπορείτε να γράψετε στον κατάλογο /usr/local/, τον οποίο μπορεί να έχει πρόσβαση μόνο ο χρήστης "root", οπότε απαιτείται το Sudo!

Αν το κάνετε να το εγκαταστήσετε κάπου χωριστά (έτσι τα αρχεία του Git δεν αναμειγνύονται με άλλα εργαλεία), χρησιμοποιήστε το --prefix με την εντολή configure:

./configure --prefix=/usr/local/gitpath
make
Sudo make install

Αυτό θα εγκαταστήσει το δυαδικό git σε /usr/local/bin/gitpath/bin/git - έτσι δεν χρειάζεται να πληκτρολογείτε ότι κάθε φορά, πρέπει να προσθέσετε στον $PATH προσθέτοντας την ακόλουθη γραμμή στον ~/.profile:

export PATH="${PATH}:/usr/local/bin/gitpath/bin/"

Αν δεν έχετε πρόσβαση στο Sudo, μπορείτε να χρησιμοποιήσετε το --prefix=/Users/myusername/bin και να εγκαταστήσετε στον οικείο κατάλογό σας. Θυμηθείτε να προσθέσετε το ~/bin/ στο $PATH

Η δέσμη ενεργειών x-git-update-to-latest-version αυτοματοποιεί πολλά από αυτά:

Αυτή η δέσμη ενεργειών ενημερώνει τον τοπικό κλώνο του git repo (τοπικά στο ~/work/track/git) και στη συνέχεια ρυθμίζει, εγκαθιστά (στο /usr/local/git-git describe) και ενημερώνει το σύμβολο /usr/local/git.

Με αυτόν τον τρόπο, μπορώ να έχω /usr/local/git/bin στο PATH μου και πάντα χρησιμοποιώ την πιο πρόσφατη έκδοση.

Η τελευταία έκδοση αυτού του σεναρίου εγκαθιστά επίσης τις σελίδες man. Πρέπει να τροποποιήσετε το MANPATH για να συμπεριλάβετε τον κατάλογο /usr/local/git/share/man.

33
dbr

Git Reset

Πείτε ότι κάνετε ένα τράβηγμα, συγχωνεύστε τον στον κωδικό σας, και αποφασίστε ότι δεν σας αρέσει. Χρησιμοποιήστε το git-log ή το tig και βρείτε το hash όπου θέλετε να επιστρέψετε (ίσως το τελευταίο σας commit πριν από την pull/merge) αντιγράψετε το hash και κάντε:

# Revert to a previous commit by hash:
git-reset --hard <hash>

Αντί του hash, μπορείτε να χρησιμοποιήσετε HEAD ^ ως συντόμευση για την προηγούμενη δέσμευση.

# Revert to previous commit:
git-reset --hard HEAD^
32
Dean Rather

Πώς ρυθμίζετε ένα κοινόχρηστο αποθετήριο ομάδας;

Ο τρόπος δημιουργίας ενός κανονικού αποθετηρίου περιγράφεται εδώ - αλλά πώς δημιουργείτε ένα αποθετήριο ομάδας που όλοι μπορούν να τραβήξουν και να πιέσουν από και προς;

Χρησιμοποιώντας ένα κοινό σύστημα αρχείων NFS

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

mkdir /your/share/folder/project.git
cd /your/share/folder/project.git
newgrp yourteamgroup # if necessary
git init --bare --shared

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

cd your/local/workspace/project
git remote add Origin /your/share/folder/project.git
git Push Origin master

Άλλοι μπορούν τώρα να την κλωνοποιήσουν και να αρχίσουν να δουλεύουν:

cd your/local/workspace
git clone /your/share/folder/project.git

Χρησιμοποιώντας SSH

Ρυθμίστε έναν λογαριασμό χρήστη στο διακομιστή προορισμού. Είτε χρησιμοποιείτε έναν λογαριασμό χωρίς κωδικό πρόσβασης, έναν λογαριασμό με κωδικό πρόσβασης, είτε χρησιμοποιώντας το authorized_keys εξαρτάται πραγματικά από το απαιτούμενο επίπεδο ασφάλειας. Ρίξτε μια ματιά στο για τη ρύθμιση του Git over SSH για περισσότερες πληροφορίες.

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

Αφού ανοίξετε το χώρο αποθήκευσης με τον ίδιο τρόπο όπως παραπάνω, κάνετε το αρχικό Push όπως αυτό:

cd your/local/workspace/project
git remote add Origin user@server:/path/to/project.git
git Push Origin master

Δείτε την ομοιότητα με τα παραπάνω; Το μόνο πράγμα που μπορεί να συμβεί επιπλέον είναι η SSH να ζητάει έναν κωδικό πρόσβασης εάν ο λογαριασμός έχει κωδικό πρόσβασης. Εάν λάβετε αυτήν την ερώτηση σε έναν λογαριασμό χωρίς κωδικό πρόσβασης, ο διακομιστής SSH έχει απενεργοποιήσει PermitEmptyPasswords.

Η κλωνοποίηση μοιάζει τώρα:

cd your/local/workspace
git clone user@server:/path/to/project.git
31
Asgeir S. Nilsen

git status είναι ο φίλος σας, χρησιμοποιήστε το συχνά. Καλό για να απαντήσετε σε ερωτήσεις όπως:

  • Τι έκανε ακριβώς αυτή η εντολή;
  • Σε ποιο κλάδο είμαι;
  • Τι αλλαγές πρόκειται να διαπράξω, και έχω ξεχάσει τίποτα;
  • Ήμουν στη μέση κάτι τελευταίο που εργάστηκα σε αυτό το έργο (ημέρες, εβδομάδες ή ίσως μήνες πριν);

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

Προφανώς, είναι πολύ πιο χρήσιμο αν το .gitignore σας είναι σωστά διαμορφωμένο.

28
Peter Burns

Επαναλάβετε τις αλλαγές

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

$ git commit source/main.c

Θα δεσμεύσει το αρχείο main.c στον κατάλογο ./source/

$ git commit -a # the -a flag pulls in all modified files

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

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

$ git Push <remote> <branch> # Push new commits to the <branch> on the <remote> repository

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

27
Adam Davis

Πώς φτιάχνεις υποκαταστήματα;

Ο προεπιλεγμένος κλάδος σε ένα αποθετήριο git ονομάζεται master.

Για να δημιουργήσετε μια νέα χρήση υποκαταστήματος

git branch <branch-name>

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

git branch

Εάν θέλετε να μεταβείτε σε άλλο υποκατάστημα που μπορείτε να χρησιμοποιήσετε

git checkout <branch-name>

Για να δημιουργήσετε ένα νέο υποκατάστημα και να μεταβείτε σε αυτό σε ένα βήμα

git checkout -b <branch-name>

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

git branch -d <branch-name>

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

git stash
git stash branch <branch-name>
27
Markus Dulghier

Λήψη του τελευταίου κώδικα

$ git pull <remote> <branch> # fetches the code and merges it into 
                             # your working directory
$ git fetch <remote> <branch> # fetches the code but does not merge
                              # it into your working directory

$ git pull --tag <remote> <branch> # same as above but fetch tags as well
$ git fetch --tag <remote> <branch> # you get the idea

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

21
Jeremy Wall

Το δωρεάν βιβλίο Pro Git είναι σίγουρα το αγαπημένο μου, ειδικά για αρχάριους.

20
aldux

Git Magic είναι το μόνο που θα χρειαστείτε ποτέ. Εγγυημένη ή τα χρήματά σας πίσω!

18
Andrew

Έχω επίσης βρει Git Internals να είναι πολύ χρήσιμη. Είναι γραμμένο από τον Scott Chacon (συγγραφέας του Pro Git, και συντηρητής του βιβλίου Git Community Book). Αυτό που μου αρέσει στο Git Internals είναι επικεντρώνεται στις έννοιες πρώτα και στη συνέχεια στις εντολές , και δεδομένου ότι είναι ~ 100 μικρές σελίδες είναι γρήγορα εύπεπτο.

16
Jordan

Πώς συγχωνεύετε τα υποκαταστήματα;

Αν θέλετε να συγχωνεύσετε ένα υποκατάστημα (π.χ. master με release), βεβαιωθείτε ότι το τρέχον υποκατάστημά σας είναι το υποκατάστημα στο οποίο θέλετε να συγχωνεύσετε (χρησιμοποιήστε git branch ή git status για να δείτε το τρέχον υποκατάστημά σας).

Στη συνέχεια, χρησιμοποιήστε

git merge master

(όπου master είναι το όνομα του υποκαταστήματος που θέλετε να συγχωνεύσετε με τον τρέχοντα κλάδο).

Εάν υπάρχουν συγκρούσεις, μπορείτε να τις χρησιμοποιήσετε

git diff

για να δείτε τις εκκρεμείς διενέξεις που πρέπει να επιλύσετε.

16
Markus Dulghier

Πώς βλέπετε το ιστορικό των αναθεωρήσεων ενός αρχείου;

git log -- filename
13

Πώς να παρακολουθείτε απομακρυσμένα υποκαταστήματα

Υποθέτοντας ότι υπάρχει ένα απομακρυσμένο αποθετήριο που έχετε κλωνοποιήσει από το τοπικό αποθετήριο σας και επίσης υποθέτοντας ότι υπάρχει ένα υποκατάστημα με το όνομα 'some_branch' σε αυτό το απομακρυσμένο αποθετήριο, εδώ μπορείτε να το εντοπίσετε τοπικά:

# list remote branches
git branch -r

# start tracking one remote branch
git branch --track some_branch Origin/some_branch

# change to the branch locally
git checkout some_branch

# make changes and commit them locally
....

# Push your changes to the remote repository:
git Push
12
innaM

Ένα πραγματικό χαρτί για την κατανόηση του πώς λειτουργεί το Git είναι The Git Parable . Πολύ συνιστάται!

11
EricSchaefer

Πώς συγκρίνετε δύο αναθεωρήσεις ενός αρχείου ή του τρέχοντος αρχείου σας και μιας προηγούμενης αναθεώρησης;

Η παράμετρος σύγκρισης είναι git diff.

Για να συγκρίνετε 2 αναθεωρήσεις ενός αρχείου:

$ git diff <commit1> <commit2> <file_name>

Αυτό διαφέρει από τη δέσμευση1 κατά της δέσμευσης2. εάν αλλάξετε τη σειρά, τότε τα αρχεία διαφέρουν από την άλλη, πράγμα που μπορεί να μην είναι αυτό που περιμένετε ...

Για να συγκρίνετε το τρέχον σταδιακό αρχείο με το αποθετήριο:

$ git diff --staged <file_name>

Για να συγκρίνετε το τρέχον μη αποθηκευμένο αρχείο με το αποθετήριο:

$ git diff <file_name>
10
kret

Γιατί ακόμα ένα άλλο πώς; Υπάρχουν πραγματικά καλά στο διαδίκτυο, όπως ο git οδηγός το οποίο είναι τέλειο για να ξεκινήσετε. Έχει καλές συνδέσεις, συμπεριλαμβανομένου του git βιβλίου στο οποίο μπορεί κανείς να συνεισφέρει (φιλοξενείται στο git hub) και το οποίο είναι ιδανικό για αυτό το συλλογικό έργο.

Στο stackoverflow, θα προτιμούσα πραγματικά να δω τα αγαπημένα σας κόλπα!

Το ορυχείο, το οποίο ανακάλυψα μόνο πρόσφατα, είναι git stash, εξήγησε εδώ , το οποίο σας επιτρέπει να αποθηκεύσετε την τρέχουσα εργασία σας και να πάτε σε άλλο υποκατάστημα

EDIT: όπως την προηγούμενη ανάρτηση, αν προτιμάτε πραγματικά stackoverlow μορφή με τις θέσεις ως wiki εγώ θα διαγράψει αυτή την απάντηση

9
Piotr Lesnicki

Κονσόλα UI - Tig

Εγκατάσταση:

apt-get install tig

Χρήση

Ενώ βρίσκεστε μέσα σε ένα git repo, πληκτρολογήστε 'tig', για να δείτε ένα διαδραστικό αρχείο καταγραφής, πατήστε 'enter' σε οποιοδήποτε αρχείο καταγραφής για να δείτε περισσότερες πληροφορίες γι 'αυτό. h για βοήθεια, η οποία απαριθμεί τις βασικές λειτουργίες.

Ασήμαντα πράγματα

Το "Tig" είναι "Git" προς τα πίσω.

9
Dean Rather

Πώς μπορώ να διαγράψω ένα υποκατάστημα σε ένα απομακρυσμένο αποθετήριο;

Πραγματοποιήστε ένα πάτημα στο τηλεχειριστήριό σας χρησιμοποιώντας το : πριν από το όνομα του υποκαταστήματος

git Push Origin :mybranchname

είναι Origin το όνομα του απομακρυσμένου σας και mybranchname το όνομα του υποκαταστήματος που πρόκειται να διαγραφεί

http://help.github.com/remotes/

8
Felipe Sabino

Πώς μπορώ να δημιουργήσω ένα υποκατάστημα σε απομακρυσμένο αποθετήριο;

Υποθέτοντας ότι έχετε κλωνοποιήσει το απομακρυσμένο αποθετήριό σας από κάποια απομακρυσμένη αποθήκη.

# create a new branch locally
git branch name_of_branch
git checkout name_of_branch
# edit/add/remove files    
# ... 
# Commit your changes locally
git add fileName
git commit -m Message
# Push changes and new branch to remote repository:
git Push Origin name_of_branch:name_of_branch
8
innaM

Ξεκίνησα με τον επίσημο Git tutorial . Νομίζω ότι είναι αρκετά πρακτικό για τους αρχάριους (ήμουν και εξακολουθώ να είμαι αρχάριος, με τον ορισμό σας! Χρειάζομαι μόλις makefiles, έχω παίξει μόνο με το Apache Subversion κλπ.).

8
hasen

Έλεγχος κωδικού

Πρώτα πηγαίνετε σε ένα άδειο dir, χρησιμοποιήστε το "git init" για να το κάνετε αποθετήριο, και στη συνέχεια κλωνοποιήστε το απομακρυσμένο repo σε δική σας.

git clone user@Host.com:/dir/to/repo

Οπουδήποτε αρχικά κλωνοποιήσατε είναι από όπου το "git pull" θα τραβήξει από προεπιλογή.

7
Dean Rather

Πιέστε και τραβήξτε τις αλλαγές

Με απλοποιημένο τρόπο, απλώς κάντε git Push και git pull. Οι αλλαγές συγχωνεύονται και αν υπάρχει σύγκρουση git θα σας ενημερώσει και μπορείτε να το επιλύσετε με μη αυτόματο τρόπο.

Όταν πατάτε για πρώτη φορά σε απομακρυσμένο αποθετήριο, πρέπει να κάνετε git Push Origin master (master είναι ο κύριος κλάδος). Από εκεί και πέρα ​​κάνετε ακριβώς το git Push.

Πιέστε ετικέτες με git Push --tags.

7
dylanfm
7
gngrwzrd

WRT καλή GUIs/frontends, μπορείτε επίσης να θελήσετε να ελέγξετε έξω qgit το οποίο είναι ένα cross-platform (Linux/Win32) αποθετήριο θεατή για Git και μπορεί να χρησιμοποιηθεί επίσης ως υψηλό επίπεδο frontend για το πιο κοινό Git λειτουργίες, στην πραγματικότητα μπορεί εύκολα να ενισχυθεί με τις αποκαλούμενες "προσαρμοσμένες ενέργειες", έτσι ώστε οι χρήστες να μπορούν να παρέχουν προσαρμοσμένες ενέργειες.

5
none

Τι είναι η ανακύκλωση;

Αλλαγή εξήγησης από το βιβλίο Pragmatic Guide to Git - Travis Swicegood

Κεφάλαιο ΙΙΙ

16. Επαναπροσδιορισμός Ιστορικού με Επανέκδοση

Η δέσμευση αναδιάρθρωσης είναι η μόνη έννοια στο Git που δεν έχει αντίστοιχο στοιχείο στον παραδοσιακό κόσμο ελέγχου εκδόσεων. Χρησιμοποιώντας το git rebase, μπορείτε να ξαναγράψετε το ιστορικό ενός αποθετηρίου με διάφορους τρόπους. Είναι μία από τις πιο ισχυρές εντολές στο Git, γεγονός που την καθιστά από τις πιο επικίνδυνες.

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

Υπάρχει ένας απλός κανόνας με git rebase: χρησιμοποιήστε το όσο θέλετε στις τοπικές δεσμεύσεις. Αφού έχετε μοιραστεί τις αλλαγές με έναν άλλο προγραμματιστή, ο πονοκέφαλος γενικά δεν αξίζει τον κόπο.

5
Felipe Sabino

Πόρος : Σίγουρα check out Gitcasts του Scott Chacon , ειδικά η ομιλία του Railsconf ).

Github είναι φοβερό και έχει επίσης μερικούς χρήσιμοι οδηγοί .

5
dylanfm

Σοβαρά προσθέστε τον σύνδεσμο που εμφανίζεται στην απάντηση του Tim στη στήλη Overflow Stack Εγκατάσταση Git Server με Msysgit σε Windows .

Είναι άψογα μου είπε πώς να ρυθμίσετε Git στα Windows με msysgit , και είναι ένα απίστευτα λεπτομερές άρθρο.

5
Jake

Βρήκα αυτό το post να είναι πολύ χρήσιμο για να με ξεκινήσω. Πρέπει ακόμα να διαβάσω το βιβλίο και άλλους πόρους, αλλά η θέση ήταν χρήσιμη, όπως λέει ο τίτλος, "κατανόηση git εννοιολογικά". Προτείνω επίσης να πάρετε το μάθημα Git & GitHub που προσφέρεται στο RubyLearning .

4
tundal45

Ένα ακόμα στοιχείο που νομίζω ότι θα έπρεπε να είναι σε αυτόν τον κατάλογο, ίσως πολύ χρήσιμο για αρχάριους:

Μην πανικοβληθείτε

Τι γίνεται αν έκανα κάποιες δεσμεύσεις και έπειτα έκανα κάτι τρομακτικό, όπως ίσως μια αναβολή, και τώρα κάτι - ή ακόμα και όλα - φαίνεται να χαθεί; (Το Rebase φαίνεται να είναι αυτό που παίρνει τους περισσότερους ανθρώπους για πρώτη φορά, οπότε επικεντρωθώ σε αυτό. Ενώ το git rebase --abort βοηθάει πολύ, μερικές φορές θα διαπιστώσετε ότι έχετε ενοχλήσει μια επεξεργασία κατά τη διάρκεια μιας διαδραστικής εκδήλωσης, για παράδειγμα, και αφήστε το να τελειώσετε το rebase και τώρα θέλετε να πάρετε τα παλιά σας πράγματα πίσω και στη συνέχεια υπάρχουν πράγματα όπως filter-branch...)

Μια βασική αρχή git είναι ότι ποτέ δεν διαγράφει πράγματι τίποτα που έχετε διαπράξει. ("Ποτέ, ποτέ;" "Τι, ποτέ ;" "Καλά, σχεδόν ποτέ!") Αν δεν έχετε τρέξει git gc, είναι ακόμα εκεί . Μπορεί να χρειαστεί κάποια βήματα για να βρούμε την προηγούμενη δουλειά σας, αλλά αν κάνατε κάποια επιτυχή git commits νωρίτερα, τότε, για παράδειγμα, ακόμη και η φαινομενικά καταστρεπτική σειρά δεσμεύσεών σας από ένα τραγικό σφάλμα rebase είναι ακόμα εκεί, συνήθως για τουλάχιστον ένα μήνα (τεχνικά, μέχρι να λήξουν τα "reflogs").

Είναι σημαντικό να έχετε κατά νου ότι κάθε όνομα υποκαταστήματος επισημαίνει - ή δείχνει σε - ένα "commit-ID". Αυτοί είναι οι αστείες αριθμοί όπως το 7cc5272. Πολλά από τα πράγματα που κάνετε, όπως η προσθήκη νέας δέσμευσης σε ένα υποκατάστημα, κάνουν το όνομα του υποκαταστήματος να οδηγεί σε ένα νέο, διαφορετικό αναγνωριστικό commit-ID. Κάθε αναγνωριστικό δέσμευσης έχει έναν σύνδεσμο που δείχνει πίσω σε κάποια προηγούμενη ταυτότητα δέσμευσης (commit-ID), και αυτό είναι το πράγμα που κάνει ένα "υποκατάστημα" γεμάτο δεσμεύσεις.

Οι συζητήσεις για την επανάληψη της εισόδου ανασυντάσσουν την ιστορία και εντολές όπως το git filter-branch επίσης "ξαναγράφουν το ιστορικό", αλλά δεν το καταστρέφουν καταστρέφοντας το προηγούμενο ιστορικό, αλλά προσθέτοντας νέο ιστορικό. Μόλις ολοκληρωθεί η νέα ιστορία, το git θα "μετακινήσει τις ετικέτες γύρω" έτσι ώστε να είναι μοιάζει με το ιστορικό έχει αλλάξει. Εάν βρίσκεστε στο υποκατάστημα fix-nasty-bug και κάνετε git rebase και καταφέρετε να καταστρέψετε τα πράγματα, η ετικέτα fix-nasty-bug αναφέρεται τώρα στο ναυάγιο, αλλά οι αρχικές εκδόσεις παραμένουν εκεί. Ειδικά το Rebase δημιουργεί μια προσωρινή ετικέτα ORIG_HEAD (που δεν κινείται, χωρίς διακλάδωση) που σας επιτρέπει να τα βρείτε. Η εντολή filter-branch αποθηκεύει επίσης όλα τα αρχικά ονόματα. Σε ορισμένες περιπτώσεις, ενδέχεται να μην υπάρχει προφανές όνομα, αλλά οι δεσμεύσεις μπορούν πάντοτε να βρεθούν. Εάν είναι απαραίτητο, βρείτε τον εαυτό σας έναν "git guru" και εξηγήστε τι κάνατε και οδήγησε στα συντρίμμια.

(Η εντολή git reflog show μπορεί επίσης να βοηθήσει στην εύρεση αναγνωριστικών commit-commit.)

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

git log <commit-ID>   # ORIG_HEAD after a bad rebase, for instance
git show <commit-ID>  # or some long SHA1 value you can still see in a window

Αν φαίνεται σωστό ή χρήσιμο, βάλτε το όνομα σε αυτό:

git branch recover-my-stuff ORIG_HEAD

και όλα είναι και πάλι πίσω! Στην πραγματικότητα, τώρα τόσο η κακή εκκαθάρισή σας όσο και η πρωτότυπη εργασία σας βρίσκονται στο git repo "για πάντα" (ή τουλάχιστον, μέχρι να διαγράψετε τα ονόματα κλάδων και αφήστε μερικούς μήνες να πάνε , και στη συνέχεια συλλέγονται τα σκουπίδια). Μπορείτε να βάλετε όσα ονόματα σε όσες ανακτηθεί δεσμεύσεις όπως θέλετε. (Τα ονόματα υποκαταστημάτων είναι ουσιαστικά δωρεάν, εκτός από το γεγονός ότι τα δεδομένα git branch είναι ακατάλληλα και, φυσικά, διατηρούνται δεσμεύσεις από τη συλλογή απορριμμάτων. Μπορείτε επίσης να τοποθετήσετε ετικέτες σε συγκεκριμένα αναγνωριστικά δέσμευσης εάν προτιμάτε αυτά.)

4
torek

Πολύ καλή θέση για τη συγχώνευση με συγκρούσεις - GitGuys: Συγχώνευση με σύγκρουση - Συγκρούσεις και Ψηφίσματα

Το blog είναι πραγματικά μεγάλο - επεξηγηματικά, καθαρά παραδείγματα και κατανοητό. Σίγουρα αξίζει τον έλεγχο.

0
rdamborsky