מערך שיעור: Git ו-GitHub
משך: יום לימוד מלא — 6 שעות אקדמיות (270 דקות).
מטרת השיעור: הסטודנטים יבינו את המודל של Git (שלושה אזורים ו-Commit כתמונת מצב), יעבדו במחזור add → commit → push בביטחון, ויסיימו את היום עם פרויקט Python אמיתי ב-GitHub.
בסוף השיעור הסטודנטים צריכים:
- להסביר את שלושת האזורים ואת ההבדל בין add, commit ו-push.
- לנהל Repository מקומי: init, status, add, commit, log, diff ו-
.gitignore. - לחבר Repository ל-GitHub, לדחוף אליו, ולכתוב הודעות Commit טובות.
דגש קריטי: git status לפני כל פעולה, וCommit ≠ Push. מרבית התקלות של מתחילים נובעות משתי הנקודות האלה.
לא בסקופ (לפי הסילבוס): Branches, Merge, Pull Requests ו-Conflicts. אם נשאלים, לומר שזה יגיע בהמשך המסלול.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
פתיחה: תיקיית project_final_v3_REALLY_FINAL | 10 דק' | להציג תיקייה כזו על המסך. כולם מזדהים. |
| מושגים: VC, Repository, Commit, שלושה אזורים | 35 דק' | ציור שלושת האזורים על הלוח, והוא נשאר כל היום. אנלוגיית התמונה הקבוצתית. |
| הגדרת git config + init | 15 דק' | לוודא שכולם הגדירו שם ומייל. לבדוק עם --list. |
| הפסקה | 15 דק' | |
| פקודות בסיס: status, add, commit, log, diff | 50 דק' | פרויקט calculator. אחרי כל פקודה: git status, ולהצביע על הציור על הלוח. |
.gitignore | 15 דק' | __pycache__ מופיע, ואז נעלם. הדגמת סכנת add . עם קובץ “סיסמה”. |
| הפסקה | 15 דק' | |
| GitHub: חשבון, Repository, remote, push | 45 דק' | לפתוח חשבונות מראש אם אפשר. לטפל בבעיות אימות אחת-אחת. |
| הודעות Commit + משימת הסיכום | 60 דק' | כל סטודנט מעלה את פרויקט הספרייה עם 5 Commits. המרצה עובר ובודק את ההיסטוריה באתר. |
| בדוק את עצמך | 10 דק' |
דגשים להעברת השיעור
- Git הוא מודל מנטלי, לא רשימת פקודות. כל פקודה מוצגת כ"תזוזה" בין האזורים על הלוח.
- הכנה מוקדמת: לבקש מהסטודנטים לפתוח חשבון GitHub לפני השיעור. ביום עצמו, יצירת חשבונות (ואימות מייל) גוזלת זמן רב.
- אימות: רוב התקלות יהיו כאן. Git Credential Manager פותח דפדפן ב-Windows וב-Mac. לוודא שזה עובד אצל כולם לפני המשימה. כגיבוי, להכין הסבר קצר על Personal Access Token.
- Vim: מישהו ייתקע בו. לכתוב על הלוח
Escואז:q!, ולהזכיר להשתמש ב--m. - סודות: לספר סיפור אמיתי על מפתח AWS שדלף ל-GitHub ונוצל תוך דקות. זה נחרט.
- הודעות Commit: לעשות “Code Review” חי להיסטוריה של 2–3 סטודנטים (בהסכמתם) על המסך.
- הרגל לשאר הקורס: מהיום כל תרגיל ב-Repository. בנושא OOP, הפרויקט ינוהל ב-Git מהשורה הראשונה.
מושגים
| מושג | הסבר קצר |
|---|---|
| Version Control | מערכת שמתעדת את היסטוריית השינויים בקבצים. |
| Git | מערכת VC מבוזרת שרצה מקומית. |
| Repository | פרויקט + תיקיית .git עם ההיסטוריה. |
| Working Directory | הקבצים כמו שהם עכשיו בדיסק. |
| Staging Area / Index | השינויים שנבחרו ל-Commit הבא. |
| Commit / Hash | תמונת מצב עם הודעה / מזהה ייחודי. |
| HEAD | ה-Commit הנוכחי (האחרון בענף). |
| Untracked / Modified / Staged | קובץ חדש / שונה / מוכן ל-Commit. |
.gitignore | תבניות של קבצים ש-Git מתעלם מהם. |
| GitHub | שירות לאחסון Repositories בענן. |
| Remote / origin | עותק מרוחק / הכינוי המקובל לראשי. |
| push / clone / pull | שליחה ל-Remote / הורדת Repository / הורדת שינויים. |
| README.md | תיאור הפרויקט, שמוצג בעמוד הראשי ב-GitHub. |
תרגיל חשיבה
שאלת פתיחה (לפני Staging): “שיניתי היום שלושה דברים בפרויקט: תיקנתי באג במחשבון, שיפרתי את ה-README, וגם הוספתי קובץ עם הערות אישיות. מחר מגלים שהתיקון שלי שבר משהו אחר. מה הייתי רוצה שתהיה האפשרות שלי?”
מהלך:
- לאסוף רעיונות: “לבטל את התיקון בלבד”, “לראות מה בדיוק שיניתי”.
- לשאול: “אם כל שלושת השינויים נשמרו כ’שמירה’ אחת, אפשר לבטל רק את התיקון?” לא. לכן כל שינוי לוגי צריך להיות Commit נפרד.
- לשאול: “אז איך בוחרים מה נכנס לכל שמירה?” זה בדיוק תפקיד ה-Staging Area.
- “ומה עם קובץ ההערות האישיות?” לא נכנס בכלל, ומכאן ל-
.gitignore.
מה המרצה מראה בסוף: שלושה Commits נפרדים ב-git log --oneline, ואז את git show <hash> של Commit התיקון (מציג בדיוק מה השתנה בו). משפט סיום: “Commit טוב הוא שינוי אחד שאפשר להבין, לבדוק ולבטל לבד — ההיסטוריה היא תיעוד ההחלטות שלכם.”