Skip to content

Commit 0c5aca0

Browse files
committed
update 09-github module files
1 parent d179a8a commit 0c5aca0

File tree

7 files changed

+172
-136
lines changed

7 files changed

+172
-136
lines changed

book/09-git-and-other-scms/sections/client-hg.asc

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
(((Mercurial)))
55
Το σύμπαν των DVCS είναι μεγαλύτερο από το Git.
66
Στην πραγματικότητα, υπάρχουν πολλά άλλα συστήματα σε αυτό το σύμπαν, το καθένα με τη δική του οπτική για το πώς γίνεται σωστά ο κατανεμημένος έλεγχος εκδόσεων.
7-
Πέρα από το Git, το πιο δημοφιλές είναι το Mercurial, και μάλιστα και δύο συστήματα είναι πολύ παρόμοια από πολλές απόψεις.
7+
Πέρα από το Git, το πιο δημοφιλές είναι το Mercurial, και μάλιστα και τα δύο συστήματα είναι πολύ παρόμοια από πολλές απόψεις.
88

9-
Τα καλά νέα, εφόσον προτιμάμε τη συμπεριφορά από την πλευρά του πελάτη του Git αλλά εργαζόμαστε με ένα έργο του οποίου ο πηγαίος κώδικας ελέγχεται με το Mercurial, είναι ότι υπάρχει ένας τρόπος να χρησιμοποιήσουμε το Git ως πελάτη για ένα αποθετήριο που φιλοξενείται από Mercurial.
9+
Τα καλά νέα, εφόσον προτιμάμε τη συμπεριφορά του Git από την πλευρά του πελάτη αλλά εργαζόμαστε με ένα έργο του οποίου ο πηγαίος κώδικας ελέγχεται με το Mercurial, είναι ότι υπάρχει ένας τρόπος να χρησιμοποιήσουμε το Git ως πελάτη για ένα αποθετήριο που φιλοξενείται από Mercurial.
1010
Δεδομένου ότι ο τρόπος με τον οποίο το Git μιλάει με αποθετήρια διακομιστών μέσω απομακρυσμένων, δεν πρέπει να αποτελεί έκπληξη ότι αυτή η γέφυρα έχει υλοποιηθεί ως απομακρυσμένος βοηθός.
11-
Το όνομα του έργου είναι `git-remote-hg` και μπορεί να βρεθεί στη https://github.com/felipec/git-remote-hg[].
11+
Το όνομα του έργου είναι git-remote-hg και μπορεί να βρεθεί στη https://github.com/felipec/git-remote-hg[^].
1212

13-
===== `git-remote-hg`
13+
===== git-remote-hg
1414

15-
Πρώτα, πρέπει να εγκαταστήσουμε το `git-remote-hg`.
15+
Πρώτα, πρέπει να εγκαταστήσουμε το git-remote-hg.
1616
Αυτό ουσιαστικά γίνεται αν απλά αντιγράψουμε το αρχείο κάπου στη διαδρομή μας, όπως παρακάτω:
1717

1818
[source,console]
@@ -22,23 +22,23 @@ $ curl -o ~/bin/git-remote-hg \
2222
$ chmod +x ~/bin/git-remote-hg
2323
----
2424

25-
με την προϋπόθεση ότι ο `~/bin` είναι στο `$PATH` μας.
26-
η `git-remote-hg` έχει άλλη μία εξάρτηση: τη βιβλιοθήκη Python του Mercurial.
25+
…με την προϋπόθεση ότι ο `~/bin` είναι στο `$PATH` μας.
26+
Η git-remote-hg έχει άλλη μία εξάρτηση: τη βιβλιοθήκη Python του Mercurial.
2727
Αν έχουμε εγκατεστημένη την Python, αυτό γίνεται πανεύκολα:
2828

2929
[source,console]
3030
----
3131
$ pip install mercurial
3232
----
3333

