ניהול גרסאות, פרסום קוד, ושיתוף פתוח
היום נדבר על שני קונספטים שונים אבל מקבילים בעולם התוכנה: ניהול גרסאות (Version Control) ו-קוד פתוח (Open Source). בסוף נראה איך הם נפגשים בפלטפורמה אחת - GitHub.
כל תוכנה, ובעצם כל יצירה, עוברת שלבים בתהליך שלה.
בעבודה הזאת של דור אמיתי מ-2017, היא לקחה ספר קיים (״היכן אני נמצאת״ מאת אורלי קסטל בלום) והתחילה לעצב אותו מחדש, מבלי לדעת איך הוא ייצא. בנקודות שונות של עבודה, היא החליטה ליצור ״ענף״ מהחלטה מסוימת וללכת בכיוון שלה, בזמן שהיא ממשיכה לפתח את הכיוון הקודם. כך יצאו 8 גרסאות (״ענפים״) שונים של אותה החלטה.
בהצגת הפרויקט, דור החליטה להציג את שלבי הפיתוח של כל ספר באמצעות חוברות/קונטרסים שמייצגים את הספר המלא, ולהם היא צירפה פתקים שמכילים את המחשבה או ההחלטה שנלקחה בשלב המסוים הזה.
מה שדור עשתה בפרויקט שלה הוא בעצם גירסה פיזית לרעיון הדיגיטלי של version control - תוכנה שעוקבת אחרי השינויים שקורים לקובץ מחשב כלשהו, ומאפשרת לתעד את השלבים השונים בעבודה עליו.
☝️ המטאפורה: אפשר ללכת אחורה בזמן ולראות מה קרה לקוד שלכם בכל נקודה. כל קומיט הוא ״תמונה״ שלו ברגע מסוים.
באופן מסורתי, תוכנות מחשב בנויות מקוד מחשב - הרבה שורות של הוראות שיחד אחראיות על איך שהתוכנה מתפקדת, נראית, שומרת ושולפת נתונים.
באופן מסורתי חברות תוכנה שמרו את הקוד שלהן בסוד - מה שנקרא ״קוד סגור״. הקוד הוא למעשה סוד מסחרי של חברת התוכנה, ומי שמעתיק אותו פוגע בזכות היוצרים שלה על הקוד.
אפשר גם להגן על קוד מחשב בעזרת פטנט, ואז גם אם מישהו מצליח לשחזר את הקוד המקורי - הפטנט מאפשר לתבוע את מי שמעתיק אותו ומשתמש בו ללא רשות.
הקוד נשמר בסוד מסחרי.
אסור להעתיק, אסור להפיץ, אסור לשנות.
זכויות יוצרים + פטנטים מגנים עליו.
הקוד פתוח לכולם, ברישיון.
מותר להשתמש, לשנות ולהפיץ - בתנאים.
הקהילה מתחזקת ומשפרת אותו יחד.
לא כל חברות התוכנה שמרו מכל משמר על הקוד שלהן. חברה מפורסמת כזאת היא IBM, יצרנית מחשבים שפירסמה באופן פומבי את קוד המקור של מערכות ההפעלה של המחשבים שלה.
מצד אחד, יכול להיות ש-IBM יכלה להרוויח הרבה יותר אם היתה שומרת בסוד, אבל הודות לכך שהקוד היה פתוח, חברות אחרות יכלו לייצר מחשבים ומערכות הפעלה ״תואמות IBM״, ובכך להגדיל את הפופולריות של הפלטפורמה ש-IBM פיתחה.
💡 ההיגיון הכלכלי של קוד פתוח: מצד אחד, המפתח מפסיד כביכול את מה שיכול היה להרוויח ממכירת זכויות שימוש. מצד שני - הקוד הפתוח מעודד שימוש והפצה, ומגביר את הפופולריות של הפלטפורמה כולה.
מצד אחד, ראינו כבר שמאוד קל להציג את קוד המקור של אתר כלשהו (View Source) - אבל האם זה אומר שמותר לנו להשתמש בו?
לא באמת. המשמעות של ״קוד פתוח״ היא לא זה שאנחנו יכולים לראות את הקוד, אלא שהמפתחים של הקוד מרשים לנו להשתמש בו ואפילו להפיץ אותו מחדש.
☝️ View Source ≠ Open Source. הצגת הקוד היא תכונה טכנית של הדפדפן, לא רשיון שימוש.
ישנם סוגים שונים של רישיונות בקוד פתוח - כמו MIT,
Apache, GPL ועוד. כמעט כולם מבוססים על
כמה רעיונות פשוטים:
🔍 דוגמה אמיתית: פתחו את אינסטגרם → תפריט בעמוד הפרופיל → ״אודות״ → ״ספריות קוד פתוח״. תגיעו לעמוד ארוך שמפרט את כל רישיונות הקוד הפתוח של הספריות שאינסטגרם משתמשת בהן בקוד שלה (אינסטגרם עצמה היא קוד סגור).
אחת ממערכות ההפעלה הפופולריות בעולם. רוב השרתים באינטרנט רצים עליה. נחשבת לאמינה ובטוחה הודות לקהילה גדולה של מתכנתים וחברות שמתחזקים אותה.
מערכת ניהול תוכן פופולרית. השם נשאר ביד היוצר המקורי שמפעיל את wordpress.com, אבל אפשר גם להוריד את הקוד ולהריץ על שרת משלכם.
האנציקלופדיה הפתוחה - גם התוכן וגם התוכנה שמפעילה אותה (MediaWiki) הם קוד פתוח.
תוכנת ניהול הגרסאות שעליה מבוסס GitHub היא בעצמה תוכנת קוד פתוח. נכתבה ע״י לינוס טורבלדס (יוצר לינוקס).
חבילת תוכנות אופיס פתוחה - מעבד תמלילים, גיליון נתונים ותוכנת מצגות. חלופה חינמית ל-Microsoft Office.
סביבות הקוד היצירתי שאנחנו משתמשים בהן בקורס - שתיהן פתוחות, ומבוססות על קהילה רחבה של מפתחים ואמנים.
GitHub הוא אתר שמארח פרויקטים בקוד פתוח, באמצעות תוכנת
git שעוקבת אחרי שינויים.
אפשר להיכנס לאתר ולבקר בפרויקטים שונים, ואפילו לראות אותם בשלבי עבודה שונים - כל קומיט שמור, וכל ענף נראה לעין.
☝️ ההבדל בין git ל-GitHub: git
היא התוכנה שרצה במחשב שלכם ועוקבת אחרי שינויים. GitHub
הוא אתר אינטרנט שמאחסן את המאגרים שלכם בענן ומאפשר שיתוף.
המושגים שצריך להכיר כדי להתחיל לעבוד עם GitHub:
| מונח | הסבר |
|---|---|
| Repository | תיקייה שנמצאת על המחשב שלכם / בגיטהאב / גם וגם - והיא למעשה מכילה את כל הפרויקט. |
| Commit | נקודה בתהליך שאתם רוצים ״לשמור״, בין אם זה כדי לשתף עם העולם או עם קולגות, או אפילו בשביל לסמן את השינוי לעצמכם. יש מתכנתים שעושים קומיט על כל פיפס קטן, ויש כאלה ששוכחים מזה ואז עושים קומיט פעם בכמה ימים. |
| Branch | כל פרויקט מתחיל עם ענף (גזע?) מרכזי אחד - main.
אפשר בכל שלב לעשות checkout - שזה אומר לפצל ענף חדש
מתוך הענף הנוכחי ולעבוד עליו בנפרד.
הענף יכול להיות גירסה של הפרויקט, או משהו אחר לגמרי (למשל אתר שמפרסם
את הפרויקט או מדריך למשתמש). |
| Publish | אחרי שפותחים repository במחשב, אפשר ״לפבלש״ אותו בגיטהאב - כלומר להעלות אותו לראשונה לענן. |
| Push | העתקה של הקומיטים שעשיתם במחשב לגיטהאב. |
| Pull | העתקה של הקומיטים שלכם ומיזוג שלהם לענף הראשי. בד״כ לפני זה עושים Pull Request - מין ״מכתב״ שנשלח בתוך גיטהאב לענף הראשי ובו מפורטים השינויים שעשיתם. אם אתם עובדים בצוות, זו הזדמנות שחבר צוות/מנהל יסתכל על השינויים ויוודא שהם בסדר לפני שממזגים. |
| Fork | שכפול של פרויקט קיים ל-repository חדש משלכם. למשל אם ראיתם פרויקט שהייתם רוצים להשתמש בו כנקודת מוצא לפרויקט משלכם, או כדרך להציע שינויים לפרויקט שאינו שלכם. |
| Fetch | משיכת שינויים מענף הפרויקט בגיטהאב למחשב שלכם. |
| Update from main | מיזוג שינויים מהענף הראשי לתוך הענף שלכם, אם אתם עובדים בצוות דרך גיטהאב. |
שווה לבקר ולהציץ איך נראה פרויקט קוד פתוח בעולם האמיתי:
בתרגיל הזה נתאמן על כל הזרימה של GitHub - מהתקנה ועד פרסום אתר חי באינטרנט. נעשה את זה בשני שלבים: קודם תרגול על דף קטן, ואז הפרסום של הפרויקט האישי שלכם מהקורס.
היכנסו ל-github.com/signup
ופתחו חשבון חדש.
בחרו שם משתמש שתשמחו לחיות איתו - הוא יופיע בכל
כתובת של פרויקט שתעלו (למשל github.com/your-name/your-project).
הורידו והתקינו את GitHub Desktop -
אפליקציה גרפית שעוטפת את git ועושה את העבודה הרבה יותר נוחה.
בפעם הראשונה - התחברו עם החשבון שפתחתם בשלב 1.
💡 אם בא לכם להתאמן מאוחר יותר, אפשר לעבוד גם בטרמינל עם פקודות
git ישירות - אבל לתרגיל הזה נשתמש באפליקציה.
לפני שניגע בפרויקט האישי - בואו נתרגל את כל הזרימה על דף קטן וזניח.
ב-GitHub Desktop, בחרו File → New Repository.
תנו לפרויקט שם כמו hello-github, ובחרו תיקייה במחשב
שתשמש כ-repository.
בתיקייה החדשה, צרו קובץ index.html פשוט עם תוכן כמו:
<!DOCTYPE html>
<html lang="he">
<head><meta charset="UTF-8"><title>Hello GitHub</title></head>
<body>
<h1>שלום, גיטהאב!</h1>
<p>זה האתר הראשון שלי באינטרנט.</p>
</body>
</html>
חזרו ל-GitHub Desktop - תראו שהשינוי מופיע. כתבו תיאור קצר ב- Summary (למשל ״קומיט ראשון״) ולחצו Commit to main.
בראש החלון תראו כפתור Publish repository. לחצו עליו.
בחלון שנפתח - בטלו את הסימון של ״Keep this code private״
כדי שהפרויקט יהיה ציבורי (כי אנחנו רוצים להפעיל GitHub Pages חינם).
אחרי כמה שניות הפרויקט יהיה זמין בכתובת:
github.com/[שם-המשתמש-שלכם]/hello-github
היכנסו לדף הפרויקט באתר GitHub → לשונית Settings → תפריט שמאלי Pages.
תחת Source בחרו Deploy from a branch,
ותחת Branch בחרו main ולחצו Save.
אחרי דקה-שתיים, הדף שלכם יהיה חי בכתובת:
https://[שם-המשתמש].github.io/hello-github/
🎉 זהו - יש לכם דף חי באינטרנט!
נסו לעשות שינוי קטן ב-index.html, לעשות Commit
ואז Push - ותראו שהאתר מתעדכן אוטומטית.
אחרי שהבנתם את הזרימה - הגיע הזמן להעלות לגיטהאב את הפרויקט האישי שלכם מהקורס: האתר שמרכז את כל מה שלמדתם בסמסטר.
חזרו על השלבים 3-5, אבל הפעם:
portfolio,
digital-skills, או שם הקורס.💡 טיפ: אם אתם רוצים שהאתר יהיה זמין
ישירות בכתובת [שם-המשתמש].github.io (בלי שם פרויקט בסוף) -
קראו ל-repository בדיוק [שם-המשתמש].github.io.
זה ה״אתר אישי״ של חשבון הגיטהאב שלכם.
מרגע זה - בכל פעם שתשפרו את האתר במחשב שלכם, עשו Commit ו-Push, והאתר באינטרנט יתעדכן אוטומטית.
כלי GitHub מומלצים:
בפרקים הקודמים: