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
Copy file name to clipboardExpand all lines: book/09-git-and-other-scms/sections/client-hg.asc
+25-27Lines changed: 25 additions & 27 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,16 +4,16 @@
4
4
(((Mercurial)))
5
5
Το σύμπαν των DVCS είναι μεγαλύτερο από το Git.
6
6
Στην πραγματικότητα, υπάρχουν πολλά άλλα συστήματα σε αυτό το σύμπαν, το καθένα με τη δική του οπτική για το πώς γίνεται σωστά ο κατανεμημένος έλεγχος εκδόσεων.
7
-
Πέρα από το Git, το πιο δημοφιλές είναι το Mercurial, και μάλιστα και τα δύο είναι πολύ παρόμοια από πολλές απόψεις.
7
+
Πέρα από το Git, το πιο δημοφιλές είναι το Mercurial, και μάλιστα και δύο συστήματα είναι πολύ παρόμοια από πολλές απόψεις.
8
8
9
-
Τα καλά νέα, αν προτιμάτε τη συμπεριφορά από την πλευρά του πελάτη του Git αλλά εργαζόμαστε με ένα έργο του οποίου ο πηγαίος κώδικας ελέγχεται με το Mercurial, είναι ότι υπάρχει ένας τρόπος να χρησιμοποιήσουμε το Git ως πελάτη για ένα αποθετήριο που φιλοξενείται από το Mercurial.
10
-
Δεδομένου ότι ο τρόπος με τον οποίο ο Git μιλάει με αποθετήρια διακομιστών μέσω απομακρυσμένων αποθετηρίων, δεν πρέπει να αποτελεί έκπληξη ότι αυτή η γέφυρα έχει υλοποιηθεί ως απομακρυσμένος βοηθός.
9
+
Τα καλά νέα, εφόσον προτιμάμε τη συμπεριφορά από την πλευρά του πελάτη του Git αλλά εργαζόμαστε με ένα έργο του οποίου ο πηγαίος κώδικας ελέγχεται με το Mercurial, είναι ότι υπάρχει ένας τρόπος να χρησιμοποιήσουμε το Git ως πελάτη για ένα αποθετήριο που φιλοξενείται από Mercurial.
10
+
Δεδομένου ότι ο τρόπος με τον οποίο ο Git μιλάει με αποθετήρια διακομιστών μέσω XXX απομακρυσμένων XXX, δεν πρέπει να αποτελεί έκπληξη ότι αυτή η γέφυρα έχει υλοποιηθεί ως απομακρυσμένος βοηθός.
11
11
Το όνομα του έργου είναι `git-remote-hg` και μπορεί να βρεθεί στη https://github.com/felipec/git-remote-hg[].
12
12
13
13
===== `git-remote-hg`
14
14
15
15
Πρώτα, πρέπει να εγκαταστήσουμε το `git-remote-hg`.
16
-
Αυτό ουσιαστικά γίνεται αν απλά αντιγράψουμε το αρχείο κάπου στο μονοπάτι μας, όπως παρακάτω:
16
+
Αυτό ουσιαστικά γίνεται αν απλά αντιγράψουμε το αρχείο κάπου στη διαδρομή μας, όπως παρακάτω:
… με την προϋπόθεση ότι ο `~/bin` είναι στο `$PATH` μας.
26
-
η `git-remote-hg` έχει άλλη μία εξάρτηση: τη βιβλιοθήκη της Python του Mercurial.
26
+
η `git-remote-hg` έχει άλλη μία εξάρτηση: τη βιβλιοθήκη Python του Mercurial.
27
27
Αν έχουμε εγκατεστημένη την Python, αυτό γίνεται πανεύκολα:
28
28
29
29
[source,console]
30
30
----
31
31
$ pip install mercurial
32
32
----
33
33
34
-
(Εάν δεν έχουμε εγκαταστήσει την Python, επισκεφτόμαστε τη διεύθυνση https://www.python.org/[] για να την κατεβάσουμε και εγκαταστήσουμε.)
34
+
(Εάν δεν έχουμε εγκαταστήσει την Python, επισκεφτόμαστε τη διεύθυνση https://www.python.org/[] για να την κατεβάσουμε και να την εγκαταστήσουμε.)
35
35
36
36
Το τελευταίο πράγμα που θα χρειαστούμε είναι ο πελάτης του Mercurial.
37
37
Μεταβαίνουμε στη διεύθυνση http://mercurial.selenic.com/[] και τον εγκαταθιστούμε αν δεν το έχουμε ήδη κάνει.
38
38
39
-
Τώρα είμαστε έτοιμοι να ροκάρουμε.
40
-
Το μόνο που χρειαζόμαστε είναι ένα αποθετήριο Mercurial στο οποίο μπορούμε να ωθήσουμε.
39
+
Τώρα είμαστε έτοιμοι να παίξουμε μπάλα.
40
+
Το μόνο που χρειαζόμαστε είναι ένα αποθετήριο Mercurial στο οποίο να έχουμε δικαίωμα ώθησης.
41
41
Ευτυχώς, κάθε αποθετήριο Mercurial μπορεί να ενεργήσει με αυτόν τον τρόπο, οπότε θα χρησιμοποιήσουμε μόνο το αποθετήριο ``hello world'' που χρησιμοποιούν όλοι για να μάθουν το Mercurial:
Τώρα που έχουμε έναν κατάλληλο αποθετήριο ``από την πλευρά του διακομιστή'', μπορούμε να εξετάσουμε μια τυπική ροή εργασίας.
51
-
Όπως θα δούμε, αυτά τα δύο συστήματα είναι αρκετά παρόμοια, συνεπώς δεν υπάρχει μεγάλη τριβή.
51
+
Όπως θα δούμε, αυτά τα δύο συστήματα είναι αρκετά παρόμοια, συνεπώς δεν υπάρχουν πολλές προστριβές.
52
52
53
53
Όπως πάντα στο Git, αρχικά κλωνοποιούμε:
54
54
@@ -91,13 +91,13 @@ $ tree .git/refs
91
91
9 directories, 5 files
92
92
----
93
93
94
-
Το git-remote-hg προσπαθεί να κάνει το ιδίωμα πιο Git-ίστικο, αλλά εσωτερικά διαχειρίζεται την εννοιολογική απεικόνιση μεταξύ δύο ελαφρώς διαφορετικών συστημάτων.
94
+
Το `git-remote-h`g προσπαθεί να κάνει το ιδίωμα πιο Git-οειδές, αλλά εσωτερικά διαχειρίζεται την εννοιολογική απεικόνιση μεταξύ δύο ελαφρώς διαφορετικών συστημάτων.
95
95
Ο κατάλογος `refs/hg` είναι εκεί όπου αποθηκεύονται οι πραγματικές απομακρυσμένες αναφορές.
96
96
Για παράδειγμα, το αρχείο `refs/hg/origin/branches/default` είναι ένα αρχείο ref του Git που περιέχει τον SHA-1 που αρχίζει με το `ac7955c`.
97
97
Έτσι, ο κατάλογος `refs/hg` είναι σαν ένα ψεύτικο `refs/remotes/origin`, αλλά έχει την πρόσθετη διάκριση μεταξύ σελιδοδεικτών και κλάδων.
98
98
99
99
Το αρχείο `notes/hg` είναι το σημείο εκκίνησης για τον τρόπο με τον οποίο το git-remote-hg απεικονίζει τους αριθμούς SHA-1 των υποβολών Git σε ID συνόλων αλλαγών του Mercurial.
100
-
Ας το εξερευνήσουμε λίγο:
100
+
Ας το εξερευνήσουμε αυτό λίγο:
101
101
102
102
[source,console]
103
103
----
@@ -120,14 +120,14 @@ $ git cat-file -p ac9117f
120
120
----
121
121
122
122
Επομένως, το `refs/notes/hg` δείχνει σε ένα δέντρο, το οποίο στη βάση δεδομένων αντικειμένων του Git είναι μια λίστα άλλων αντικειμένων με ονόματα.
123
-
Το `git ls-tree` εξάγει τη λειτουργία, τον τύπο, το hash αντικειμένου και το όνομα αρχείου για τα στοιχεία μέσα σε ένα δέντρο.
123
+
Το `git ls-tree` εξάγει τα δικαιώματα πρόσβασης, τον τύπο, το hash αντικειμένου και το όνομα αρχείου για τα στοιχεία μέσα σε ένα δέντρο.
124
124
Μόλις σκάψουμε σε ένα από τα στοιχεία του δέντρου, διαπιστώνουμε ότι μέσα του υπάρχει ένα blob που ονομάζεται `ac9117f` (ο αριθμός SHA-1 της υποβολής στην οποία δείχνει ο 'master`), με τα περιεχόμενα `0a04b98` (που είναι το αναγνωριστικό του συνόλου αλλαγών του Mercurial στην κορυφή του κλάδου `default`.
125
125
126
126
Τα καλά νέα είναι ότι δεν χρειάζεται να ανησυχούμε για όλα αυτά.
127
127
Η τυπική ροή εργασίας δεν θα είναι πολύ διαφορετική από αυτήν με ένα απομακρυσμένο αποθετήριο Git.
128
128
129
129
Υπάρχει ένα ακόμα πράγμα που πρέπει να εξετάσουμε πριν συνεχίσουμε: τα αγνοεί.
130
-
Το Mercurial και το Git χρησιμοποιούν έναν πολύ παρόμοιο μηχανισμό για αυτό, αλλά είναι πιθανό ότι δεν θέλουμε πραγματικά να υποβάλουμε ένα αρχείο .gitignore σε ένα αποθετήριο Mercurial.
130
+
Το Mercurial και το Git χρησιμοποιούν έναν πολύ παρόμοιο μηχανισμό για αυτό, αλλά είναι πιθανό ότι δεν θέλουμε πραγματικά να υποβάλουμε ένα αρχείο `.gitignore` σε ένα αποθετήριο Mercurial.
131
131
Ευτυχώς, το Git έχει έναν τρόπο να αγνοήσει αρχεία που είναι τοπικά σε ένα αποθετήριο στον δίσκο μας και η μορφή του Mercurial είναι συμβατή με το Git, οπότε απλά πρέπει να το αντιγράψουμε:
Ας υποθέσουμε ότι έχουμε κάνει κάποια εργασία και κάναμε κάποιες υποβολές στον κλάδο `master` και είμαστε έτοιμοι να τις ωθήσουμε στο απομακρυσμένο αποθετήριο.
143
-
Εδώ φαίνεται το αποθετήριο μας:
142
+
Ας υποθέσουμε ότι έχουμε κάνει κάποια εργασία και κάποιες υποβολές στον κλάδο `master` και είμαστε έτοιμοι να τις ωθήσουμε στο απομακρυσμένο αποθετήριο.
Εφόσον χρησιμοποιήσαμε τη σημαία `--all`, βλέπουμε τις αναφορές ``notes'' που χρησιμοποιούνται εσωτερικά από το `git-remote-hg`, αλλά μπορούμε να τις αγνοήσουμε.
175
-
Τα υπόλοιπα είναι όπως τα περιμέναμε. Η αρχή `origin/master` έχει προχωρήσει με μία υποβολή και η ιστορία μας έχει αποκλίνει τώρα.
175
+
Τα υπόλοιπα είναι όπως τα αναμέναμε· ο `origin/master` έχει προχωρήσει κατά μία υποβολή και το ιστορικό μας έχει αποκλίνει τώρα.
176
176
Σε αντίθεση με τα άλλα συστήματα με τα οποία εργαζόμαστε σε αυτό το κεφάλαιο, το Mercurial είναι ικανό να χειριστεί τις συγχωνεύσεις, οπότε δεν πρόκειται να κάνουμε τίποτα φανταχτερό.
177
177
178
178
[source,console]
@@ -204,7 +204,7 @@ To hg::/tmp/hello
204
204
----
205
205
206
206
Αυτό ήταν!
207
-
Εάν ρίξουμε μια ματιά στο αποθετήριο Mercurial, θα δούμε ότι έκανε αυτό που περιμέναμε:
207
+
Εάν ρίξουμε μια ματιά στο αποθετήριο Mercurial, θα δούμε ότι έκανε αυτό που αναμέναμε:
Στο Mercurial, αυτό το είδος μίας αναφοράς ονομάζεται ``σελιδοδείκτης'' και συμπεριφέρεται με τον ίδιο τρόπο όπως ένας κλάδος Git.
237
237
238
238
Η αντίληψη του Mercurial περί ``κλάδου'' είναι πιο βαριά.
239
-
Ο κλάδος στο οποίο πραγματοποιείται ένα σύνολο αλλαγών καταγράφεται _με το σύνολο αλλαγών_, που σημαίνει ότι θα βρίσκεται πάντα στο ιστορικό του αποθετηρίου.
239
+
Ο κλάδος στο οποίο πραγματοποιείται ένα σύνολο αλλαγών καταγράφεται _με το σύνολο αλλαγών_ (changeset), που σημαίνει ότι θα βρίσκεται πάντα στο ιστορικό του αποθετηρίου.
240
240
Ακολουθεί ένα παράδειγμα υποβολής που έγινε στον κλάδο `develop`:
241
241
242
242
[source,console]
@@ -251,7 +251,7 @@ summary: More documentation
251
251
----
252
252
253
253
Παρατηρούμε τη γραμμή που αρχίζει με ``branch''.
254
-
Το Git δεν μπορεί να αναπαράγει αυτό το πράγμα (και ούτε χρειάζεται, αφού και οι δύο τύποι κλάδων μπορούν να αναπαρασταθούν ως ref του Git), αλλά το `git-remote-hg` πρέπει να κατανοήσει τη διαφορά, επειδή το Mercurial ενδιαφέρεται.
254
+
Το Git δεν μπορεί να αναπαράγει αυτό το πράγμα (και ούτε χρειάζεται, αφού και οι δύο τύποι κλάδων μπορούν να αναπαρασταθούν ως ref του Git), αλλά το `git-remote-hg` πρέπει να κατανοήσει τη διαφορά, επειδή το Mercurial πρέπει να ξέρει.
255
255
256
256
Η δημιουργία των σελιδοδεικτών στο Mercurial είναι τόσο εύκολη όσο και η δημιουργία κλάδων στο Git.
Παρατηρούμε τη νέα ετικέτα `[featureA]` στην αναθεώρηση 5.
299
-
Αυτά λειτουργούν ακριβώς όπως οι κλάδοι Git στην πλευρά του Git, με μια εξαίρεση: δεν μπορούμε να διαγράψουμε ένα σελιδοδείκτη από την πλευρά του Git (αυτό είναι ένας περιορισμός των απομακρυσμένων βοηθών).
299
+
Αυτά λειτουργούν ακριβώς όπως οι κλάδοι Git στην πλευρά του Git, με μια εξαίρεση: δεν μπορούμε να διαγράψουμε έναν σελιδοδείκτη από την πλευρά του Git (αυτός είναι ένας περιορισμός των απομακρυσμένων βοηθών).
300
300
301
-
Μπορούμε να εργαστούμε σε ένα κλάδο ``βαρέων βαρών'' του Mercurial επίσης: απλά βάζουμε έναν κλάδο στον ονοματοχώρο `branches`:
301
+
Επίσης μπορούμε να εργαστούμε σε ένα κλάδο ``βαρέων βαρών'' του Mercurial: απλά βάζουμε έναν κλάδο στον ονοματοχώρο `branches`:
302
302
303
303
[source,console]
304
304
----
@@ -344,13 +344,11 @@ o changeset: 5:bd5ac26f11f9
344
344
[...]
345
345
----
346
346
347
-
The branch name ``permanent'' was recorded with the changeset marked _7_.
348
-
349
347
Το όνομα κλάδου `permanent` καταγράφηκε με το σύνολο αλλαγών _7_.
350
348
351
349
Από την πλευρά του Git, η συνεργασία με οποιοδήποτε από αυτά τα στυλ κλάδου είναι ίδια: απλώς ελέγχουμε, διεκπεραιώνουμε, ανακτούμε, συγχωνεύουμε, έλκουμε και ωθούμε όπως θα κάναμε κανονικά.
352
350
Ένα πράγμα που πρέπει να ξέρουμε είναι ότι το Mercurial δεν υποστηρίζει την επανεγγραφή ιστορικού και μόνο προσθέτει σε αυτό.
353
-
Ακολουθεί η εμφάνιση του αποθετηρίου μας Mercurial μετά από μια διαδραστική επανατοποθέτηση και μια επιβεβλιμένη ώθηση:
351
+
Ακολουθεί η εμφάνιση του αποθετηρίου μας Mercurial μετά από μια διαδραστική επανατοποθέτηση και μια επιβεβλημένη ώθηση:
Οι αλλαγές _8_, _9_ και _10_ έχουν δημιουργηθεί και ανήκουν στον κλάδο `permanent`, αλλά τα παλιά σύνολα αλλαγών είναι ακόμα εκεί.
393
-
Αυτό μπορεί να επιφέρει *πολλη* σύγχυση στους συνεργάτες μας που χρησιμοποιούν Mercurial, οπότε προσπαθούμε να το αποφύγουμε.
391
+
Αυτό μπορεί να επιφέρει *πολλή* σύγχυση στους συνεργάτες μας που χρησιμοποιούν Mercurial, οπότε προσπαθούμε να το αποφύγουμε.
394
392
395
393
396
394
===== Ανακεφαλαίωση Mercurial
397
395
398
-
Τα Git και Mercurial είναι αρκετά παρόμοια ώστε η εργασία πέρα από το σύνορό τους είναι αρκετά ανώδυνη.
396
+
Τα Git και Mercurial είναι αρκετά παρόμοια ώστε η συνεργασία μεταξύ τους είναι αρκετά ανώδυνη.
399
397
Εάν αποφύγουμε να αλλάξουμε το ιστορικό που έχει αφήσει το μηχάνημά μας (όπως συνήθως συνιστάται), ίσως να μην γνωρίζουμε καν ότι το άλλο άκρο είναι Mercurial.
0 commit comments