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
+32-33Lines changed: 32 additions & 33 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,15 +4,15 @@
4
4
(((Mercurial)))
5
5
Το σύμπαν των DVCS είναι μεγαλύτερο από το Git.
6
6
Στην πραγματικότητα, υπάρχουν πολλά άλλα συστήματα σε αυτό το σύμπαν, το καθένα με τη δική του οπτική για το πώς γίνεται σωστά ο κατανεμημένος έλεγχος εκδόσεων.
7
-
Πέρα από το Git, το πιο δημοφιλές είναι το Mercurial, και μάλιστα και δύο συστήματα είναι πολύ παρόμοια από πολλές απόψεις.
7
+
Πέρα από το Git, το πιο δημοφιλές είναι το Mercurial, και μάλιστα και τα δύο συστήματα είναι πολύ παρόμοια από πολλές απόψεις.
8
8
9
-
Τα καλά νέα, εφόσον προτιμάμε τη συμπεριφορά από την πλευρά του πελάτη του Git αλλά εργαζόμαστε με ένα έργο του οποίου ο πηγαίος κώδικας ελέγχεται με το Mercurial, είναι ότι υπάρχει ένας τρόπος να χρησιμοποιήσουμε το Git ως πελάτη για ένα αποθετήριο που φιλοξενείται από Mercurial.
9
+
Τα καλά νέα, εφόσον προτιμάμε τη συμπεριφορά του Git από την πλευρά του πελάτη αλλά εργαζόμαστε με ένα έργο του οποίου ο πηγαίος κώδικας ελέγχεται με το Mercurial, είναι ότι υπάρχει ένας τρόπος να χρησιμοποιήσουμε το Git ως πελάτη για ένα αποθετήριο που φιλοξενείται από Mercurial.
10
10
Δεδομένου ότι ο τρόπος με τον οποίο το Git μιλάει με αποθετήρια διακομιστών μέσω απομακρυσμένων, δεν πρέπει να αποτελεί έκπληξη ότι αυτή η γέφυρα έχει υλοποιηθεί ως απομακρυσμένος βοηθός.
11
-
Το όνομα του έργου είναι `git-remote-hg` και μπορεί να βρεθεί στη https://github.com/felipec/git-remote-hg[].
11
+
Το όνομα του έργου είναι git-remote-hg και μπορεί να βρεθεί στη https://github.com/felipec/git-remote-hg[^].
12
12
13
-
===== `git-remote-hg`
13
+
===== git-remote-hg
14
14
15
-
Πρώτα, πρέπει να εγκαταστήσουμε το `git-remote-hg`.
15
+
Πρώτα, πρέπει να εγκαταστήσουμε το git-remote-hg.
16
16
Αυτό ουσιαστικά γίνεται αν απλά αντιγράψουμε το αρχείο κάπου στη διαδρομή μας, όπως παρακάτω:
…με την προϋπόθεση ότι ο `~/bin` είναι στο `$PATH` μας.
26
-
η `git-remote-hg` έχει άλλη μία εξάρτηση: τη βιβλιοθήκη Python του Mercurial.
25
+
…με την προϋπόθεση ότι ο `~/bin` είναι στο `$PATH` μας.
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
-
Μεταβαίνουμε στη διεύθυνση http://mercurial.selenic.com/[] και τον εγκαταθιστούμε αν δεν το έχουμε ήδη κάνει.
37
+
Μεταβαίνουμε στη διεύθυνση https://www.mercurial-scm.org/[^] και τον εγκαταθιστούμε αν δεν το έχουμε ήδη κάνει.
38
38
39
39
Τώρα είμαστε έτοιμοι να παίξουμε μπάλα.
40
40
Το μόνο που χρειαζόμαστε είναι ένα αποθετήριο Mercurial στο οποίο να έχουμε δικαίωμα ώθησης.
41
-
Ευτυχώς, κάθε αποθετήριο Mercurial μπορεί να ενεργήσει με αυτόν τον τρόπο, οπότε θα χρησιμοποιήσουμε μόνο το αποθετήριο `hello world` που χρησιμοποιούν όλοι για να μάθουν το Mercurial:
41
+
Ευτυχώς, κάθε αποθετήριο Mercurial μπορεί να ενεργήσει με αυτόν τον τρόπο, οπότε θα χρησιμοποιήσουμε μόνο το αποθετήριο "hello world" που χρησιμοποιούν όλοι για να μάθουν το Mercurial:
* 65bb417 Create a standard "hello, world" program
61
+
* 65bb417 Create a standard 'hello, world' program
62
62
----
63
63
64
64
Παρατηρούμε ότι η εργασία με ένα αποθετήριο Mercurial χρησιμοποιεί την τυπική εντολή `git clone`.
65
-
Αυτό συμβαίνει επειδή το `git-remote-hg` λειτουργεί σε αρκετά χαμηλό επίπεδο, χρησιμοποιώντας έναν παρόμοιο μηχανισμό με αυτόν που είναι υλοποιημένο το πρωτόκολλο HTTP/S του Git (με απομακρυσμένους βοηθούς).
65
+
Αυτό συμβαίνει επειδή το git-remote-hg λειτουργεί σε αρκετά χαμηλό επίπεδο, χρησιμοποιώντας έναν παρόμοιο μηχανισμό με αυτόν που είναι υλοποιημένο το πρωτόκολλο HTTP/S του Git (με απομακρυσμένους βοηθούς).
66
66
Δεδομένου ότι τα Git και Mercurial έχουν σχεδιαστεί και τα δύο ώστε κάθε πελάτης να έχει ένα πλήρες αντίγραφο του ιστορικού του αποθετηρίου, αυτή η εντολή δημιουργεί έναν πλήρη κλώνο, συμπεριλαμβανομένου ολόκληρου του ιστορικού του έργου και μάλιστα το κάνει αρκετά γρήγορα.
67
67
68
68
Η εντολή `log` δείχνει δύο υποβολές, με την πιο πρόσφατη να δείχνεται από πληθώρα αναφορών.
Το `git-remote-h`g προσπαθεί να κάνει το ιδίωμα πιο Git-οειδές, αλλά εσωτερικά διαχειρίζεται την εννοιολογική απεικόνιση μεταξύ δύο ελαφρώς διαφορετικών συστημάτων.
94
+
Το git-remote-hg προσπαθεί να κάνει το ιδίωμα πιο Git-οειδές, αλλά εσωτερικά διαχειρίζεται την εννοιολογική απεικόνιση μεταξύ δύο ελαφρώς διαφορετικών συστημάτων.
95
95
Ο κατάλογος `refs/hg` είναι εκεί όπου αποθηκεύονται οι πραγματικές απομακρυσμένες αναφορές.
96
-
Για παράδειγμα, το αρχείο `refs/hg/origin/branches/default` είναι ένα αρχείο ref του Git που περιέχει τον SHA-1 που αρχίζει με το "`ac7955c`".
96
+
Για παράδειγμα, το αρχείο `refs/hg/origin/branches/default` είναι ένα αρχείο αναφοράς του Git που περιέχει τον SHA-1 που αρχίζει με το "`ac7955c`", που είναι η υποβολή που δείχνει το `master`
97
97
Έτσι, ο κατάλογος `refs/hg` είναι σαν ένα ψεύτικο `refs/remotes/origin`, αλλά έχει την πρόσθετη διάκριση μεταξύ σελιδοδεικτών και κλάδων.
98
98
99
99
Το αρχείο `notes/hg` είναι το σημείο εκκίνησης για τον τρόπο με τον οποίο το git-remote-hg απεικονίζει τους αριθμούς SHA-1 των υποβολών Git σε ID συνόλων αλλαγών του Mercurial.
@@ -121,12 +121,12 @@ $ git cat-file -p ac9117f
121
121
122
122
Επομένως, το `refs/notes/hg` δείχνει σε ένα δέντρο, το οποίο στη βάση δεδομένων αντικειμένων του Git είναι μια λίστα άλλων αντικειμένων με ονόματα.
123
123
Το `git ls-tree` εξάγει τα δικαιώματα πρόσβασης, τον τύπο, το hash αντικειμένου και το όνομα αρχείου για τα στοιχεία μέσα σε ένα δέντρο.
124
-
Μόλις σκάψουμε σε ένα από τα στοιχεία του δέντρου, διαπιστώνουμε ότι μέσα του υπάρχει ένα blob που ονομάζεται "`ac9117f`" (ο αριθμός SHA-1 της υποβολής στην οποία δείχνει ο 'master`), με τα περιεχόμενα "`0a04b98`" (που είναι το αναγνωριστικό του συνόλου αλλαγών του Mercurial στην κορυφή του κλάδου `default`.
124
+
Μόλις σκάψουμε σε ένα από τα στοιχεία του δέντρου, διαπιστώνουμε ότι μέσα του υπάρχει ένα blob που ονομάζεται "`ac9117f`" (ο αριθμός SHA-1 της υποβολής στην οποία δείχνει ο 'master`), με τα περιεχόμενα "`0a04b98`" (που είναι το αναγνωριστικό του συνόλου αλλαγών του Mercurial στην κορυφή του κλάδου `default`).
125
125
126
126
Τα καλά νέα είναι ότι δεν χρειάζεται να ανησυχούμε για όλα αυτά.
127
127
Η τυπική ροή εργασίας δεν θα είναι πολύ διαφορετική από αυτήν με ένα απομακρυσμένο αποθετήριο Git.
128
128
129
-
Υπάρχει ένα ακόμα πράγμα που πρέπει να εξετάσουμε πριν συνεχίσουμε: τα αγνοεί.
129
+
Υπάρχει ένα ακόμα πράγμα που πρέπει να εξετάσουμε πριν συνεχίσουμε: τις παραλείψεις (ignores).
130
130
Το Mercurial και το Git χρησιμοποιούν έναν πολύ παρόμοιο μηχανισμό για αυτό, αλλά είναι πιθανό ότι δεν θέλουμε πραγματικά να υποβάλουμε ένα αρχείο `.gitignore` σε ένα αποθετήριο Mercurial.
131
131
Ευτυχώς, το Git έχει έναν τρόπο να αγνοήσει αρχεία που είναι τοπικά σε ένα αποθετήριο στον δίσκο μας και η μορφή του Mercurial είναι συμβατή με το Git, οπότε απλά πρέπει να το αντιγράψουμε:
* 65bb417 Create a standard "hello, world" program
171
+
* 65bb417 Create a standard 'hello, world' program
172
172
----
173
173
174
174
Εφόσον χρησιμοποιήσαμε τη σημαία `--all`, βλέπουμε τις αναφορές "`notes`" που χρησιμοποιούνται εσωτερικά από το git-remote-hg, αλλά μπορούμε να τις αγνοήσουμε.
Το σύνολο των αλλαγών _2_ έγινε από το Mercurial και τα σύνολα αλλαγών _3_ και _4_ έγιναν από το `git-remote-hg`, με ώθηση των υποβολών που έγιναν με το Git.
231
+
Το σύνολο των αλλαγών _2_ έγινε από το Mercurial και τα σύνολα αλλαγών _3_ και _4_ έγιναν από το git-remote-hg, με ώθηση των υποβολών που έγιναν με το Git.
Παρατηρούμε τη νέα ετικέτα `[featureA]` στην αναθεώρηση 5.
@@ -346,7 +346,7 @@ o changeset: 5:bd5ac26f11f9
346
346
347
347
Το όνομα κλάδου "`permanent`" καταγράφηκε με το σύνολο αλλαγών _7_.
348
348
349
-
Από την πλευρά του Git, η συνεργασία με οποιοδήποτε από αυτά τα στυλ κλάδου είναι ίδια: απλώς ελέγχουμε, διεκπεραιώνουμε, ανακτούμε, συγχωνεύουμε, έλκουμε και ωθούμε όπως θα κάναμε κανονικά.
349
+
Από την πλευρά του Git, η συνεργασία με οποιοδήποτε από αυτά τα στυλ κλάδου είναι ίδια: απλώς ελέγχουμε, υποβάλουμε, ανακτούμε, συγχωνεύουμε, έλκουμε και ωθούμε όπως θα κάναμε κανονικά.
350
350
Ένα πράγμα που πρέπει να ξέρουμε είναι ότι το Mercurial δεν υποστηρίζει την επανεγγραφή ιστορικού και μόνο προσθέτει σε αυτό.
351
351
Ακολουθεί η εμφάνιση του αποθετηρίου μας Mercurial μετά από μια διαδραστική αλλαγή βάσης και μια εξαναγκασμένη ώθηση:
Τα Git και Mercurial είναι αρκετά παρόμοια ώστε η συνεργασία μεταξύ τους είναι αρκετά ανώδυνη.
397
397
Εάν αποφύγουμε να αλλάξουμε το ιστορικό που έχει αφήσει το μηχάνημά μας (όπως συνήθως συνιστάται), ίσως να μην γνωρίζουμε καν ότι το άλλο άκρο είναι Mercurial.
0 commit comments