גיטהאב למתחילים
גיטהאב היא אחת הפלטרפורמות המוכרות והפופולריות לניהול פרויקטים ותהליכי פיתוח, שיתוף תוכן ואחסון קוד.
המאמר הינו חלק מסדרת מאמרים על VSCode, Github, קוד וכן הלאה. המאמר הנוכחי מתמקד בפלטפורמה של Github למתחילים.
מערכות לניהול גרסאות כמו SVN או CVS קיימות שנים רבות, אך גיטהאב שונה מכל אותן מערכות מכיוון שהיא מערכת מבוזרת לניהול גרסאות, כלומר מספר רב של אנשים וצוותים יכולים להשתמש בה ולגרום למינימום בעיות (באופן יחסי).
כאשר עובדים עם פלטפורמת גיטהאב ישנם מספר יתרונות של ניהול ובקרת גרסאות, גמישות בפיתוח, ביצועים ואפילו יכולות אבטחה מתקדמות.
מהו גיטהאב
הפלטפורמה של Github מבוססת על שירות ענן (SaaS) ומאפשרת לנהל תהליכי פיתוח, לעקוב אחר שינויים בפרויקט בקוד, לאחסן סקריפטים, להעלות תוכן טקסטואלי ובמקרים מסוימים אפילו אפשר להשתמש בחשבון בתור בלוג אישי.
לפני שמתחילים לנהל תהליכי פיתוח ולנהל פרויקטים של פיתוח כדאי מאוד להבין מהם העקרונות של גיטהאב, הרכיבים והפונקציונליות שאיתם אנו יכולים לעבוד. כיום גיטהאב אינו אותו גיט רגיל כמו שהיה לפני שנתיים-שלוש, אלא פלטפורמת גיט מתקדמת המספקת אפשרויות מתקדמות לפיתוח (בעקיר בחשבונות ארגוניים) ומאפשרת אינטגרציה עם כלים צד שלישי ויכולות גיט מותאמות ונוספות.
המטרה העיקרית של גיטהאב היא לספק עבודת צוות, שלמות של המידע, מהירות בתהליכי פיתוח ותמיכה בתהליכים מבוזרים.
גיטהאב מבוסס על מערכת גיט. מערכת גיט מספקת בבסיסה יכולות מגוונות כמו ניהל גרסאות, ניהול שינויים, תיוג גרסאות ויכולות הנוספות שבעיקרן מבוססות על ממשקים שונים.
גיטהאב היא מערכת חכמה לניהול גרסאות והיא מאפשרת לנהל גרסאות של קבצים ובעיקר כמערכת לניהול גרסאות קוד.
גיטהאב היא פלטפורמה שמספקת מאגר העוקבת אחר השינויים קבוצי קוד של אותו פרויקט, וכל שינוי המבוצע בקובץ או בקוד מעודכן במאגר. השינוי שחל על אותו קובץ מכיל בתוכו תיאור עם אותו שינוי, מי ביצע את השינוי ומי אחראי על תהליך השינוי. במצב כזה מבוצעת השליחה של השינויים (נקרא Commit).
גיטהאב מאפשרת לנו לעבוד ביחד כצוות כאשר כל אחד יכול לעבוד עם עותק מקומי ולשלוח את השינויים אל המאגר המרכזי (נקרא Repository).
מדוע להשתמש בגיטהאב? כל שינוי בקוד צריך היות מתועד וחלילה עם הפרויקט השתבש אז ניתן לחזור לגרסה ישנות יותר במהירות, ולכן העבודה בגיטהאב יכולה לסייע כיחיד ובפרט יכולה לסייע בעבודה של צוות בגלל הסדר בתהליך.
טיפ: לפי סקר שנערך בקרב מפתחים נמצא כי כמעט 92% מהם עובדים עם פלטפורמות Git כלשהן כאשר Github זוכה לפופולריות רבה.
הממשק של גיטהאב הוא ממשק נוח (לגמרי) ואפילו נוח לכאלה שרק מתתחילים את דרכם, וכמובן המקצוענים בתחום עושים עם הפלטפורמה הרבה מעבר.
בגלל שהממשק מאוד נוח וידידותי לניהול ותפעול הפופולריות של גיטהאב הביאה אותו למצב שמפרסמים בו תכנים נוספים כדוגמת: מדריכים, מאמרים ולא בהכרח רק תוכן שהוא מבוסס קוד.
אם נקח לדוגמה את החשבון שלי בגיטהאב אז החשבון מכיל בעיקר תוכן אשר מבוסס על סקריפטים שונים, למשל, סקריפטים מבוססים PowerShell ומעט מדריכים בנושאים הקשורים אל PowerShell או KQL. בנוסף ניתן למצוא תכנים שבוצע להם פורקינג והוכנסו בהם מספר שינויים.
ניתן לממצוא חשבונות רבים ומגוונים בגיטהאב המתמקדים בשפות תכנות שונות, בנושאי פיתוח ותכנים נוספים.
פתיחת חשבון – בכדי לפתוח חשבון גיטהאב ניגשים לכתובת הבאה Join GitHub ופותחים חשבון אישי ללא עלות ומשם אפשר להתחיל לעבוד על המאגר ולאחסן קוד. ישנם מספר סוגי חשבונות, החל חשבון אישי ועד חשבון ארגונים.
רכיבים ופעולות עיקריות
רגע לפני שמתחילים לעבוד עם גיטהאב כדאי לדעת מהם הרכיבים העיקריים, מהם המושגים ואת עקרונות הבסיסיים שעליהם מושתת גיטהאב. לגיטהאב ישנם רכיבים רבים גם ברמת יחיד וגם ברמת צוות, חלקם מאותם רכיבים חופפים בין עבודת יחיד לבין עבודת צוות.
מאגרים
אחת הפעולות העיקריות של גיטהאב בכל פרויקט היא יצירה ועבודה עם מאגרים שונים, כלומר לפני כל פרויקט או תהליך פיתוח אנו ניצור מאגר מסוים בכדי שנוכל לאחסן שם תכנים מסוימים.
מאגר בפלטפורמת גיטהאב הוא מאגר מידע או בשמו הידוע Repository או Repo והוא לרוב מכיל תיקיות וקבצים. קיימים סוגים שונים של מאגרים:
מאגר מרכזי או מרוחק (Central repository), אשר נמצא בפלטפורמה של גיטהאב, ומרכז את כלל הגרסאות של כל חברי הצוות המשויכים לכתיבת הפרויקט והקוד.
מאגר משוכפל (fork) – מאגר שנמצא בגיטהאב אך משוכפל מתוך הפרויקט המקורי של החשבון לחשבון אחר או למיקום אחר במאגר.
מאגר מקומי בתחנה (Local repositories) הממוקם על תחנה מקומית של כל חבר צוות ומכיל את הפרויקט והקוד, בד”כ נעשה ע”י נקרא Cloning.
ישנם כלים שונים לסנכרון ועדכון המאגר המקומי הקיים בתחנות הקצה של חברי הצוות מול המאגר המרוחק אשר מכיל את כל הפרויקט והקוד, ולכן כל חבר צוות יכול לסנכרן את השינויים מתוך המאגר המקומי שלו ולחלופין יכול לקבל עדכונים מתוך המאגר המרוחק בעקבות שינוי שבוצע ע”י חבר צוות אחר בפרויקט.
יצירת מאגר (Repo) – כמו שהוזכר קודם לכן, מאגר נועד לנהל ולסדר את הפרויקט קוד ולמעשה מכיל ספריות, Data Set וקבצים (כל סוגי הקבצים) השייכים לפרויקט. יצירת פרויקט היא פעולה פשוטה והדבר האחרון שמופיע ביצירת פרויקט הוא האפשרות (אופציונלית) ליצירת קובץ Readme לתיאור הפרויקט.
טיפ: במידה ויוצרים פרויקט חשוב מומלץ ליצור קובץ רישיון (licesne file)
בכדי ליצור מאגר נבחר באפשרות יצירת New Repository ולאחר מכן נמלא מספר פרטים נדרשים:
- Owner – במידה וישנם מספר חשבונות יש לוודא שיוצרים repository בחשבון הנכון
- שם repository
- האם ציבורי או פרטי
- האם ישנו צורך בקובץ Readme (עדיף כן לכלול)
טיפ: במידה ויוצרים Repository בחשבון מסוים ניתן להעביר אותו (transfer) אל חשבון אחר
Version Control
גיטהאב מאפשרת לבצע בקרה וניהול של גרסאות קבצים ומעקב אחר השינויים אשר נעשים בפרויקט קוד, ולכן ככל שהפרויקט גדל כך הצורך בניהול גרסאות נעשה משמעותי יותר.
ביצוע בקרות בפרויקט נחלק לשניים עיקריים: הראשון (branch) מאפשר לעבוד על גרסאות שונות ולמעשה מספק שמירת עותק מקורי של הפרויקט, וע”י כך הוא מאפשר לעבוד על אותו פרויקט בנפרד ולבצע שינויים ללא הפרעה ובכדי לא להשפיע על הקוד המקורי.
branch הוא ענף מרכזי שתחתיו יכולים להיות ענפים נוספים, ולפני שמבצעים שינוי בענף המקורי יש לבצע שינויים בתתי ענפים.
השני הוא מיזוג (merge) של קוד הפרויקט הפעולה הזאת יכולה להתבצע, למשל לאחר שמבצעים שינויים בקוד ומוודאים שהקוד תקין ואין איתו בעיות כלשהן, במצב כזה ניתן לבצע Merging לאותו פרויקט בחזרה.
טיפ: כאשר עובדים עם פרויקט בסביבת ייצור לרוב השינויים בקוד והבדיקות ייעשו על גבי ענף משני ורק לאחר ביצוע בדיקות יעודכנו בענף הראשי.
בשתי הפעולות ישנה אפשרות לעקוב ולבצע חזרה לאחור במקרה של בעיה בקוד.
ענפים
ענף (branch) הוא גרסה של המאגר וכאשר יוצרים מאגר חדש באופן אוטומטי נוצר ענף ראשי (נקרא main branch) ועל אותו ענף אנו מבצעים את כלל הפעולות של אחסון קוד, ביצוע שינויים, חזרה לאחור, שכפול ענף וכן הלאה.
branch הוא ענף מרכזי שתחתיו יכולים להיות ענפים נוספים, ולפני שמבצעים שינוי בענף המקורי יש לבצע שינויים בתתי ענפים.
פעולות מרכזיות
פעולת Fork היא פעולה שנועדה לבצע סוג של העתקה ושכפול מאגר מתוך חשבון קיים לחשבון אחר, ובפועל הפעולה של forking מאפשרת לשכפל מאגר מתוך חשבון מסוים אל החשבון האישי שלנו.לאחר שביצענו שכפול של מאגר אל החשבון האישי אנו יכולים לבצע שינויים והתאמות באותו מאגר, או לחלופין אנו יכולים לקבל את השינויים במאגר שלנו בעקבות השינויים שנעשים במאגר שהועתק.
פעולת Clone האי פעולת העתקה נוספת שמאפשרת לנו להעתיק ולהוריד את המאגר אל התחנה המקומית, למעשה אנו יוצרים עותק מקומי של המאגר בתחנה שכולל את כל התוכן שיש במאגר, כמו, קבצים, קישורים בין חשבונות, שיוך לענפים וכן הגדרות ומאפיינים מסוימים של המאגר.
טיפ: ניתן ליצור אינפסור העתקים ע”י יחיד או צוות
פעולת Commit היא פעולה שנועדה לעדכן את השינויים שבוצעו במאגר מקומי אל המאגר המרוחק, כלומר כל שינוי שבוצע במאגר מסוים ברמת הקובץ מצריך Commit אל המאגר המרכזי. במידה ואנו עובדים על קובץ מקומי אז השינוי יצריך עדכון מקומי (Commit) ורק לאחר מכן ישלח אל המאגר המרוחק (ע”י פעולה נוספת).
פעולת Push היא הפעולה ששולחת את השינויים אל המאגר המרכזי, או ליתר דיוק על הענף המרכזי (Main branch) שנמצא בגיטהאב.
כאשר עובדים עם פרויקט וקוד עוברים מספר שלבים בדרך, לחלקם אנו חשופים ולחלקם קצת פחות, וישנם הבדלים במספר הפעולות שאנו צריכים לבצע בין אם מדובר על ביצוע פעולות על מאגר מקומי או בין אם מדובר על ביצוע פעולות ברמת הממשק בגיטהאב עצמו.
בכל מצב שבו אנו עובדים ומבצעים שינויים עם מאגר מקומי מתרחשים מספר פעולות ושימוש ברכיבים מסוימים הנחלקים לשלושה שלבים עיקריים:
Working Copy – השלב שבו התחנה המקומית מסמלת את הקבצים אשר נמצאים בתיקיית הפרויקט. כאשר אנו עובדים על קובץ מסוים ושמרנו את השינויים, התיקייה והשלב של אותו Working Copy עובר שינוי.
Staging Copy – כאשר בוצע שינוי, אנו צריכים להוסיף את השינויים שביצענו למעקב. בשלב זה, אותו Staging Copy הוא האיזור שבו נמצאים הקבצים שעודכנו, ועדיין בשלב זה עדיין לא בוצע Commit לקבצים.
Committed Copy – בשלב זה התחנה המקומית שבה נמצאים הקבצים שעברו Commit נדחפים אל המאגר ומכאן נוסף Commit. למעשה, נוצר העתק של כל הקובץ עם השינוי החדש בתחנה המקומית בתוספת הודעה קצרה המפרטת על השינוי שביצענו.
טיפ: במידה ועבדים עם תחנה מקומית ורוצים לראות את כל הקבצים המעורבים בתהליך צריך לאפשר הצגת קבצים מוסתרים
אפשרות או קובץ gitignore. – בממשק גיטהאב או בעבודה בתחנה מקומית ישנה אפשרות לא לעקוב אחר קבצים שעולים למאגר ולכן נרצה לסמן אותם מקומית או מול הכלי שאיתו אנו עובדים באמצעות gitignore
איך Github מסייע
בפעולות של כתיבת קוד, ניהול שינויים בפרויקט קוד, ניהול היסטוריה וכן הלאה כל שינוי הוא משמעותי ועלול ליצור תסבוכת סביב שינויים בקוד, ולכן בפלטפורמה של גיטהאב ניתן לנהל את השינויים ע”י יצירת branch, ניהול כל שינוי, זיהוי בעיות וקונפליקטים.
ניהול הקוד מאפשר לזכור את כל הגרסאות שנשמרו עד כה, כולל מצבים בהם שומרים מספר קבצים בפעולה אחת, ולמעשה כך אפשר לבצע שינוי בקוד אשר משפיע על מספר קבצים ובנוסף לחזור אחורה בפעולה אחת בכדי לבטל את השינוי.
בנוסף לכך, ניהול משימות וחיבור משימות הפלטפורמה של Github מאפשרת בנוסף לנהל שינויים בקוד, כך שבכל פעם שאתם מבצעים שינוי אפשר לציין לאיזה משימה הוא קשור, ואחרי שמשימה זאת מסתיימת אפשר לחזור אחורה ולראות את שינויי הקוד שהיו רלוונטים אליה.
בנוסף האפשרות של שיתופי פעולה עם יכולות לשתף פרויקט, מאגר או קוד עם מפתחים נוספים על פרויקט ולראות כל אחד את השינויים של השני, לעשות Review על שינויים ולחבר את הדברים כשהקוד מוכן.
לסיכום, הפלטפורמה של גיטהאב מסייעת בניהול פרויקט ותהליכי פיתוח ומאפשרת לצוות פיתוח להתנהל בצורה יעילה כאשר מבצעים שינויים ובמידת הצורך לבצע חזרה לאחור. הממשקים השונים כמו Codspaces מאפשר למקדם את הפיוח סביב גיטהאב ובמירה רציפה על סביבת העבודה.