-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path8040.rss
403 lines (354 loc) · 38.1 KB
/
8040.rss
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>שבוע 10 – יום 4: ניהול גרסאות ו־git</title>
<link>https://forums.pythonic.guru/t/10-4-git/8040</link>
<description>## הקדמה
וואו, זה היה חתיכת פרויקט!
למעשה, זה היה הפרויקט המורכב הראשון שלכם ואם שרדתם עד כאן נראה שעשיתם עבודה מצוינת.
בכמה ימים האחרונים הספקתם לבנות **מערכת ניהול גרסאות** (Version Control System; VCS) בסיסית.
"מערכת לניהול גרסאות" זה שם כללי לתוכנות כמו wit, שמאפשרות לנו לנהל גרסאות שונות של הפרויקט שלנו, לשמור אותן ל"תמונה" בכל פעם שבה אנחנו מבצעים בפרויקט שינוי ולשחזר את התמונות ששמרנו במועד מאוחר יותר.
מערכות מודרניות לניהול גרסאות עוזרות לנו להתמודד עם אתגרים קשים במ��וחד:
1. *שמירה ותיעוד של גרסאות* – שימוש בתוכנה לניהול גרסאות מאפשרת לנו, ובכן... לשמור גרסאות. נוכל לעקוב אחר השינויים שביצענו בקוד של התוכנה, לשמור אותם בקלות ולראות מה היו השינויים בין גרסה לגרסה. כשיהיה באג, נוכל להסתכל אחורה ולראות איזו שורה גרמה לו, או פשוט לבטל את השינוי האחרון שעשינו. יש לנו "תמונה" של כל גרסה ששמרנו בעבר, והיא לא תלך לאיבוד.
2. *עבודה משותפת על קוד* – מערכות לניהול גרסאות מקלות מאוד על עבודה של כמה אנשים במקביל על פרויקט. במקום להעביר קבצים אחד לשני ולפתור באופן ידני התנגשויות בעריכה, מערכות לניהול גרסאות פשוט ידעו לבצע מיזוג בין העבודה שלכם לבין העבודה של הקולגות שלכם. זה יחסוך לנו הרבה זמן שהיה מתבזבז על העברת קבצים ממחשב למחשב, מיזוג שינויים באופן ידני ובדיקה של מי ביצע איזה מהשינויים.
3. *גיבוי מרוחק* – מערכות מודרניות לניהול גרסאות מאפשרות לנו לגבות יחסית בקלות את הפרויקטים שלנו לשירותים חיצוניים, שמבטיחים לשמור על הקוד שלנו גם אם נשליך את המחשב לחבית חומצה.
מערכת wit שכתבתם היא מערכת שכזו, עם פונקציונליות יחסית בסיסית (נניח – עדיין לא מימשתם גיבוי לאינטרנט. נכון שאני נחמד?).
המערכת הזו דומה באופן מעורר חשד למערכת ניהול גרסאות אחרת בשם *git*, שעליה אנחנו הולכים ללמוד בימים הקרובים.
## אז מי זו git?
כפי שכבר אמרנו, git היא מערכת לניהול גרסאות.
בנה אותה אחד בשם לינוס טורבלאדס, עליו אולי יצא לכם לשמוע בזכות מערכת ההפעלה שפיתח – לינוקס.
הוא בנה אותה כי הוא היה צריך מערכת לניהול גרסאות עבור מערכת ההפעלה שפיתח, והרגיש שאין אפשרויות מספיק טובות בשוק.
זו מערכת ניהול הגרסאות הפופולרית ביותר היום בפער גדול מאוד, ומשתמשים בה בכל מקום בתעשייה כדי לנהל קוד.
בהמשך השבוע אנחנו הולכים ללמוד להשתמש ב־git, לנהל את הקוד שלנו בעזרתה ולגבות אותו לאינטרנט.
### התקנה
תוכלו להוריד את git [מכאן](https://git-scm.com/) ולהתקין אותה על המחשב שלכם לפי המדריך [הזה](https://www.youtube.com/watch?v=nbFwejIsHlY).
המדריך ממש טוב; עקבו אחרי האפשרויות שהוא מדליק וסמנו אותן גם אצלכם.
עבור ה��Editor, בניגוד אליו, סמנו Visual Studio Code, אלא אם אתם מרגישים בנוח עם Vim.
אם אין לכם Visual Studio Code, בחרו עורך אחר מהרשימה שלדעתכם יהיה לכם נוח לערוך בו הודעות קצרות.
### הגדרות ראשוניות
פתחו שורת פקודה והקלידו את הפקודות הבאות.
הפקודות האלו יגדירו במחשב שעליו אתם עובדים את השם ואת כתובת הדואר האלקטרונית שלכם.
זה יעזור לזהות אתכם כשתעבדו עם אנשים אחרים.
שנו את John Doe לשם שלכם, ואת johndoe@example.com לכתובת הדואר האלקטרונית שלכם.
```bash
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
```
### שימוש
תיקייה שמנוהלת על ידי git נקראת Repository ("מאגר"), והיא תכיל את קובצי הפרויקט שלכם.
בתיקייה שכזו, תהיה תת־תיקייה שנקראת `.git`, מעין "במה אחורית" שבה git תנהל את כל הגרסאות והמידע על הפרויקט שלכם.
ל־git יש שלושה מצבים בהם הקבצים שלכם יכולים להיות:
1. במצב modified – הקובץ נערך אבל לא ביקשנו מ־git לשמור אותו.
2. במצב staged – ביקשנו מ־git לשמור את הגרסה הנוכחית של הקובץ, אבל עדיין לא "לקחנו תמונה".
3. במצב committed – הקובץ נשמר בהצלחה בגרסתו האחרונה.
בהתאם לשלושת המצבים האלו, יש 3 "מקומות" שבהם קובץ שלכם (או עותק שלו) יכול להיות:
1. ב־Working Directory – התיקייה המקורית של הפרויקט שלכם.
2. ב־Staging Area (נקרא גם "ה־Index") – המקום שבו נשמרים הקבצים אחרי שנערכו ולפני ש"לוקחים תמונה".
3. "מגובים" – מקום בתוך תיקיית `.git` שבו ישמרו ה"תמונות", שהן גרסאות מגובות של הפרויקט.
ודאי כבר הבנתם את הרעיון – המודל הזה זהה לחלוטין למודל שבניתם בעצמכם בימים האחרונים.
שיטת העבודה היא פשוטה: עורכים קבצים, מוסיפים **רק** את הקבצים שרוצים לשנות ל־staging area, לוקחים "תמונה" של הפרויקט אחרי שביצענו בו את השינויים, וחוזר חלילה.
### שיטת העבודה עם git
שיטת העבודה הפופולרית היום במקומות עבודה שמשתמשים ב־git נקראת "feature branch workflow". זו שיטת עבודה שנועדה לייעל את העבודה של מספר אנשים על אותה מערכת.
בשיטת העבודה הזו, כל המפתחים עובדים על מאגר git מנוהל שמשותף לכולם. הגרסה היציבה והעדכנית של המערכת מתוייגת תחת השם "master". כל מפתח שרוצה לעשות שינוי למערכת – בין אם זה להוסיף פיצ'ר או לתקן באג, פותח "ענף" (branch) משלו ומפתח שם את הקוד שהוא רוצה להוסיף למערכת.
בזמן הזה יכולים להתבצע שינויים באופן בלתי תלוי לקוד שנמצא ב־master, אבל אותו מפתח עובד על הגרסה שלו שנגזרה מהנקודה בזמן שבה הוא פתח את הענף החדש שלו. כשאותו מפתח יסיים את עבודתו, הוא יוכל למזג (merge) את השינויים שביצע חזרה ל־master. בסיום התהליך, ה־master יעודכן עם הקוד החדש של המפתח.
אם נרצה לפתח פיצ'ר של בדיקת העתקות במערכת התרגילים, לדוגמה, נוכל להתפצל מהמקום אליו מצביע master כרגע, וליצור branch חדש ששמו find-cheaters. ה־branch הזה ישמש לפיתוח הפיצ'ר של בדיקת ההעתקות. כשנסיים לפתח את היכולת הזו נמזג את ה־branch שקראנו לו find-cheaters חזרה ל־master, והקוד שכתבנו יהפוך להיות חלק ממנו. כך גם אם master עבר שינויים בזמן הזה, git ידע למזג את השינויים שביצענו ונוכל לעבוד יחד בנוחות למערכת.
במקומות עבודה רבים יש שני branch־ים מרכזיים: master ו־develop, כאשר master מכיל גרסאות אפויות ובדוקות שיורדות ללקוח, ו־develop הוא ה־branch שממנו יוצאים הפיצ'רים.
בשיעור הבא נלמד כיצד לעבוד עם אנשים על פרוייקט אונליין, כיצד להעלות את הפרויקטים שלנו לרשת וכיצד להשתתף בפרויקטים אחרים.
### מילון מונחים
- **מאגר – repository, repo** – אוסף של קבצים שאנחנו רוצים לנהל בעזרת התוכנה לניהול גרסאות. ב־git, נכריז על תיקייה כזו באמצעות הפקודה `git init`.
- **תיקיית העבודה – working tree / working directory** – התיקייה המקורית שמכילה את הקבצים שאותם אנחנו רוצים לנהל באמצעות git. זו התיקייה שבתוכה תיווצר תיקיית `.git`.
- **נקודת שמירה – commit** – מה שקראנו לו "תמונה". עותק של ה־repo בנקודת זמן מסוימת שנשמר בעזרת git, ושיהיה אפשר לחזור אליו בנקודת זמן מאוחרת יותר. זה גם השם של הפקודה שיוצרת את נקודת השמירה הזו.
- **הראש – HEAD** – הדרך של git להתייחס ל"תמונה" הנוכחית.
- **ענף – branch** – תווית בעלת שם שמוצמדת לאחד ה־commit־ים. אם התווית פעילה, היא תתקדם יחד עם ה־commit־ים. הרעיון מאחורי branch הוא לייצג תהליך פיתוח בלתי תלוי, שעשוי להתמזג אחר־כך חזרה לפרויקט המקורי. כל עוד החלטנו להיות "על" תהליך הפיתוח הבלתי תלוי (ה־branch "פעיל"), ה־branch יתקדם יחד איתנו ויצביע על ה־commit האחרון שנעשה.
- **הענף הראשי – master** – זה הענף שנהוג לשמור בו גרסאות עובדות של הפרויקט שלנו, וממנו נהוג להתפצל ל־branch־ים.
### ניהול הקוד שלכם בעזרת git
נווטו בעזרת cmd לתיקייה בה ניהלתם את קוד ה־wit שלכם.
כדי להגדיר אותה כתיקייה שמנוהלת בעזרת git, הקלידו `git init`.
צרפו קבצים בעזרת `git add`, ובצעו את השמירה הראשונה בעזרת `git commit`.
טיפ: תוכלו לקבל עזרה על פקודה אם תוסיפו `-h` אחריה. לדוגמה – `git init -h`.
טיפ 2: אפשר להוסיף את כל הקבצים לפרויקט בעזרת `git add -A`.
טיפ 3: אפשר לכתוב הודעה קצרה ב־commit בעזרת `git commit -m "Message"`.
שחקו קצת עם git. נסו לערוך קובץ ולעשות commit־ים נוספים.
הריצו בין לבין פקודת `git status` כדי לבדוק מה מצב ה־repository שלכם.
אתם אמורים להרגיש די בנוח לשחק עם ה־repository, שכן אתם כבר מכירים היטב את הפקודות ואיך הוא עובד.
כדי לראות את המקבילה הפחות חגיגית של `git graph` שבניתם, כיתבו `git log --graph --all`.
הרגישו בנוח לעשות `checkout` ל־commit־ים שראיתם, ולנסות לבצע שינויים ולסבך את הגרף.
### רגע! לפני האינטרנט
בקרוב אני הולך לשלוח אתכם לחקור קצת על git בעצמכם.
מימשתם בעצמכם את wit ורכשתם בסיס נפלא לאיך פחות או יותר git עובד.
למרות זאת, ולמרות שאתם מחזיקים בידע עמוק לגבי שיטת הפעולה הבסיסית של git, חשוב לזכור ש־git היא מערכת מסועפת ומורכבת שפותחה בידי מתכנתים ועבור מתכנתים.
במילותיו של משתמש טוויטר חביב עליי במיוחד:
> "גיט נהיה ממש קל כשמבינים שברנצ'ים הם אנדופנקטורים הומומורפים שממפים תתי יריעות של מרחב הילברט."
> -- *Isaac Wolkerstorfer*
יש עשרות רבות של פקודות שלא למדתם עדיין, וכאלו שכנראה גם לא תצטרכו ללמוד לעולם.
החלק הקשה של להבין איך git עובדת בבסיסה – מאחוריכם, ועכשיו רק צריך סבלנות וקצת משחק כדי להבין לעומק איך מרחיבים את היריעה ומגיעים למצב שבו אתם שולטים היטב גם בפקודות הפחות בסיסיות של git.
למזלכם, בכל בעיה או חוסר הבנה תוכלו לפנות להסבר נוסף בפורומים.
### תרגיל 1 – עֲנַף? עֵץ עָבֹת
האתר https://learngitbranching.js.org/ מאפשר לתרגל משחקים בסיסיים עם git.
סיימו את תרגילים 1, 2 ו־3 תחת הכותרות Introduction Sequence ו־Ramping Up.
הגישו את הפקודות שהרצתם כדי לסיים כל אחת מהתרגילים.
הרגישו בנוח, כמובן, לסיים שם תרגילים נוספים אם תרצו להרחיב את הידע שלכם על שימוש ב־git.
### תרגיל 2 – וְהָ־git בּוֹ יוֹמָם וָלַיְלָה
כתבו בעברית מה כל אחת מהפקודות הבאות עושה.
- git init
- git add
- git commit
- git status
- git checkout
- git branch
- git reset
- git revert
- git diff
- git rm
- git tag
- git log
- git merge
עבור הפקודות checkout, add, reset, rm, log צרפו הסבר על שימוש מעניין בפקודה (דגלים נוספים, פרמטרים מעניינים) שאפשר למצוא בתיעוד של git.
לדוגמה:
- הפעולה `git log` מציגה את היסטוריית ה־commit־ים ב־repo. שימוש מעניין בפקודה הוא שאפשר לספק לה את הדגל `--oneline`, שבמקום להביא את המידע המלא על כל commit מביא את ה־id המקוצר של ה־commit, את ההודעה של ה־commit ואת הענף אליו הוא שייך.
ענו גם על השאלות:
- מה ההבדל בין branch לבין tag?
- מה ההבדל בין reset לבין revert?
### מקורות נוספים ללמידה
1. הרצאה נפלאה שסידרה לי הרבה דברים בראש בתחילת הדרך – [Git For Ages 4 And Up](https://www.youtube.com/watch?v=1ffBJ4sVUb4).
2. [מדריך ויזואלי לפקודות git בסיסיות](http://marklodato.github.io/visual-git-guide/index-en.html).</description>
<language>he</language>
<lastBuildDate>Wed, 27 Jul 2022 20:21:27 +0000</lastBuildDate>
<category>אשכולות הנהלה</category>
<atom:link href="https://forums.pythonic.guru/t/10-4-git/8040.rss" rel="self" type="application/rss+xml" />
<item>
<title>שבוע 10 – יום 4: ניהול גרסאות ו־git</title>
<dc:creator><![CDATA[Alon.B.A]]></dc:creator>
<description><![CDATA[
<p>עשיתי אותו דבר עם ההערות.<br>
אני לא מהצוות של הקורס אבל כנראה שבדיקת התרגיל הזה לא תהיה אוטומטית, ולכן פשוט הקפדתי שמה שאני כותב יהיה מסודר וברור למי שיקרא את זה.</p>
<p><a href="https://forums.pythonic.guru/t/10-4-git/8040/6">קריאת הנושא במלואו</a></p>
]]></description>
<link>https://forums.pythonic.guru/t/10-4-git/8040/6</link>
<pubDate>Thu, 10 Sep 2020 22:01:02 +0000</pubDate>
<guid isPermaLink="false">forums.pythonic.guru-post-8040-6</guid>
<source url="https://forums.pythonic.guru/t/10-4-git/8040.rss">שבוע 10 – יום 4: ניהול גרסאות ו־git</source>
</item>
<item>
<title>שבוע 10 – יום 4: ניהול גרסאות ו־git</title>
<dc:creator><![CDATA[Liran_C]]></dc:creator>
<description><![CDATA[
<p>תודה רבה , באיזה פורמט אני אמור לעלות את שאלה 2? זה טיפה יותר מורכב מכמה פקודות.</p>
<p><a href="https://forums.pythonic.guru/t/10-4-git/8040/5">קריאת הנושא במלואו</a></p>
]]></description>
<link>https://forums.pythonic.guru/t/10-4-git/8040/5</link>
<pubDate>Thu, 10 Sep 2020 20:37:05 +0000</pubDate>
<guid isPermaLink="false">forums.pythonic.guru-post-8040-5</guid>
<source url="https://forums.pythonic.guru/t/10-4-git/8040.rss">שבוע 10 – יום 4: ניהול גרסאות ו־git</source>
</item>
<item>
<title>שבוע 10 – יום 4: ניהול גרסאות ו־git</title>
<dc:creator><![CDATA[Alon.B.A]]></dc:creator>
<description><![CDATA[
<p>כתוב בהוראות:</p>
<blockquote>
<p>הגישו את הפקודות שהרצתם כדי לסיים כל אחת מהתרגילים.</p>
</blockquote>
<p>אני כתבתי את הפקודות כהערות בקובץ .py (בעצת הפוסט <a href="https://forums.pythonic.guru/t/topic/8084/2">הזה</a>).<br>
לדוגמה:</p>
<pre><code class="lang-auto"># Introduction Sequence
# 1
# comand
# comand
# 2
# comand
# comand
</code></pre>
<p><a href="https://forums.pythonic.guru/t/10-4-git/8040/4">קריאת הנושא במלואו</a></p>
]]></description>
<link>https://forums.pythonic.guru/t/10-4-git/8040/4</link>
<pubDate>Thu, 10 Sep 2020 19:57:52 +0000</pubDate>
<guid isPermaLink="false">forums.pythonic.guru-post-8040-4</guid>
<source url="https://forums.pythonic.guru/t/10-4-git/8040.rss">שבוע 10 – יום 4: ניהול גרסאות ו־git</source>
</item>
<item>
<title>שבוע 10 – יום 4: ניהול גרסאות ו־git</title>
<dc:creator><![CDATA[Liran_C]]></dc:creator>
<description><![CDATA[
<aside class="quote no-group" data-username="Yam" data-post="1" data-topic="8040">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="20" height="20" src="https://forums.pythonic.guru/user_avatar/forums.pythonic.guru/yam/40/6_2.png" class="avatar"> Yam:</div>
<blockquote>
<h3>תרגיל 1 – עֲנַף? עֵץ עָבֹת</h3>
<p>האתר <a href="https://learngitbranching.js.org/" rel="nofollow noopener">https://learngitbranching.js.org/ </a> מאפשר לתרגל משחקים בסיסיים עם git.<br>
סיימו את תרגילים 1, 2 ו־3 תחת הכותרות Introduction Sequence ו־Ramping Up.<br>
הגישו את הפקודות שהרצתם כדי לסיים כל אחת מהתרגילים.</p>
<p>הרגישו בנוח, כמובן, לסיים שם תרגילים נוספים אם תרצו להרחיב את הידע שלכם על שימוש ב־git.</p>
</blockquote>
</aside>
<p>איך מגישים בדיוק את התרגיל?</p>
<p><a href="https://forums.pythonic.guru/t/10-4-git/8040/3">קריאת הנושא במלואו</a></p>
]]></description>
<link>https://forums.pythonic.guru/t/10-4-git/8040/3</link>
<pubDate>Thu, 10 Sep 2020 14:50:10 +0000</pubDate>
<guid isPermaLink="false">forums.pythonic.guru-post-8040-3</guid>
<source url="https://forums.pythonic.guru/t/10-4-git/8040.rss">שבוע 10 – יום 4: ניהול גרסאות ו־git</source>
</item>
<item>
<title>שבוע 10 – יום 4: ניהול גרסאות ו־git</title>
<dc:creator><![CDATA[yosefco3]]></dc:creator>
<description><![CDATA[
<p>גם זה מדריך טוב , בעברית :</p>
<p><a href="https://www.codebrain.co.il/%D7%9E%D7%93%D7%A8%D7%99%D7%9A-%D7%9C-git-%D7%A0%D7%99%D7%94%D7%95%D7%9C-%D7%92%D7%A8%D7%A1%D7%90%D7%95%D7%AA-%D7%A7%D7%95%D7%93/" class="onebox" target="_blank" rel="nofollow noopener">https://www.codebrain.co.il/מדריך-ל-git-ניהול-גרסאות-קוד/</a></p>
<p><a href="https://forums.pythonic.guru/t/10-4-git/8040/2">קריאת הנושא במלואו</a></p>
]]></description>
<link>https://forums.pythonic.guru/t/10-4-git/8040/2</link>
<pubDate>Tue, 01 Sep 2020 18:28:27 +0000</pubDate>
<guid isPermaLink="false">forums.pythonic.guru-post-8040-2</guid>
<source url="https://forums.pythonic.guru/t/10-4-git/8040.rss">שבוע 10 – יום 4: ניהול גרסאות ו־git</source>
</item>
<item>
<title>שבוע 10 – יום 4: ניהול גרסאות ו־git</title>
<dc:creator><![CDATA[Yam]]></dc:creator>
<description><![CDATA[
<h2>הקדמה</h2>
<p>וואו, זה היה חתיכת פרויקט!<br>
למעשה, זה היה הפרויקט המורכב הראשון שלכם ואם שרדתם עד כאן נראה שעשיתם עבודה מצוינת.</p>
<p>בכמה ימים האחרונים הספקתם לבנות <strong>מערכת ניהול גרסאות</strong> (Version Control System; VCS) בסיסית.<br>
“מערכת לניהול גרסאות” זה שם כללי לתוכנות כמו wit, שמאפשרות לנו לנהל גרסאות שונות של הפרויקט שלנו, לשמור אותן ל"תמונה" בכל פעם שבה אנחנו מבצעים בפרויקט שינוי ולשחזר את התמונות ששמרנו במועד מאוחר יותר.</p>
<p>מערכות מודרניות לניהול גרסאות עוזרות לנו להתמודד עם אתגרים קשים במיוחד:</p>
<ol>
<li>
<em>שמירה ותיעוד של גרסאות</em> – שימוש בתוכנה לניהול גרסאות מאפשרת לנו, ובכן… לשמור גרסאות. נוכל לעקוב אחר השינויים שביצענו בקוד של התוכנה, לשמור אותם בקלות ולראות מה היו השינויים בין גרסה לגרסה. כשיהיה באג, נוכל להסתכל אחורה ולראות איזו שורה גרמה לו, או פשוט לבטל את השינוי האחרון שעשינו. יש לנו “תמונה” של כל גרסה ששמרנו בעבר, והיא לא תלך לאיבוד.</li>
<li>
<em>עבודה משותפת על קוד</em> – מערכות לניהול גרסאות מקלות מאוד על עבודה של כמה אנשים במקביל על פרויקט. במקום להעביר קבצים אחד לשני ולפתור באופן ידני התנגשויות בעריכה, מערכות לניהול גרסאות פשוט ידעו לבצע מיזוג בין העבודה שלכם לבין העבודה של הקולגות שלכם. זה יחסוך לנו הרבה זמן שהיה מתבזבז על העברת קבצים ממחשב למחשב, מיזוג שינויים באופן ידני ובדיקה של מי ביצע איזה מהשינויים.</li>
<li>
<em>גיבוי מרוחק</em> – מערכות מודרניות לניהול גרסאות מאפשרות לנו לגבות יחסית בקלות את הפרויקטים שלנו לשירותים חיצוניים, שמבטיחים לשמור על הקוד שלנו גם אם נשליך את המחשב לחבית חומצה.</li>
</ol>
<p>מערכת wit שכתבתם היא מערכת שכזו, עם פונקציונליות יחסית בסיסית (נניח – עדיין לא מימשתם גיבוי לאינטרנט. נכון שאני נחמד?).<br>
המערכת הזו דומה באופן מעורר חשד למערכת ניהול גרסאות אחרת בשם <em>git</em>, שעליה אנחנו הולכים ללמוד בימים הקרובים.</p>
<h2>אז מי זו git?</h2>
<p>כפי שכבר אמרנו, git היא מערכת לניהול גרסאות.<br>
בנה אותה אחד בשם לינוס טורבלאדס, עליו אולי יצא לכם לשמוע בזכות מערכת ההפעלה שפיתח – לינוקס.<br>
הוא בנה אותה כי הוא היה צריך מערכת לניהול גרסאות עבור מערכת ההפעלה שפיתח, והרגיש שאין אפשרויות מספיק טובות בשוק.<br>
זו מערכת ניהול הגרסאות הפופולרית ביותר היום בפער גדול מאוד, ומשתמשים בה בכל מקום בתעשייה כדי לנהל קוד.</p>
<p>בהמשך השבוע אנחנו הולכים ללמוד להשתמש ב־git, לנהל את הקוד שלנו בעזרתה ולגבות אותו לאינטרנט.</p>
<h3>התקנה</h3>
<p>תוכלו להוריד את git <a href="https://git-scm.com/">מכאן</a> ולהתקין אותה על המחשב שלכם לפי המדריך <a href="https://www.youtube.com/watch?v=nbFwejIsHlY">הזה</a>.<br>
המדריך ממש טוב; עקבו אחרי האפשרויות שהוא מדליק וסמנו אותן גם אצלכם.<br>
עבור ה־Editor, בניגוד אליו, סמנו Visual Studio Code, אלא אם אתם מרגישים בנוח עם Vim.<br>
אם אין לכם Visual Studio Code, בחרו עורך אחר מהרשימה שלדעתכם יהיה לכם נוח לערוך בו הודעות קצרות.</p>
<h3>הגדרות ראשוניות</h3>
<p>פתחו שורת פקודה והקלידו את הפקודות הבאות.<br>
הפקודות האלו יגדירו במחשב שעליו אתם עובדים את השם ואת כתובת הדואר האלקטרונית שלכם.<br>
זה יעזור לזהות אתכם כשתעבדו עם אנשים אחרים.</p>
<p>שנו את John Doe לשם שלכם, ואת <a href="mailto:johndoe@example.com">johndoe@example.com</a> לכתובת הדואר האלקטרונית שלכם.</p>
<pre><code class="lang-bash">git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
</code></pre>
<h3>שימוש</h3>
<p>תיקייה שמנוהלת על ידי git נקראת Repository (“מאגר”), והיא תכיל את קובצי הפרויקט שלכם.<br>
בתיקייה שכזו, תהיה תת־תיקייה שנקראת <code>.git</code>, מעין “במה אחורית” שבה git תנהל את כל הגרסאות והמידע על הפרויקט שלכם.</p>
<p>ל־git יש שלושה מצבים בהם הקבצים שלכם יכולים להיות:</p>
<ol>
<li>במצב modified – הקובץ נערך אבל לא ביקשנו מ־git לשמור אותו.</li>
<li>במצב staged – ביקשנו מ־git לשמור את הגרסה הנוכחית של הקובץ, אבל עדיין לא “לקחנו תמונה”.</li>
<li>במצב committed – הקובץ נשמר בהצלחה בגרסתו האחרונה.</li>
</ol>
<p>בהתאם לשלושת המצבים האלו, יש 3 “מקומות” שבהם קובץ שלכם (או עותק שלו) יכול להיות:</p>
<ol>
<li>ב־Working Directory – התיקייה המקורית של הפרויקט שלכם.</li>
<li>ב־Staging Area (נקרא גם “ה־Index”) – המקום שבו נשמרים הקבצים אחרי שנערכו ולפני ש"לוקחים תמונה".</li>
<li>“מגובים” – מקום בתוך תיקיית <code>.git</code> שבו ישמרו ה"תמונות", שהן גרסאות מגובות של הפרויקט.</li>
</ol>
<p>ודאי כבר הבנתם את הרעיון – המודל הזה זהה לחלוטין למודל שבניתם בעצמכם בימים האחרונים.<br>
שיטת העבודה היא פשוטה: עורכים קבצים, מוסיפים <strong>רק</strong> את הקבצים שרוצים לשנות ל־staging area, לוקחים “תמונה” של הפרויקט אחרי שביצענו בו את השינויים, וחוזר חלילה.</p>
<h3>שיטת העבודה עם git</h3>
<p>שיטת העבודה הפופולרית היום במקומות עבודה שמשתמשים ב־git נקראת “feature branch workflow”. זו שיטת עבודה ש��ועדה לייעל את העבודה של מספר אנשים על אותה מערכת.</p>
<p>בשיטת העבודה הזו, כל המפתחים עובדים על מאגר git מנוהל שמשותף לכולם. הגרסה היציבה והעדכנית של המערכת מתוייגת תחת השם “master”. כל מפתח שרוצה לעשות שינוי למערכת – בין אם זה להוסיף פיצ’ר או לתקן באג, פותח “ענף” (branch) משלו ומפתח שם את הקוד שהוא רוצה להוסיף למערכת.</p>
<p>בזמן הזה יכולים להתבצע שינויים באופן בלתי תלוי לקוד שנמצא ב־master, אבל אותו מפתח עובד על הגרסה שלו שנגזרה מהנקודה בזמן שבה הוא פתח את הענף החדש שלו. כשאותו מפתח יסיים את עבודתו, הוא יוכל למזג (merge) את השינויים שביצע חזרה ל־master. בסיום התהליך, ה־master יעודכן עם הקוד החדש של המפתח.</p>
<p>אם נרצה לפתח פיצ’ר של בדיקת העתקות במערכת התרגילים, לדוגמה, נוכל להתפצל מהמקום אליו מצביע master כרגע, וליצור branch חדש ששמו find-cheaters. ה־branch הזה ישמש לפיתוח הפיצ’ר של בדיקת ההעתקות. כשנסיים לפתח את היכולת הזו נמזג את ה־branch שקראנו לו find-cheaters חזרה ל־master, והקוד שכתבנו יהפוך להיות חלק ממנו. כך גם אם master עבר שינויים בזמן הזה, git ידע למזג את השינויים שביצענו ונוכל לעבוד יחד בנוחות למערכת.</p>
<p>במקומות עבודה רבים יש שני branch־ים מרכזיים: master ו־develop, כאשר master מכיל גרסאות אפויות ובדוקות שיורדות ללקוח, ו־develop הוא ה־branch שממנו יוצאים הפיצ’רים.</p>
<p>בשיעור הבא נלמד כיצד לעבוד עם אנשים על פרוייקט אונליין, כיצד להעלות את הפרויקטים שלנו לרשת וכיצד להשתתף בפרויקטים אחרים.</p>
<h3>מילון מונחים</h3>
<ul>
<li>
<strong>מאגר – repository, repo</strong> – אוסף של קבצים שאנחנו רוצים לנהל בעזרת התוכנה לניהול גרסאות. ב־git, נכריז על תיקייה כזו באמצעות הפקודה <code>git init</code>.</li>
<li>
<strong>תיקיית העבודה – working tree / working directory</strong> – התיקייה המקורית שמכילה את הקבצים שאותם אנחנו רוצים לנהל באמצעות git. זו התיקייה שבתוכה תיווצר תיקיית <code>.git</code>.</li>
<li>
<strong>נקודת שמירה – commit</strong> – מה שקראנו לו “תמונה”. עותק של ה־repo בנקודת זמן מסוימת שנשמר בעזרת git, ושיהיה אפשר לחזור אליו בנקודת זמן מאוחרת יותר. זה גם השם של הפקודה שיוצרת את נקודת השמירה הזו.</li>
<li>
<strong>הראש – HEAD</strong> – הדרך של git להתייחס ל"תמונה" הנוכחית.</li>
<li>
<strong>ענף – branch</strong> – תווית בעלת שם שמוצמדת לאחד ה־commit־ים. אם התווית פעילה, היא תתקדם יחד עם ה־commit־ים. הרעיון מאחורי branch הוא לייצג תהליך פיתוח בלתי תלוי, שעשוי להתמזג אחר־כך חזרה לפרויקט המקורי. כל עוד החלטנו להיות “על” תהליך הפיתוח הבלתי תלוי (ה־branch “פעיל”), ה־branch יתקדם יחד איתנו ויצביע על ה־commit האחרון שנעשה.</li>
<li>
<strong>הענף הראשי – master</strong> – זה הענף שנהוג לשמור בו גרסאות עובדות של הפרויקט שלנו, וממנו נהוג להתפצל ל־branch־ים.</li>
</ul>
<h3>ניהול הקוד שלכם בעזרת git</h3>
<p>נווטו בעזרת cmd לתיקייה בה ניהלתם את קוד ה־wit שלכם.<br>
כדי להגדיר אותה כתיקייה שמנוהלת בעזרת git, הקלידו <code>git init</code>.<br>
צרפו קבצים בעזרת <code>git add</code>, ובצעו את השמירה הראשונה בעזרת <code>git commit</code>.</p>
<p>טיפ: תוכלו לקבל עזרה על פקודה אם תוסיפו <code>-h</code> אחריה. לדוגמה – <code>git init -h</code>.<br>
טיפ 2: אפשר להוסיף את כל הקבצים לפרויקט בעזרת <code>git add -A</code>.<br>
טיפ 3: אפשר לכתוב הודעה קצרה ב־commit בעזרת <code>git commit -m "Message"</code>.</p>
<p>שחקו קצת עם git. נסו לערוך קובץ ולעשות commit־ים נוספים.<br>
הריצו בין לבין פקודת <code>git status</code> כדי לבדוק מה מצב ה־repository שלכם.<br>
אתם אמורים להרגיש די בנוח לשחק עם ה־repository, שכן אתם כבר מכירים היטב את הפקודות ואיך הוא עובד.<br>
כדי לראות את המקבילה הפחות חגיגית של <code>git graph</code> שבניתם, כיתבו <code>git log --graph --all</code>.<br>
הרגישו בנוח לעשות <code>checkout</code> ל־commit־ים שראיתם, ולנסות לבצע שינויים ולסבך את הגרף.</p>
<h3>רגע! לפני האינטרנט</h3>
<p>בקרוב אני הולך לשלוח אתכם לחקור קצת על git בעצמכם.<br>
מימשתם בעצמכם את wit ורכשתם בסיס נפלא לאיך פחות או יותר git עובד.<br>
למרות זאת, ולמרות שאתם מחזיקים בידע עמוק לגבי שיטת הפעולה הבסיסית של git, חשוב לזכור ש־git היא מערכת מסועפת ומורכבת שפותחה בידי מתכנתים ועבור מתכנתים.</p>
<p>במילותיו של משתמש טוויטר חביב עליי במיוחד:</p>
<blockquote>
<p>“גיט נהיה ממש קל כשמבינים שברנצ’ים הם אנדופנקטורים הומומורפים שממפים תתי יריעות של מרחב הילברט.”<br>
– <em>Isaac Wolkerstorfer</em></p>
</blockquote>
<p>יש עשרות רבות של פקודות שלא למדתם עדיין, וכאלו שכנראה גם לא תצטרכו ללמוד לעולם.<br>
החלק הקשה של להבין איך git עובדת בבסיסה – מאחוריכם, ועכשיו רק צריך סבלנות וקצת משחק כדי להבין לעומק איך מרחיבים את היריעה ומ��יעים למצב שבו אתם שולטים היטב גם בפקודות הפחות בסיסיות של git.<br>
למזלכם, בכל בעיה או חוסר הבנה תוכלו לפנות להסבר נוסף בפורו��ים.</p>
<h3>תרגיל 1 – עֲנַף? עֵץ עָבֹת</h3>
<p>האתר <a href="https://learngitbranching.js.org/">https://learngitbranching.js.org/</a> מאפשר לתרגל משחקים בסיסיים עם git.<br>
סיימו את תרגילים 1, 2 ו־3 תחת הכותרות Introduction Sequence ו־Ramping Up.<br>
הגישו את הפקודות שהרצתם כדי לסיים כל אחת מהתרגילים.</p>
<p>הרגישו בנוח, כמובן, לסיים שם תרגילים נוספים אם תרצו להרחיב את הידע שלכם על שימוש ב־git.</p>
<h3>תרגיל 2 – וְהָ־git בּוֹ יוֹמָם וָלַיְלָה</h3>
<p>כתבו בעברית מה כל אחת מהפקודות הבאות עושה.</p>
<ul>
<li>git init</li>
<li>git add</li>
<li>git commit</li>
<li>git status</li>
<li>git checkout</li>
<li>git branch</li>
<li>git reset</li>
<li>git revert</li>
<li>git diff</li>
<li>git rm</li>
<li>git tag</li>
<li>git log</li>
<li>git merge</li>
</ul>
<p>עבור הפקודות checkout, add, reset, rm, log צרפו הסבר על שימוש מעניין בפקודה (דגלים נוספים, פרמטרים מעניינים) שאפשר למצוא בתיעוד של git.</p>
<p>לדוגמה:</p>
<ul>
<li>הפעולה <code>git log</code> מציגה את היסטוריית ה־commit־ים ב־repo. שימוש מעניין בפקודה הוא שאפשר לספק לה את הדגל <code>--oneline</code>, שבמקום להביא את המידע המלא על כל commit מביא את ה־id המקוצר של ה־commit, את ההודעה של ה־commit ואת הענף אליו הוא שייך.</li>
</ul>
<p>ענו גם על השאלות:</p>
<ul>
<li>מה ההבדל בין branch לבין tag?</li>
<li>מה ההבדל בין reset לבין revert?</li>
</ul>
<h3>מקורות נוספים ללמידה</h3>
<ol>
<li>הרצאה נפלאה שסידרה לי הרבה דברים בראש בתחילת הדרך – <a href="https://www.youtube.com/watch?v=1ffBJ4sVUb4">Git For Ages 4 And Up</a>.</li>
<li>
<a href="http://marklodato.github.io/visual-git-guide/index-en.html">מדריך ויזואלי לפקודות git בסיסיות</a>.</li>
</ol>
<p><a href="https://forums.pythonic.guru/t/10-4-git/8040/1">קריאת הנושא במלואו</a></p>
]]></description>
<link>https://forums.pythonic.guru/t/10-4-git/8040/1</link>
<pubDate>Tue, 01 Sep 2020 03:34:00 +0000</pubDate>
<guid isPermaLink="false">forums.pythonic.guru-post-8040-1</guid>
<source url="https://forums.pythonic.guru/t/10-4-git/8040.rss">שבוע 10 – יום 4: ניהול גרסאות ו־git</source>
</item>
</channel>
</rss>