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
Με σχεδόν κάθε κώδικα μεγέθους, θα πρέπει συχνά να εντοπίσουμε πού καλείται ή καθορίζεται μια λειτουργία ή να βρούμε το ιστορικό μιας μεθόδου.
5
-
Το Git παρέχει μερικά χρήσιμα εργαλεία για την αναζήτηση στον κώδικα και υποβάλλει τα στοιχεία που είναι αποθηκευμένα στη βάση δεδομένων του γρήγορα και εύκολα.
6
-
Θα περάσουμε μερικά από αυτά.
7
-
8
-
With just about any size codebase, you'll often need to find where a function is called or defined, or find the history of a method.
9
-
Git provides a couple of useful tools for looking through the code and commits stored in its database quickly and easily.
10
-
We'll go through a few of them.
4
+
Με κώδικα σχεδόν κάθε μεγέθους, θα χρειαστεί συχνά να εντοπίσουμε πού καλείται ή ορίζεται μια συνάρτηση ή να βρούμε το ιστορικό μιας μεθόδου.
5
+
Το Git παρέχει μερικά χρήσιμα εργαλεία για γρήγορη και εύκολη αναζήτηση στον κώδικα και τις υποβολές που είναι αποθηκευμένα στη βάση δεδομένων του.
6
+
Θα δούμε κάποια από αυτά.
11
7
12
8
[[_git_grep]]
13
9
==== Git Grep
14
10
15
11
Git ships with a command called `grep` that allows you to easily search through any committed tree or the working directory for a string or regular expression.
16
12
For these examples, we'll look through the Git source code itself.
17
13
18
-
Το Git συνοδεύεται από μια εντολή που ονομάζεται grep και μας επιτρέπει να κάνουμε εύκολα αναζήτηση μέσα από οποιοδήποτε δέντρο έχει υποβληθεί ή τον κατάλογο εργασίας για μια συμβολοσειρά ή κανονική έκφραση.
19
-
Για αυτά τα παραδείγματα, θα εξετάσουμε τον ίδιο τον πηγαίο κώδικα Git.
20
-
21
-
Από προεπιλογή, θα εξετάσει τα αρχεία στον κατάλογο εργασίας μας.
22
-
Μπορούμε να περάσουμε το `-n` για να εκτυπώσουμε τους αριθμούς γραμμών όπου ο Git βρήκε ταίριασμα.
14
+
Το Git συνοδεύεται από μια εντολή που ονομάζεται `grep` και μας επιτρέπει να αναζητούμε εύκολα μέσα σε οποιοδήποτε υποβεβλημένο δένδρο ή τον κατάλογο εργασίας για μια συμβολοσειρά ή κανονική έκφραση (regular expression).
15
+
Για αυτά τα παραδείγματα, θα εξετάσουμε τον ίδιο τον πηγαίο κώδικα του Git.
23
16
24
-
By default, it will look through the files in your working directory.
25
-
You can pass `-n` to print out the line numbers where Git has found matches.
17
+
Εκ προεπιλογής, θα εξετάσει τα αρχεία στον κατάλογο εργασίας μας.
18
+
Μπορούμε να περάσουμε την επιλογή `-n` για να εκτυπώσουμε τους αριθμούς γραμμών όπου το Git βρήκε αντιστοίχιση.
There are a number of interesting options you can provide the `grep` command.
43
-
44
35
Υπάρχουν πολλές ενδιαφέρουσες επιλογές που μπορούμε να δώσουμε στην εντολή `grep`.
45
36
46
-
Για παράδειγμα, αντί για την προηγούμενη κλήση, μπορούμε να έχουμε το Git να συνοψίζει την έξοδο, δείχνοντας ακριβώς ποια αρχεία αντιστοιχούν και πόσες αντιστοιχίες υπήρχαν σε κάθε αρχείο με την επιλογή `--count ':
47
-
48
-
For instance, instead of the previous call, you can have Git summarize the output by just showing you which files matched and how many matches there were in each file with the `--count` option:
37
+
Για παράδειγμα, αντί για την προηγούμενη κλήση, μπορούμε να βάλουμε το Git να συνοψίζει την έξοδο, δείχνοντας ακριβώς σε ποια αρχεία βρέθηκαν αντιστοιχίσεις και πόσες αντιστοιχίσεις βρέθηκαν σε κάθε αρχείο με την επιλογή `--count`:
49
38
50
39
[source,console]
51
40
----
@@ -57,9 +46,7 @@ date.c:2
57
46
git-compat-util.h:2
58
47
----
59
48
60
-
Αν θέλουμε να δούμε ποια μέθοδο ή λειτουργία πιστεύει ότι έχει βρει έναν αγώνα μέσα, μπορούμε να περάσουμε `-p`:
61
-
62
-
If you want to see what method or function it thinks it has found a match in, you can pass `-p`:
49
+
Αν θέλουμε να δούμε σε ποια μέθοδο ή συνάρτηση πιστεύει ότι έχει βρει μία αντιστοίχιση, μπορούμε να περάσουμε την επιλογή `-p`:
63
50
64
51
[source,console]
65
52
----
@@ -70,19 +57,12 @@ date.c=static int match_digit(const char *date, struct tm *tm, int *offset, int
70
57
date.c: if (gmtime_r(&time, tm)) {
71
58
----
72
59
73
-
Έτσι, εδώ βλέπουμε ότι το `gmtime_r` καλείται στις λειτουργίες` match_multi_number` και `match_digit` στο αρχείο date.c.
74
-
75
-
So here we can see that `gmtime_r` is called in the `match_multi_number` and `match_digit` functions in the date.c file.
76
-
77
-
You can also look for complex combinations of strings with the `--and` flag, which makes sure that multiple matches are in the same line.
78
-
For instance, let's look for any lines that define a constant with either the strings ``LINK'' or ``BUF_MAX'' in them in the Git codebase in an older 1.8.0 version.
79
-
80
-
Μπορούμε επίσης να αναζητήσουμε σύνθετους συνδυασμούς συμβολοσειρών με τη σημαία `- και`, που διασφαλίζει ότι οι πολλαπλές αντιστοιχίσεις βρίσκονται στην ίδια γραμμή.
81
-
Για παράδειγμα, ας δούμε τις γραμμές που ορίζουν μια σταθερά με τις συμβολοσειρές `` LINK '' ή `` BUF_MAX '' σε αυτές στη βάση κώδικα Git σε μια παλαιότερη έκδοση 1.8.0.
60
+
Έτσι, εδώ βλέπουμε ότι η `gmtime_r` καλείται στις `match_multi_number` και `match_digit` στο αρχείο `date.c`.
82
61
83
-
Εδώ θα χρησιμοποιήσουμε επίσης τις επιλογές `- break 'και` - head' που βοηθούν στη διάσπαση της εξόδου σε πιο ευανάγνωστη μορφή.
62
+
Μπορούμε επίσης να αναζητήσουμε σύνθετους συνδυασμούς συμβολοσειρών με την επιλογή `--and`, που διασφαλίζει ότι υπάρχουν πολλαπλές αντιστοιχίσεις βρίσκονται στην ίδια γραμμή.
63
+
Για παράδειγμα, ας αναζητήσουμε τις γραμμές που ορίζουν μια σταθερά με τις συμβολοσειρές ``LINK'' ή ``BUF_MAX'' σε αυτές στη βάση του κώδικα του Git σε μια παλαιότερη έκδοση, την 1.8.0.
84
64
85
-
Here we'll also use the `--break` and `--heading` options which help split up the output into a more readable format.
65
+
Εδώ θα χρησιμοποιήσουμε επίσης τις επιλογές `--break` και `--head` που βοηθούν στον διαχωρισμό της εξόδου σε πιο ευανάγνωστη μορφή.
Η εντολή git grep έχει μερικά πλεονεκτήματα έναντι των κανονικών εντολών αναζήτησης όπως `grep` και` ack`.
92
+
Η εντολή git grep έχει μερικά πλεονεκτήματα έναντι των κανονικών εντολών αναζήτησης όπως `grep` και `ack`.
113
93
Το πρώτο είναι ότι είναι πολύ γρήγορο, το δεύτερο είναι ότι μπορούμε να ψάξουμε μέσα σε οποιοδήποτε δέντρο στο Git, όχι μόνο στον κατάλογο εργασίας.
114
-
Όπως είδαμε στο παραπάνω παράδειγμα, αναζητήσαμε όρους σε μια παλαιότερη έκδοση του πηγαίου κώδικα Git, όχι στην έκδοση που εκκρεμούσε αυτή τη στιγμή.
115
-
116
-
The `git grep` command has a few advantages over normal searching commands like `grep` and `ack`.
117
-
The first is that it's really fast, the second is that you can search through any tree in Git, not just the working directory.
118
-
As we saw in the above example, we looked for terms in an older version of the Git source code, not the version that was currently checked out.
94
+
Όπως είδαμε στο παραπάνω παράδειγμα, αναζητήσαμε όρους σε μια παλαιότερη έκδοση του πηγαίου κώδικα Git, όχι στην έκδοση που ήταν checked out αυτήν τη στιγμή.
119
95
120
96
==== Αναζήτηση στο μητρώο του Git
121
97
122
-
Perhaps you're looking not for **where** a term exists, but **when** it existed or was introduced.
123
-
The `git log` command has a number of powerful tools for finding specific commits by the content of their messages or even the content of the diff they introduce.
124
-
125
-
Ίσως δεν ψάχνουμε για ** όπου ** υπάρχει ένας όρος, αλλά ** όταν ** υπήρχε ή εισήχθη.
126
-
Η εντολή `git log` έχει πολλά ισχυρά εργαλεία για την εξεύρεση συγκεκριμένων υποβολών από το περιεχόμενο των μηνυμάτων τους ή ακόμη και από το περιεχόμενο των διαφορών που εισάγουν.
98
+
Ίσως ψάχνουμε όιχ για το **πού** υπάρχει ένας όρος, αλλά **πότε** υπήρχε ή πότε εισήχθη.
99
+
Η εντολή `git log` έχει πολλά ισχυρά εργαλεία για την εξεύρεση συγκεκριμένων υποβολών από το περιεχόμενο των μηνυμάτων τους ή ακόμη και από το περιεχόμενο των diff που εισάγουν.
127
100
128
-
Αν θέλουμε να μάθουμε, για παράδειγμα, όταν η σταθερά `ZLIB_BUF_MAX` αρχικά εισήχθη, μπορούμε να πούμε στο Git να μας δείξει μόνο τις υποβολές που είτε προστέθηκαν είτε αφαιρέθηκαν από αυτή τη συμβολοσειρά με την επιλογή` -S`.
129
-
130
-
If we want to find out for example when the `ZLIB_BUF_MAX` constant was originally introduced, we can tell Git to only show us the commits that either added or removed that string with the `-S` option.
101
+
Αν θέλουμε να μάθουμε, για παράδειγμα, πότε η σταθερά `ZLIB_BUF_MAX` εισήχθη για πρώτη φορά, μπορούμε να πούμε στο Git να μας δείξει μόνο τις υποβολές που είτε πρόσθεσαν είτε αφαίρεσαν αυτήν τη συμβολοσειρά με την επιλογή `-S`.
131
102
132
103
[source,console]
133
104
----
@@ -136,29 +107,18 @@ e01503b zlib: allow feeding more than 4GB in one go
136
107
ef49a7a zlib: zlib can only process 4GB at a time
137
108
----
138
109
139
-
If we look at the diff of those commits we can see that in `ef49a7a` the constant was introduced and in `e01503b` it was modified.
140
-
141
-
Αν δούμε τη διαφορά αυτών των υποβολών μπορούμε να δούμε ότι στο «ef49a7a» η σταθερά εισήχθη και στο «e01503b» τροποποιήθηκε.
110
+
Αν κοιτάξουμε το diff αυτών των υποβολών μπορούμε να δούμε ότι η σταθερά εισήχθη στην `ef49a7a` και τροποποιήθηκε στην `e01503b`.
142
111
143
-
Αν χρειάζεται να είστε πιο συγκεκριμένοι, μπορούμε να παρέχουμε μια κανονική έκφραση για αναζήτηση με την επιλογή `-G`.
112
+
Αν χρειάζεται να είμαστε πιο συγκεκριμένοι, μπορούμε να παράσχουμε μια κανονική έκφραση για αναζήτηση με την επιλογή `-G`.
144
113
145
-
If you need to be more specific, you can provide a regular expression to search for with the `-G` option.
114
+
===== Γραμμική αναζήτηση στο μητρώο
146
115
147
-
===== Line Log Search
148
-
149
-
Another fairly advanced log search that is insanely useful is the line history search.
150
-
This is a fairly recent addition and not very well known, but it can be really helpful.
151
-
It is called with the `-L` option to `git log` and will show you the history of a function or line of code in your codebase.
152
-
153
-
Μια άλλη αρκετά προηγμένη αναζήτηση ιστορικού που είναι παράλογα χρήσιμη είναι η αναζήτηση ιστορικού γραμμής.
116
+
Μια άλλη αρκετά προηγμένη αναζήτηση στο μητρώο που είναι απίστευτα χρήσιμη είναι η γραμμική αναζήτηση στο ιστορικό.
154
117
Αυτή είναι μια αρκετά πρόσφατη προσθήκη και δεν είναι πολύ γνωστή, αλλά μπορεί να είναι πραγματικά χρήσιμη.
155
-
Καλείται με την επιλογή `-L` στο` git log` και θα μας δείξει το ιστορικό μιας συνάρτησης ή μιας γραμμής κώδικα στον κωδικό μας.
118
+
Καλείται με την επιλογή `-L` στην `git log` και θα μας δείξει το ιστορικό μιας συνάρτησης ή μιας γραμμής κώδικα στον κωδικό μας.
156
119
157
-
Για παράδειγμα, αν θέλαμε να δούμε κάθε αλλαγή που έγινε στη συνάρτηση `git_deflate_bound` στο αρχείο` zlib.c`, θα μπορούσαμε να εκτελέσουμε το `git log -L: git_deflate_bound: zlib.c`.
158
-
Αυτό θα προσπαθήσει να καταλάβει ποια είναι τα όρια αυτής της λειτουργίας και στη συνέχεια να κοιτάξει μέσα από την ιστορία και να μας δείξει κάθε αλλαγή που έγινε στη λειτουργία ως μια σειρά από μπαλώματα όταν η λειτουργία δημιουργήθηκε για πρώτη φορά.
159
-
160
-
For example, if we wanted to see every change made to the function `git_deflate_bound` in the `zlib.c` file, we could run `git log -L :git_deflate_bound:zlib.c`.
161
-
This will try to figure out what the bounds of that function are and then look through the history and show us every change that was made to the function as a series of patches back to when the function was first created.
120
+
Για παράδειγμα, αν θέλαμε να δούμε κάθε αλλαγή που έγινε στη συνάρτηση `git_deflate_bound` στο αρχείο `zlib.c`, θα μπορούσαμε να εκτελέσουμε `git log -L :git_deflate_bound:zlib.c`.
121
+
Αυτήη εντολή θα προσπαθήσει να καταλάβει ποια είναι τα όρια αυτής της συνάρτησης και στη συνέχεια να ψάξει μέσα στο ιστορικό και θα μας δείξει κάθε αλλαγή που έγινε στη συνάρτηση σαν μια σειρά από επιθέματα από όταν η συνάρτηση δημιουργήθηκε για πρώτη φορά.
162
122
163
123
[source,console]
164
124
----
@@ -198,10 +158,6 @@ diff --git a/zlib.c b/zlib.c
198
158
+
199
159
----
200
160
201
-
Αν το Git δεν μπορεί να καταλάβει πώς να ταιριάζει με κάποια λειτουργία ή μέθοδο στη γλώσσα προγραμματισμού μας, μπορούμε επίσης να τον δώσουμε ένα regex.
202
-
Για παράδειγμα, αυτό θα έκανε το ίδιο πράγμα: `git log -L '/ unsigned long git_deflate_bound /', / ^} /: zlib.c`.
203
-
Θα μπορούσαμε επίσης να του δώσουμε μια σειρά από γραμμές ή έναν μοναδικό αριθμό γραμμής και θα έχουμε το ίδιο είδος εξόδου.
204
-
205
-
If Git can't figure out how to match a function or method in your programming language, you can also provide it a regex.
206
-
For example, this would have done the same thing: `git log -L '/unsigned long git_deflate_bound/',/^}/:zlib.c`.
207
-
You could also give it a range of lines or a single line number and you'll get the same sort of output.
161
+
Αν το Git δεν μπορεί να καταλάβει πώς να αντιστοιχίσει κάποια συνάρτηση ή μέθοδο στη γλώσσα προγραμματισμού μας, μπορούμε επίσης να του δώσουμε μία κανονική έκφραση.
162
+
Για παράδειγμα, αυτό θα έκανε το ίδιο πράγμα: `git log -L '/unsigned long git_deflate_bound/',/^}/:zlib.c`.
163
+
Θα μπορούσαμε επίσης να του δώσουμε ένα εύρος γραμμών ή έναν μοναδικό αριθμό γραμμής και θα είχαμε το ίδιο είδος εξόδου.
0 commit comments