-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path7985.rss
211 lines (181 loc) · 19.4 KB
/
7985.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
<?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 – יום 2: commit, status, checkout</title>
<link>https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985</link>
<description>היום נדאג לממש 3 פקודות נוספות לתוכנת ה־wit שאנחנו כותבים: commit, status ו־checkout.
בכל תרגיל, הגישו למערכת התרגילים את כל העבודה שלכם עד עכשיו (כולל סעיפים קודמים).
### תרגיל 1: הפקודה commit
ממשו את הפונקציה commit, שתופעל בעזרת הרצת הפקודה `python path/to/wit.py commit MESSAGE`.
הפונקציה תרוץ אך ורק אם אחת מתיקיות האב של תיקיית העבודה העכשווית מכילה את התיקייה `.wit`.
פקודה זו למעשה יוצרת "נקודת שמירה" של ממש, שאליה נוכל לשחזר את הפרויקט כשנרצה.
כשנעשה commit, ניצור "תמונה" מתוך הקבצים שאספנו לתוך staging_area בעזרת הפקודה add.
#### חלק ראשון: יצירת תיקייה
בעת הפעלת הפונקציה, תיווצר תיקייה חדשה בתוך תיקיית `images` שיצרתם ביום 1 בעזרת הפונקציה `init`.
שמה של התיקייה החדשה יורכב מ־40 תווים אקראיים בטווח 0-9a-f (התווים: 1234567890abcdef). שם התיקייה הזה יקרא מעכשיו "commit id".
#### חלק שני: יצירת קובץ metadata על ה־commit
ליד אותה תיקייה ששמה הוא ה־commit id, יווצר קובץ באותו שם, עם הסיומת `.txt`, ובו יהיה התוכן הבא:
```text
parent=None
date=Sat Aug 26 19:00:20 2020 +0300
message=The message
```
החליפו את The message בהודעה שנכתבה אחרי המילה commit בפקודה שהוקלדה ב��ורת הפקודה.
בינתיים, השאירו את השורה `parent: None` כפי שהיא.
#### חלק שלישי: יצירת השמירה
הפונקציה תעתיק את תוכן התיקייה `staging_area` לתוך התיקייה החדשה שנוצרה.
התוכן בתיקייה `staging_area` יישאר כמו שהוא ולא ישונה.
#### חלק רביעי: ארגון המידע לגישה עתידית
1. בקובץ בשם `references.txt` שנמצא ישרות תחת תיקיית `.wit`, הוסיפו את השורה `HEAD=commit_id`, כאשר במקום commit_id יכתב שם התיקייה שנוצרה בעקבות פקודת ה־commit. אם הקובץ לא קיים, צרו אותו.
2. בשורה אחרת באותו קובץ, כתבו `master=commit_id`. גם פה במקום commit_id יכתב שם התיקייה שנוצרה בעקבות פקודת ה־commit.
#### חלק חמישי: מה קורה בקומיט הבא?
נניח שנוספו בעזרת הפקודה add עוד כמה קבצים ל־staging_area, והמשתמש מבקש לעשות שוב commit.
כל התיקייה של staging_area תועתק לתיקייה חדשה בתוך images, שעבורה יוגרל commit_id חדש.
הפעם, השורה בה כתוב parent צריכה להצביע על ה־commit_id הקודם (תוכלו לקחת אותו מ־HEAD).
השורות HEAD ו־master ב־references.txt צריכות להתעדכן בהתאם ל־commit_id החדש שנוצר.
בונוס: אם אין שינוי מפעם שעברה, אל תאפשרו לעשות commit נוסף.
### תרגיל 2: הפקודה status
ממשו את הפונקציה status שתופעל בעזרת הרצת הפקודה `python path/to/wit.py status`.
הפונקציה תרוץ אך ורק אם אחת מתיקיות האב של תיקיית העבודה העכשווית מכילה את התיקייה `.wit`.
הפקודה תדפיס הודעה למשתמש, בה יהיו הפרטים הבאים:
1. ה־commit id שבו אנחנו נמצאים כרגע (ה־HEAD)
2. תחת הכותרת `Changes to be committed:`, יהיו קבצים שעשינו להם add מאז ה־commit האחרון, והם יתווספו לתיקייה שתיווצר ב־images בפקודת ה־commit הבאה.
3. תחת הכותרת `Changes not staged for commit:` יופיעו קבצים שנמצאים ב־staging_area כרגע, אבל התוכן שלהם ב"תיקייה האמיתית" לא תואם את התוכן שלהם בתיקיית staging_area.
במילים אחרות: קבצים שעשו להם פעם add, נמצאים ב־staging_area באותו נתיב, אבל התוכן שלהם שֻׁנָּה מאז ה־commit האחרון ומאז שהתוכן שלהם שֻׁנָּה לא עשו להם add.
באופן מעט משונה, קבצים שמופיעים ב־`Changes to be committed:` (סעיף 2) יכולים להופיע גם פה, אם ערכנו אותם, עשינו להם add ואז ערכנו אותם שוב.
4. תחת הכותרת `Untracked files:` יופיעו קבצים שאין להם קובץ תואם ב־staging_area.
**בונוס:** ממשו פקודת `wit rm` שתאפשר למחוק קבצים מ־`staging_area`.
**אם אתם לא מתייחסים לבונוס:** אין צורך לתמוך במקרים של מחיקת קבצים מהתיקייה הראשית.
הבהרה: קבצים יכולים להופיע תחת הכותרת Changes to be commited גם אם עשינו להם commit בעבר. אם, לדוגמה, עשינו commit לקובץ שנקרא "targil.py", אבל מייד שינינו אותו ועשינו לו `wit add` מחדש, בפקודת ה־status אנחנו נראה את הקובץ תחת הכותרת "Changes to be commited".
### תרגיל 3: הפקודה checkout
ממשו את הפונקציה checkout שתופעל בעזרת הרצת הפקודה `python path/to/wit.py checkout commit_id`.
הפונקציה תרוץ אך ורק אם אחת מתיקיות האב של תיקיית העבודה העכשווית מכילה את התיקייה `.wit`.
#### פעולה בסיסית
הפונקציה checkout תחליף את כל הקבצים שנמצאים תחת "התיקייה המקורית" (זו שבתוכה יש את התיקייה `.wit`).
הפונקציה תעתיק אל התיקייה המקורית את כל הקבצים שנמצאים בתיקייה `images/commit_id`, כאשר commit_id הוא הפרמטר שהוכנס לפקודת ה־checkout.
התחשבו בנקודות הבאות:
1. כדי לא לאבד מידע, הפקודה תכשל ולא תתחיל לרוץ אם יש קבצים שמופיעים ב־`wit status` תחת הכותרת `Changes to be committed:`, או תחת הכותרת `Changes not staged for commit:`.
2. קבצים שמופיעים תחת הכותרת `Untracked files:` לא ישונו – הם ישארו כמו שהם, והקבצים שלצידם יוחלפו או יווצרו.
עדכנו את ה־HEAD ל־commit_id שבו אתם נמצאים אחרי הרצת הפקודה.
כמו כן, החליפו את התוכן של staging_area כך שתוכנה החדש יהיה תוכן התיקייה `images/commit_id`.
#### הרחבה
אם במקום הפרמטר commit_id יכתב master, הפקודה תקח את ה־commit id המקושר אליו ותעשה checkout אל ה־commit_id הרלוונטי.
#### עדכון ה־master בעת פקודת commit
אם התבצע commit וה־commit id שאליו מצביע HEAD הוא אותו commit id שאליו מצביע master (לפי references.txt), יש לעדכן את שניהם ל־commit_id החדש.
אם התבצע checkout שהעביר את ה־HEAD כך שהוא לא מצביע לאותו commit id שאליו מצביע ה־master, ה־commit id שאליו מצביע master לא ישתנה.</description>
<language>he</language>
<lastBuildDate>Sat, 29 Aug 2020 19:49:30 +0000</lastBuildDate>
<category>אשכולות הנהלה</category>
<atom:link href="https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985.rss" rel="self" type="application/rss+xml" />
<item>
<title>שבוע 10 – יום 2: commit, status, checkout</title>
<dc:creator><![CDATA[Yam]]></dc:creator>
<description><![CDATA[
<p>אחד הפוסטים פוצל לנושא חדש: <a href="https://forums.pythonic.guru/t/commit/8011">לא לאפשר commit אם היה שינוי?</a></p>
<p><a href="https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985/2">קרי��ת הנושא במלואו</a></p>
]]></description>
<link>https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985/2</link>
<pubDate>Sat, 29 Aug 2020 20:25:25 +0000</pubDate>
<guid isPermaLink="false">forums.pythonic.guru-post-7985-2</guid>
<source url="https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985.rss">שבוע 10 – יום 2: commit, status, checkout</source>
</item>
<item>
<title>שבוע 10 – יום 2: commit, status, checkout</title>
<dc:creator><![CDATA[Yam]]></dc:creator>
<description><![CDATA[
<p><a href="https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985/3">קריאת הנושא במלואו</a></p>
]]></description>
<link>https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985/3</link>
<pubDate>Sat, 29 Aug 2020 20:24:10 +0000</pubDate>
<guid isPermaLink="false">forums.pythonic.guru-post-7985-3</guid>
<source url="https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985.rss">שבוע 10 – יום 2: commit, status, checkout</source>
</item>
<item>
<title>שבוע 10 – יום 2: commit, status, checkout</title>
<dc:creator><![CDATA[Yam]]></dc:creator>
<description><![CDATA[
<p>היום נדאג לממש 3 פקודות נוספות לתוכנת ה־wit שאנחנו כותבים: commit, status ו־checkout.<br>
בכל תרגיל, הגישו למערכת התרגילים את כל העבודה שלכם עד עכשיו (כולל סעיפים קודמים).</p>
<h3>
<a name="h-1-commit-1" class="anchor" href="https://forums.pythonic.guru#h-1-commit-1"></a>תרגיל 1: הפקודה commit</h3>
<p>ממשו את הפונקציה commit, שתופעל בעזרת הרצת הפקודה <code>python path/to/wit.py commit MESSAGE</code>.<br>
הפונקציה תרוץ אך ורק אם אחת מתיקיות האב של תיקיית העבודה העכשווית מכילה את התיקייה <code>.wit</code>.</p>
<p>פקודה זו למעשה יוצרת “נקודת שמירה” של ממש, שאליה נוכל לשחזר את הפרויקט כשנרצה.<br>
כשנעשה commit, ניצור “תמונה” מתוך הקבצים שאספנו לתוך staging_area בעזרת הפקודה add.</p>
<h4>
<a name="h-2" class="anchor" href="https://forums.pythonic.guru#h-2"></a>חלק ראשון: יצירת תיקייה</h4>
<p>בעת הפעלת הפונקציה, תיווצר תיקייה חדשה בתוך תיקיית <code>images</code> שיצרתם ביום 1 ב��זרת הפונקציה <code>init</code>.<br>
שמה של התיקייה החדשה יורכב מ־40 תווים אקראיים בטווח 0-9a-f (התווים: 1234567890abcdef). שם התיקייה הזה יקרא מעכשיו “commit id”.</p>
<h4>
<a name="metadata-commit-3" class="anchor" href="https://forums.pythonic.guru#metadata-commit-3"></a>חלק שני: יצירת קובץ metadata על ה־commit</h4>
<p>ליד אותה תיקייה ששמה הוא ה־commit id, יווצר קובץ באותו שם, עם הסיומת <code>.txt</code>, ובו יהיה התוכן הבא:</p>
<pre><code class="lang-nohighlight">parent=None
date=Sat Aug 26 19:00:20 2020 +0300
message=The message
</code></pre>
<p>החליפו את The message בהודעה שנכתבה אחרי המילה commit בפקודה שהוקלדה בשורת הפקודה.<br>
בינתיים, השאירו את השורה <code>parent: None</code> כפי שהיא.</p>
<h4>
<a name="h-4" class="anchor" href="https://forums.pythonic.guru#h-4"></a>חלק שלישי: יצירת השמירה</h4>
<p>הפונקציה תעתיק את תוכן התיקייה <code>staging_area</code> לתוך התיקייה החדשה שנוצרה.<br>
התוכן בתיקייה <code>staging_area</code> יישאר כמו שהוא ולא ישונה.</p>
<h4>
<a name="h-5" class="anchor" href="https://forums.pythonic.guru#h-5"></a>חלק רביעי: ארגון המידע לגישה עתידית</h4>
<ol>
<li>בקובץ בשם <code>references.txt</code> שנמצא ישרות תחת תיקיית <code>.wit</code>, הוסיפו את השורה <code>HEAD=commit_id</code>, כאשר במקום commit_id יכתב שם התיקייה שנוצרה בעקבות פקודת ה־commit. אם הקובץ לא קיים, צרו אותו.</li>
<li>בשורה אחרת באותו קובץ, כתבו <code>master=commit_id</code>. גם פה במקום commit_id יכתב שם התיקייה שנוצרה בעקבות פקודת ה־commit.</li>
</ol>
<h4>
<a name="h-6" class="anchor" href="https://forums.pythonic.guru#h-6"></a>חלק חמישי: מה קורה בקומיט הבא?</h4>
<p>נניח שנוספו בעזרת הפקודה add עוד כמה קבצים ל־staging_area, והמשתמש מבקש לעשות שוב commit.</p>
<p>כל התיקייה של staging_area תועתק לתיקייה חדשה בתוך images, שעבורה יוגרל commit_id חדש.<br>
הפעם, השורה בה כתוב parent צריכה להצביע על ה־commit_id הקודם (תוכלו לקחת אותו מ־HEAD).<br>
השורות HEAD ו־master ב־references.txt צריכות להתעדכן בהתאם ל־commit_id החדש שנוצר.</p>
<p>בונוס: אם אין שינוי מפעם שעברה, אל תאפשרו לעשות commit נוסף.</p>
<h3>
<a name="h-2-status-7" class="anchor" href="https://forums.pythonic.guru#h-2-status-7"></a>תרגיל 2: הפקודה status</h3>
<p>ממשו את הפונקציה status שתופעל בעזרת הרצת הפקודה <code>python path/to/wit.py status</code>.<br>
הפונקציה תרוץ אך ורק אם אחת מתיקיות האב של תיקיית העבודה העכשווית מכילה את התיקייה <code>.wit</code>.</p>
<p>הפקודה תדפיס הודעה למשתמש, בה יהיו הפרטים הבאים:</p>
<ol>
<li>ה־commit id שבו אנחנו נמצאים כרגע (ה־HEAD)</li>
<li>תחת הכותרת <code>Changes to be committed:</code>, יהיו קבצים שעשינו להם add מאז ה־commit האחרון, והם יתווספו לתיקייה שתיווצר ב־images בפקודת ה־commit הבאה.</li>
<li>תחת הכותרת <code>Changes not staged for commit:</code> יופיעו קבצים שנמצאים ב־staging_area כרגע, אבל התוכן שלהם ב"תיקייה האמיתית" לא תואם את התוכן שלהם בתיקיית staging_area.<br>
במילים אחרות: קבצים שעשו להם פעם add, נמצאים ב־staging_area באותו נתיב, אבל התוכן שלהם שֻׁנָּה מאז ה־commit האחרון ומאז שהתוכן שלהם שֻׁנָּה לא עשו להם add.<br>
באופן מעט משונה, קבצים שמופיעים ב־<code>Changes to be committed:</code> (סעיף 2) יכולים להופיע גם פה, אם ערכנו אותם, עשינו להם add ואז ערכנו אותם שוב.</li>
<li>תחת הכותרת <code>Untracked files:</code> יופיעו קבצים שאין להם קובץ תואם ב־staging_area.</li>
</ol>
<p><strong>בונוס:</strong> ממשו פקודת <code>wit rm</code> שתאפשר למחוק קבצים מ־<code>staging_area</code>.<br>
<strong>אם אתם לא מתייחסים לבונוס:</strong> אין צורך לתמוך במקרים של מחיקת קבצים מהתיקייה הראשית.</p>
<p>הבהרה: קבצים יכולים להופיע תחת הכותרת Changes to be commited גם אם עשינו להם commit בעבר. אם, לדוגמה, עשינו commit לקובץ שנקרא “targil.py”, אבל מייד שינינו אותו ועשינו לו <code>wit add</code> מחדש, בפקודת ה־status אנחנו נראה את הקובץ תחת הכותרת “Changes to be commited”.</p>
<h3>
<a name="h-3-checkout-8" class="anchor" href="https://forums.pythonic.guru#h-3-checkout-8"></a>תרגיל 3: הפקודה checkout</h3>
<p>ממשו את הפונקציה checkout שתופעל בעזרת הרצת הפקודה <code>python path/to/wit.py checkout commit_id</code>.<br>
הפונקציה תרוץ אך ורק אם אחת מתיקיות האב של תיקיית העבודה העכשווית מכילה את התיקייה <code>.wit</code>.</p>
<h4>
<a name="h-9" class="anchor" href="https://forums.pythonic.guru#h-9"></a>פעולה בסיסית</h4>
<p>הפונקציה checkout תחליף את כל הקבצים שנמצאים תחת “התיקייה המקורית” (זו שבתוכה יש את התיקייה <code>.wit</code>).<br>
הפונקציה תעתיק אל התיקייה המקורית את כל הקבצים שנמצאים בתיקייה <code>images/commit_id</code>, כאשר commit_id הוא הפרמטר שהוכנס לפקודת ה־checkout.</p>
<p>התחשבו בנקודות הבאות:</p>
<ol>
<li>כדי לא לאבד מידע, הפקודה תכשל ולא תתחיל לרוץ אם יש קבצים שמופיעים ב־<code>wit status</code> תחת הכותרת <code>Changes to be committed:</code>, או תחת הכותרת <code>Changes not staged for commit:</code>.</li>
<li>קבצים שמופיעים תחת הכותרת <code>Untracked files:</code> לא ישונו – הם ישארו כמו שהם, והקבצים שלצידם יוחלפו או יווצרו.</li>
</ol>
<p>עדכנו את ה־HEAD ל־commit_id שבו אתם נמצאים אחרי הרצת הפקודה.<br>
כמו כן, החליפו את התוכן של staging_area כך שתוכנה החדש יהיה תוכן התיקייה <code>images/commit_id</code>.</p>
<h4>
<a name="h-10" class="anchor" href="https://forums.pythonic.guru#h-10"></a>הרחבה</h4>
<p>אם במקום הפרמטר commit_id יכתב master, הפקודה תקח את ה־commit id המקושר אליו ותעשה checkout אל ה־commit_id הרלוונטי.</p>
<h4>
<a name="master-commit-11" class="anchor" href="https://forums.pythonic.guru#master-commit-11"></a>עדכון ה־master בעת פקודת commit</h4>
<p>אם התבצע commit וה־commit id שאליו מצביע HEAD הוא אותו commit id שאליו מצביע master (לפי references.txt), יש לעדכן את שניהם ל־commit_id החדש.<br>
אם התבצע checkout שהעביר את ה־HEAD כך שהוא לא מצביע לאותו commit id שאליו מצביע ה־master, ה־commit id שאליו מצביע master לא ישתנה.</p>
<p><a href="https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985/1">קריאת הנושא במלואו</a></p>
]]></description>
<link>https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985/1</link>
<pubDate>Wed, 26 Aug 2020 20:47:50 +0000</pubDate>
<guid isPermaLink="false">forums.pythonic.guru-post-7985-1</guid>
<source url="https://forums.pythonic.guru/t/10-2-commit-status-checkout/7985.rss">שבוע 10 – יום 2: commit, status, checkout</source>
</item>
</channel>
</rss>