34-
(Εάν δεν έχουμε εγκαταστήσει την Python, επισκεφτόμαστε τη διεύθυνση https://www.python.org/[] για να την κατεβάσουμε και να την εγκαταστήσουμε.)
34+
Εάν δεν έχουμε εγκαταστήσει την Python, επισκεφτόμαστε τη διεύθυνση https://www.python.org/[^] για να την κατεβάσουμε και να την εγκαταστήσουμε.
3535

3636
Το τελευταίο πράγμα που θα χρειαστούμε είναι ο πελάτης του Mercurial.
37-
Μεταβαίνουμε στη διεύθυνση http://mercurial.selenic.com/[] και τον εγκαταθιστούμε αν δεν το έχουμε ήδη κάνει.
37+
Μεταβαίνουμε στη διεύθυνση https://www.mercurial-scm.org/[^] και τον εγκαταθιστούμε αν δεν το έχουμε ήδη κάνει.
3838

3939
Τώρα είμαστε έτοιμοι να παίξουμε μπάλα.
4040
Το μόνο που χρειαζόμαστε είναι ένα αποθετήριο Mercurial στο οποίο να έχουμε δικαίωμα ώθησης.
41-
Ευτυχώς, κάθε αποθετήριο Mercurial μπορεί να ενεργήσει με αυτόν τον τρόπο, οπότε θα χρησιμοποιήσουμε μόνο το αποθετήριο `hello world` που χρησιμοποιούν όλοι για να μάθουν το Mercurial:
41+
Ευτυχώς, κάθε αποθετήριο Mercurial μπορεί να ενεργήσει με αυτόν τον τρόπο, οπότε θα χρησιμοποιήσουμε μόνο το αποθετήριο "hello world" που χρησιμοποιούν όλοι για να μάθουν το Mercurial:
4242

4343
[source,console]
4444
----
@@ -58,11 +58,11 @@ $ git clone hg::/tmp/hello /tmp/hello-git
5858
$ cd /tmp/hello-git
5959
$ git log --oneline --graph --decorate
6060
* ac7955c (HEAD, origin/master, origin/branches/default, origin/HEAD, refs/hg/origin/branches/default, refs/hg/origin/bookmarks/master, master) Create a makefile
61-
* 65bb417 Create a standard "hello, world" program
61+
* 65bb417 Create a standard 'hello, world' program
6262
----
6363

6464
Παρατηρούμε ότι η εργασία με ένα αποθετήριο Mercurial χρησιμοποιεί την τυπική εντολή `git clone`.
65-
Αυτό συμβαίνει επειδή το `git-remote-hg` λειτουργεί σε αρκετά χαμηλό επίπεδο, χρησιμοποιώντας έναν παρόμοιο μηχανισμό με αυτόν που είναι υλοποιημένο το πρωτόκολλο HTTP/S του Git (με απομακρυσμένους βοηθούς).
65+
Αυτό συμβαίνει επειδή το git-remote-hg λειτουργεί σε αρκετά χαμηλό επίπεδο, χρησιμοποιώντας έναν παρόμοιο μηχανισμό με αυτόν που είναι υλοποιημένο το πρωτόκολλο HTTP/S του Git (με απομακρυσμένους βοηθούς).
6666
Δεδομένου ότι τα Git και Mercurial έχουν σχεδιαστεί και τα δύο ώστε κάθε πελάτης να έχει ένα πλήρες αντίγραφο του ιστορικού του αποθετηρίου, αυτή η εντολή δημιουργεί έναν πλήρη κλώνο, συμπεριλαμβανομένου ολόκληρου του ιστορικού του έργου και μάλιστα το κάνει αρκετά γρήγορα.
6767

6868
Η εντολή `log` δείχνει δύο υποβολές, με την πιο πρόσφατη να δείχνεται από πληθώρα αναφορών.
@@ -74,26 +74,26 @@ $ git log --oneline --graph --decorate
7474
$ tree .git/refs
7575
.git/refs
7676
├── heads
77-
   └── master
77+
└── master
7878
├── hg
79-
   └── origin
80-
   ├── bookmarks
81-
   │   └── master
82-
   └── branches
83-
   └── default
79+
└── origin
80+
├── bookmarks
81+
└── master
82+
└── branches
83+
└── default
8484
├── notes
85-
   └── hg
85+
└── hg
8686
├── remotes
87-
   └── origin
88-
   └── HEAD
87+
└── origin
88+
└── HEAD
8989
└── tags
9090
9191
9 directories, 5 files
9292
----
9393

94-
Το `git-remote-h`g προσπαθεί να κάνει το ιδίωμα πιο Git-οειδές, αλλά εσωτερικά διαχειρίζεται την εννοιολογική απεικόνιση μεταξύ δύο ελαφρώς διαφορετικών συστημάτων.
94+
Το git-remote-hg προσπαθεί να κάνει το ιδίωμα πιο Git-οειδές, αλλά εσωτερικά διαχειρίζεται την εννοιολογική απεικόνιση μεταξύ δύο ελαφρώς διαφορετικών συστημάτων.
9595
Ο κατάλογος `refs/hg` είναι εκεί όπου αποθηκεύονται οι πραγματικές απομακρυσμένες αναφορές.
96-
Για παράδειγμα, το αρχείο `refs/hg/origin/branches/default` είναι ένα αρχείο ref του Git που περιέχει τον SHA-1 που αρχίζει με το "`ac7955c`".
96+
Για παράδειγμα, το αρχείο `refs/hg/origin/branches/default` είναι ένα αρχείο αναφοράς του Git που περιέχει τον SHA-1 που αρχίζει με το "`ac7955c`", που είναι η υποβολή που δείχνει το `master`
9797
Έτσι, ο κατάλογος `refs/hg` είναι σαν ένα ψεύτικο `refs/remotes/origin`, αλλά έχει την πρόσθετη διάκριση μεταξύ σελιδοδεικτών και κλάδων.
9898

9999
Το αρχείο `notes/hg` είναι το σημείο εκκίνησης για τον τρόπο με τον οποίο το git-remote-hg απεικονίζει τους αριθμούς SHA-1 των υποβολών Git σε ID συνόλων αλλαγών του Mercurial.
@@ -121,12 +121,12 @@ $ git cat-file -p ac9117f
121121

122122
Επομένως, το `refs/notes/hg` δείχνει σε ένα δέντρο, το οποίο στη βάση δεδομένων αντικειμένων του Git είναι μια λίστα άλλων αντικειμένων με ονόματα.
123123
Το `git ls-tree` εξάγει τα δικαιώματα πρόσβασης, τον τύπο, το hash αντικειμένου και το όνομα αρχείου για τα στοιχεία μέσα σε ένα δέντρο.
124-
Μόλις σκάψουμε σε ένα από τα στοιχεία του δέντρου, διαπιστώνουμε ότι μέσα του υπάρχει ένα blob που ονομάζεται "`ac9117f`" (ο αριθμός SHA-1 της υποβολής στην οποία δείχνει ο 'master`), με τα περιεχόμενα "`0a04b98`" (που είναι το αναγνωριστικό του συνόλου αλλαγών του Mercurial στην κορυφή του κλάδου `default`.
124+
Μόλις σκάψουμε σε ένα από τα στοιχεία του δέντρου, διαπιστώνουμε ότι μέσα του υπάρχει ένα blob που ονομάζεται "`ac9117f`" (ο αριθμός SHA-1 της υποβολής στην οποία δείχνει ο 'master`), με τα περιεχόμενα "`0a04b98`" (που είναι το αναγνωριστικό του συνόλου αλλαγών του Mercurial στην κορυφή του κλάδου `default`).
125125

126126
Τα καλά νέα είναι ότι δεν χρειάζεται να ανησυχούμε για όλα αυτά.
127127
Η τυπική ροή εργασίας δεν θα είναι πολύ διαφορετική από αυτήν με ένα απομακρυσμένο αποθετήριο Git.
128128

129-
Υπάρχει ένα ακόμα πράγμα που πρέπει να εξετάσουμε πριν συνεχίσουμε: τα αγνοεί.
129+
Υπάρχει ένα ακόμα πράγμα που πρέπει να εξετάσουμε πριν συνεχίσουμε: τις παραλείψεις (ignores).
130130
Το Mercurial και το Git χρησιμοποιούν έναν πολύ παρόμοιο μηχανισμό για αυτό, αλλά είναι πιθανό ότι δεν θέλουμε πραγματικά να υποβάλουμε ένα αρχείο `.gitignore` σε ένα αποθετήριο Mercurial.
131131
Ευτυχώς, το Git έχει έναν τρόπο να αγνοήσει αρχεία που είναι τοπικά σε ένα αποθετήριο στον δίσκο μας και η μορφή του Mercurial είναι συμβατή με το Git, οπότε απλά πρέπει να το αντιγράψουμε:
132132

@@ -148,7 +148,7 @@ $ git log --oneline --graph --decorate
148148
* ba04a2a (HEAD, master) Update makefile
149149
* d25d16f Goodbye
150150
* ac7955c (origin/master, origin/branches/default, origin/HEAD, refs/hg/origin/branches/default, refs/hg/origin/bookmarks/master) Create a makefile
151-
* 65bb417 Create a standard "hello, world" program
151+
* 65bb417 Create a standard 'hello, world' program
152152
----
153153

154154
Ο κλάδος `master` προηγείται κατά δύο υποβολές του `origin/master`, αλλά αυτές οι δύο υποβολές υπάρχουν μόνο στο τοπικό μας μηχάνημα.
@@ -168,7 +168,7 @@ $ git log --oneline --graph --decorate --all
168168
| * d25d16f Goodbye
169169
|/
170170
* ac7955c Create a makefile
171-
* 65bb417 Create a standard "hello, world" program
171+
* 65bb417 Create a standard 'hello, world' program
172172
----
173173

174174
Εφόσον χρησιμοποιήσαμε τη σημαία `--all`, βλέπουμε τις αναφορές "`notes`" που χρησιμοποιούνται εσωτερικά από το git-remote-hg, αλλά μπορούμε να τις αγνοήσουμε.
@@ -190,7 +190,7 @@ $ git log --oneline --graph --decorate
190190
* | d25d16f Goodbye
191191
|/
192192
* ac7955c Create a makefile
193-
* 65bb417 Create a standard "hello, world" program
193+
* 65bb417 Create a standard 'hello, world' program
194194
----
195195

196196
Τέλεια.
@@ -225,10 +225,10 @@ o 1 82e55d328c8c 2005-08-26 01:21 -0700 mpm
225225
| Create a makefile
226226
|
227227
o 0 0a04b987be5a 2005-08-26 01:20 -0700 mpm
228-
Create a standard "hello, world" program
228+
Create a standard 'hello, world' program
229229
----
230230

231-
Το σύνολο των αλλαγών _2_ έγινε από το Mercurial και τα σύνολα αλλαγών _3_ και _4_ έγιναν από το `git-remote-hg`, με ώθηση των υποβολών που έγιναν με το Git.
231+
Το σύνολο των αλλαγών _2_ έγινε από το Mercurial και τα σύνολα αλλαγών _3_ και _4_ έγιναν από το git-remote-hg, με ώθηση των υποβολών που έγιναν με το Git.
232232

233233
===== Κλάδοι και σελιδοδείκτες
234234

@@ -292,7 +292,7 @@ o 1 82e55d328c8c 2005-08-26 01:21 -0700 mpm
292292
| Create a makefile
293293
|
294294
o 0 0a04b987be5a 2005-08-26 01:20 -0700 mpm
295-
Create a standard "hello, world" program
295+
Create a standard 'hello, world' program
296296
----
297297

298298
Παρατηρούμε τη νέα ετικέτα `[featureA]` στην αναθεώρηση 5.
@@ -346,7 +346,7 @@ o changeset: 5:bd5ac26f11f9
346346

347347
Το όνομα κλάδου "`permanent`" καταγράφηκε με το σύνολο αλλαγών _7_.
348348

349-
Από την πλευρά του Git, η συνεργασία με οποιοδήποτε από αυτά τα στυλ κλάδου είναι ίδια: απλώς ελέγχουμε, διεκπεραιώνουμε, ανακτούμε, συγχωνεύουμε, έλκουμε και ωθούμε όπως θα κάναμε κανονικά.
349+
Από την πλευρά του Git, η συνεργασία με οποιοδήποτε από αυτά τα στυλ κλάδου είναι ίδια: απλώς ελέγχουμε, υποβάλουμε, ανακτούμε, συγχωνεύουμε, έλκουμε και ωθούμε όπως θα κάναμε κανονικά.
350350
Ένα πράγμα που πρέπει να ξέρουμε είναι ότι το Mercurial δεν υποστηρίζει την επανεγγραφή ιστορικού και μόνο προσθέτει σε αυτό.
351351
Ακολουθεί η εμφάνιση του αποθετηρίου μας Mercurial μετά από μια διαδραστική αλλαγή βάσης και μια εξαναγκασμένη ώθηση:
352352

@@ -395,4 +395,3 @@ o 0 0a04b987be5a 2005-08-26 01:20 -0700 mpm
395395

396396
Τα Git και Mercurial είναι αρκετά παρόμοια ώστε η συνεργασία μεταξύ τους είναι αρκετά ανώδυνη.
397397
Εάν αποφύγουμε να αλλάξουμε το ιστορικό που έχει αφήσει το μηχάνημά μας (όπως συνήθως συνιστάται), ίσως να μην γνωρίζουμε καν ότι το άλλο άκρο είναι Mercurial.
398-

0 commit comments

Comments
 (0)