You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Αυτό μας βοηθάει ώστε να πάρουμε τις αλλαγές και τις συνεισφορές των άλλων χρηστών αρκετά εύκολα.
60
-
Επιπλέον μπορούμε, αν έχουμε τη εξουσιοδότηση, να ωθήσουμε αλλαγές σε αυτά. Η εντολή αυτή δεν μας δίνει πληροφορίες για το αν έχουμε την εξουσιοδότηση αυτή.
60
+
Επιπλέον μπορούμε, αν έχουμε την εξουσιοδότηση, να ωθήσουμε αλλαγές σε αυτά. Η εντολή αυτή δεν μας δίνει πληροφορίες για το αν έχουμε την εξουσιοδότηση αυτή.
61
61
62
62
Ας σημειωθεί ότι τα απομακρυσμένα αποθετήρια χρησιμοποιούν μια πληθώρα από πρωτόκολλα. Θα καλύψουμε αναλυτικά τα πρωτόκολλα αυτά στο κεφάλαιο <<_git_on_the_server>>.
Copy file name to clipboardExpand all lines: book/03-git-branching/sections/nutshell.asc
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -146,8 +146,8 @@ $ git commit -a -m 'made other changes'
146
146
----
147
147
148
148
Τώρα το ιστορικό του έργου έχει αποκλίνει (βλ. <<divergent_history>>).
149
-
Δημιουργήσαμε ένα κλάδο, μεταβήκαμε σε αυτόν, κάναμε κάποιες αλλαγές και μετά επιστρέψαμε στον κλάδο `main' και κάναμε κάποιες άλλες αλλαγές.
150
-
Οι αλλαγές αυτές είναι απομονωμένες σε διαφορετικούς κλάδους: μπορούμε να μεταπηδούμε από τον ένα κλάδο στον άλλο και να τους συγχωνεύσουμε όταν είμαστε έτοιμοι να κάνουμε κάτι τέτοιο.
149
+
Δημιουργήσαμε έναν κλάδο, μεταβήκαμε σε αυτόν, κάναμε κάποιες αλλαγές και μετά επιστρέψαμε στον κλάδο `main' και κάναμε κάποιες άλλες αλλαγές.
150
+
Οι αλλαγές αυτές είναι απομονωμένες σε διαφορετικούς κλάδους: μπορούμε να μεταπηδούμε από τον έναν κλάδο στον άλλο και να τους συγχωνεύσουμε όταν είμαστε έτοιμοι να κάνουμε κάτι τέτοιο.
151
151
Και όλα αυτά τα καταφέρνουμε με απλές εντολές `branch`, `checkout` και `commit`.
Copy file name to clipboardExpand all lines: book/03-git-branching/sections/rebasing.asc
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,7 +20,7 @@ image::images/basic-rebase-2.png[Συγχώνευση και ενσωμάτωσ
20
20
21
21
Ωστόσο, υπάρχει κι ένας άλλος τρόπος: μπορούμε να πάρουμε μόνον το επίθεμα κώδικα των αλλαγών που εισήχθησαν με την υποβολή `C4` και να τις εφαρμόσουμε (επανατοποθετήσουμε) ξανά στο στιγμιότυπο `C3`.
22
22
Στο Git, αυτό ονομάζεται _επανατοποθέτηση_ (rebasing).
23
-
Με την εντολή `rebase` μπορούμε να πάρουμε όλες τις αλλαγές που υποβλήθηκαν σε ένα κλάδο και να τις επαναλάβουμε σε έναν άλλο.(((εντολές git, rebase)))
23
+
Με την εντολή `rebase` μπορούμε να πάρουμε όλες τις αλλαγές που υποβλήθηκαν σε έναν κλάδο και να τις επαναλάβουμε σε έναν άλλο.(((εντολές git, rebase)))
Copy file name to clipboardExpand all lines: book/03-git-branching/sections/remote-branches.asc
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -145,7 +145,7 @@ Branch serverfix set up to track remote branch serverfix from origin.
145
145
Switched to a new branch 'serverfix'
146
146
----
147
147
148
-
Για την ακρίβεια είναι τόσο συνηθισμένη που υπάρχει συντόμευση για την παραπάνω επιλογή. Αν το όνομα του κλάδου στον οποίο προσπαθούμε να μεταβούμε (α) δεν υπάρχει και (β) έχει ακριβώς το ίδιο όνομα με έναν απομακρυσμένο, το Git θα δημιουργήσει αυτόματα ένα κλάδο παρακολούθησης.
148
+
Για την ακρίβεια είναι τόσο συνηθισμένη που υπάρχει συντόμευση για την παραπάνω επιλογή. Αν το όνομα του κλάδου στον οποίο προσπαθούμε να μεταβούμε (α) δεν υπάρχει και (β) έχει ακριβώς το ίδιο όνομα με έναν απομακρυσμένο, το Git θα δημιουργήσει αυτόματα έναν κλάδο παρακολούθησης.
==== Τοποθέτηση του γυμνού αποθετηρίου σε έναν διακομιστή
39
39
40
-
Τώρα που έχουμε ένα γυμνό αντίγραφο του αποθετηρίου μας, το μόνο που χρειάζεται να κάνουμε είναι να το βάλουμε σε ένα διακομιστή και να ρυθμίσουμε τα πρωτόκολλά μας.
40
+
Τώρα που έχουμε ένα γυμνό αντίγραφο του αποθετηρίου μας, το μόνο που χρειάζεται να κάνουμε είναι να το βάλουμε σε έναν διακομιστή και να ρυθμίσουμε τα πρωτόκολλά μας.
41
41
Ας υποθέσουμε ότι έχουμε δημιουργήσει έναν διακομιστή που ονομάζεται `git.example.com` στον οποίο έχουμε πρόσβαση μέσω SSH και θέλουμε να αποθηκεύσουμε όλα τα αποθετήρια Git στον κατάλογο `/opt/git`.
42
42
Υποθέτοντας ότι το `/opt/git` υπάρχει σε αυτόν τον διακομιστή, μπορούμε να ρυθμίσουμε το νέο αποθετήριό μας αντιγράφοντας το γυμνό αποθετήριο:
43
43
@@ -67,7 +67,7 @@ $ git init --bare --shared
67
67
Βλέπουμε πόσο εύκολο είναι να πάρουμε ένα αποθετήριο Git, να δημιουργήσουμε μια γυμνή έκδοσή του και να την τοποθετήσουμε σε έναν διακομιστή στον οποίο εμείς και οι συνεργάτες μας έχουμε πρόσβαση μέσω SSH.
68
68
Τώρα είμαστε έτοιμοι να συνεργαστούμε στο ίδιο έργο.
69
69
70
-
Είναι σημαντικό να σημειωθεί ότι αυτό είναι κυριολεκτικά το μόνο που χρειάζεται να κάνουμε για να τρέξουμε έναν χρήσιμο διακομιστή Git στον οποίο έχουν πρόσβαση πολλοί χρήστες --απλά προσθέτουμε λογαριασμούς SSH σε ένα διακομιστή και ρίχνουμε ένα γυμνό αποθετήριο κάπου όπου όλοι αυτοί οι χρήστες έχουν πρόσβαση ανάγνωσης/εγγραφής.
70
+
Είναι σημαντικό να σημειωθεί ότι αυτό είναι κυριολεκτικά το μόνο που χρειάζεται να κάνουμε για να τρέξουμε έναν χρήσιμο διακομιστή Git στον οποίο έχουν πρόσβαση πολλοί χρήστες --απλά προσθέτουμε λογαριασμούς SSH σε έναν διακομιστή και ρίχνουμε ένα γυμνό αποθετήριο κάπου όπου όλοι αυτοί οι χρήστες έχουν πρόσβαση ανάγνωσης/εγγραφής.
71
71
Είμαστε έτοιμοι --δεν χρειάζεται τίποτα άλλο.
72
72
73
73
Στις επόμενες ενότητες θα δούμε πώς μπορούμε να επεκταθούμε σε πιο εξεζητημένες ρυθμίσεις.
Αν καθορίσουμε ακριβώς τη διαδρομή, το Git προσπαθεί να χρησιμοποιήσει σκληρούς συνδέσμους (hardlinks) ή να αντιγράψει απευθείας τα αρχεία που χρειάζονται.
31
31
Εάν καθορίσουμε το `file://`, το Git ενεργοποιεί τις διαδικασίες που συνήθως χρησιμοποιεί για τη μεταφορά δεδομένων μέσω δικτύου, μία μέθοδο μεταφοράς των δεδομένων γενικά πολύ λιγότερο αποτελεσματική.
32
32
Ο βασικός λόγος που θα θέλαμε να χρησιμοποιήσουμε το `file://` είναι η περίπτωση κατά την οποία θέλουμε ένα καθαρό αντίγραφο του αποθετηρίου με εξωτερικές αναφορές ή αντικείμενα που απομένουν --συνήθως μετά από εισαγωγή από ένα άλλο σύστημα ελέγχου εκδόσεων ή κάτι παρόμοιο (βλ. <<_ git_internals>> για σχετικές εργασίες συντήρησης).
33
-
Στη παρακάτω παράδειγμα θα χρησιμοποιήσουμε τη διαδρομή χωρίς το `file://` επειδή αυτό είναι σχεδόν πάντα πιο γρήγορο.
33
+
Στην παρακάτω παράδειγμα θα χρησιμοποιήσουμε τη διαδρομή χωρίς το `file://` επειδή αυτό είναι σχεδόν πάντα πιο γρήγορο.
34
34
35
35
Για να προσθέσουμε ένα τοπικό αποθετήριο σε ένα υπάρχον έργο Git, μπορούμε να εκτελέσουμε κάτι σαν:
Copy file name to clipboardExpand all lines: book/05-distributed-git/sections/maintaining.asc
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -228,7 +228,7 @@ Merge made by recursive.
228
228
Συχνά είναι χρήσιμο να πάρουμε μια ανασκόπηση όλων των υποβολών που βρίσκονται σε αυτόν τον κλάδο, αλλά δεν βρίσκονται στον κύριο κλάδο μας.
229
229
Μπορούμε να εξαιρέσουμε υποβολές στον κύριο κλάδο μας προσθέτοντας την επιλογή `--not` πριν από το όνομα του κλάδου.
230
230
Αυτό είναι το ίδιο με τη μορφή `master..contrib` που χρησιμοποιήσαμε προηγουμένως.
231
-
Για παράδειγμα, εάν ο συνεισφέρων μας στείλει δύο επιθέματα και δημιουργήσουμε ένα κλάδο με το όνομα `contrib` και εφαρμόσουμε αυτά τα επιθέματα εκεί, μπορούμε να τρέξουμε:
231
+
Για παράδειγμα, εάν ο συνεισφέρων μας στείλει δύο επιθέματα και δημιουργήσουμε έναν κλάδο με το όνομα `contrib` και εφαρμόσουμε αυτά τα επιθέματα εκεί, μπορούμε να τρέξουμε:
232
232
233
233
[source,console]
234
234
-----
@@ -330,7 +330,7 @@ image::images/merging-workflows-5.png[Μετά τη δημοσιοποίηση
330
330
331
331
Με αυτόν τον τρόπο, όταν κάποιος κλωνοποιεί το αποθετήριο του έργου μας, μπορεί είτε να μεταβεί στον κλάδο `master`, να χτίσει την πιο πρόσφατη ευσταθή έκδοση και να συμβαδίζει με αυτήν εύκολα, είτε να μεταβεί στον κλάδο `develop`, που περιέχει τις πιο πρόσφατες εξελίξεις.
332
332
Μπορούμε επίσης να επεκτείνουμε αυτό το μοντέλο και να έχουμε έναν κλάδο ολοκλήρωσης `integrate` στο οποίο όλες οι εργασίες συγχωνεύονται.
333
-
Στη συνέχεια, όταν το codebase σε αυτόν τον κλάδο είναι ευσταθές και περνάει τις δοκιμές, μπορούμε να το συγχωνεύσουμε σε ένα κλάδο `develop`· και όταν και αυτός έχει αποδειχθεί ευσταθής για κάποιο χρονικό διάστημα, τον ταχυπροωθούμε στον κύριο κλάδο μας.
333
+
Στη συνέχεια, όταν το codebase σε αυτόν τον κλάδο είναι ευσταθές και περνάει τις δοκιμές, μπορούμε να το συγχωνεύσουμε σε έναν κλάδο `develop`· και όταν και αυτός έχει αποδειχθεί ευσταθής για κάποιο χρονικό διάστημα, τον ταχυπροωθούμε στον κύριο κλάδο μας.
334
334
335
335
===== Ροές εργασίας με συγχωνεύσεις μακρόβιων κλάδων
image::images/large-merges-2.png[Η συγχώνευση ενσωμάτωσε θεματικούς κλάδους σε μακρόβιους ενοποιητικούς κλάδους.]
353
353
354
354
Όταν ένας θεματικός κλάδος έχει τελικά συγχωνευτεί στον `master`, αφαιρείται από το αποθετήριο.
355
-
Το έργο Git διαθέτει επίσης ένα κλάδο `maint` που αποσχίζεται από την τελευταία δημόσια έκδοση (release) για να παρέχει επιθέματα επαναφοράς (portback patches) για την περίπτωση που απαιτείται έκδοση συντήρησης.
355
+
Το έργο Git διαθέτει επίσης έναν κλάδο `maint` που αποσχίζεται από την τελευταία δημόσια έκδοση (release) για να παρέχει επιθέματα επαναφοράς (portback patches) για την περίπτωση που απαιτείται έκδοση συντήρησης.
356
356
Έτσι, όταν κλωνοποιούμε το αποθετήριο Git, έχουμε τέσσερις κλάδους στους οποίους μπορούμε να μεταβούμε για να αξιολογήσουμε το έργο σε διαφορετικά στάδια ανάπτυξης, ανάλογα με το πόσο αιχμής θέλουμε να είμαστε ή πώς θέλουμε να συνεισφέρουμε· και ο συντηρητής έχει μια δομημένη ροή εργασίας για να τους βοηθήσει να ελέγξουν νέες συνεισφορές.
Ο άλλος τρόπος για να μετακινήσουμε εργασία που εισάγεται από τον ένα κλάδο στον άλλο είναι η ανθολόγησή (cherry-pick) του.
368
+
Ο άλλος τρόπος για να μετακινήσουμε εργασία που εισάγεται από τον έναν κλάδο στον άλλο είναι η ανθολόγησή (cherry-pick) του.
369
369
Η ανθολόγηση στο Git είναι σαν μια επανατοποθέτηση μίας μόνο υποβολής.
370
370
Παίρνει το επίθεμα που εισήχθη σε μια υποβολή και προσπαθεί να το ξαναεφαρμόσει στον κλάδο στον οποίο βρισκόμαστε αυτήν τη στιγμή.
371
371
Η ανθολόγηση είναι χρήσιμη εάν έχουμε αρκετές υποβολές σε έναν θεματικό κλάδο και θέλουμε να ενσωματώσουμε μόνο μία από αυτές ή εάν έχουμε μόνο μία υποβολή σε έναν θεματικό κλάδο και προτιμάμε να την ανθολογήσουμε αντί να την επανατοποθετήσουμε.
Τώρα ο συνεισφέρων μπορεί να δει τι πρέπει να κάνει για να γίνει αποδεκτή η αλλαγή του. Ευτυχώς αυτό είναι επίσης πολύ απλό να γίνει. Ενώ μέσω ηλεκτρονικού ταχυδρομείου θα χρειαζόταν να αναιρέσουμε τη σειρά αλλαγών και να την ξαναϋποβάλουμε εκ νέου στη ηλεκτρονική λίστα αλληλογραφίας, με το GitHub απλά ξαναϋποβάλουμε τον θεματικό κλάδο και τον ξαναωθούμε.
155
+
Τώρα ο συνεισφέρων μπορεί να δει τι πρέπει να κάνει για να γίνει αποδεκτή η αλλαγή του. Ευτυχώς αυτό είναι επίσης πολύ απλό να γίνει. Ενώ μέσω ηλεκτρονικού ταχυδρομείου θα χρειαζόταν να αναιρέσουμε τη σειρά αλλαγών και να την ξαναϋποβάλουμε εκ νέου στην ηλεκτρονική λίστα αλληλογραφίας, με το GitHub απλά ξαναϋποβάλουμε τον θεματικό κλάδο και τον ξαναωθούμε.
156
156
157
157
Αν ο συνεισφέρων το κάνει αυτό, τότε ο κάτοχος του έργου θα ενημερωθεί ξανά και όταν επισκεφθεί τη σελίδα θα δει ότι το σχόλιό του έχει ληφθεί υπόψη. Μάλιστα, επειδή έχει αλλάξει μια γραμμή κώδικα στην οποία υπήρχε σχόλιο, το GitHub το παρατηρεί ότι και καταρρέει την παρωχημένη διαφορά.
0 commit comments