מדריך git ו-GitHub
git היא מערכת חכמה לניהול גירסאות.
git מסייעת לנהל מעקב אחרי שינויים בקבצים וכן מאפשרת עבודת צוות במקביל על אותו פרויקט.
GitHub הוא שירות ענן לאחסון קבצי קוד שמבוסס על גיט.
ראשית יש להתקין את git. ניתן לבדוק אם git מותקנת באמצעות הפקודה הבאה:
הפקודה מחזירה את מספר הגירסה. אם git לא מותקנת, תוצג הודעה שהפקודה git לא מוכרת.
gitignore
לפני שנתחיל לעבוד עם git על הפרויקט שלנו, נדאג להוסיף קובץ gitignore.
קובץ gitignore הוא קובץ שמכיל הגדרות בתבנית מוסכמת שאומרות ל-git מאיזה קבצים להתעלם ולא לעקוב אחר השינויים שבהם.
קבצים שנוצרים בזמן build או פקג'ים חיצוניים אין טעם לנהל גירסאות עבורם.
עבור כל שפה או טכנולוגיה יש לנו תבנית בסיסית של הקובץ gitignore.
עבור פרויקט דוטנט ניתן ליצור את הקובץ באמצעות הפקודה הבאה:
נשים לב להריץ את הפקודה ב-cmd כאשר אנחנו במיקום של תיקיית הפרויקט הראשית.
תהליך העבודה עם git
יש לנו תיקיה במחשב שבה נמצא הקוד אותו ברצוננו להעלות ל-GitHub.
init
נפתח את ה-cmd במיקום של התיקיה ונריץ את הפקודה הבאה:
הפקודה init אומרת לgit להתחיל להאזין לשינויים בתיקיה.
ניתן לראות שבתוך התיקיה נוספה תיקיה מוסתרת בשם git. תיקיה זו מנוהלת באמצעות git ובה נשמרים כל השינויים שנעשים בקבצים.
config
כאשר עובדים ממחשב במקום ציבורי (קרי, בסמינר) יש לקנפג את השם והאימייל של המשתמש ברמת התיקיה, כדי למנוע בלבול ורישום של פעולות על שם מישהי אחרת שהתחברה לחשבון שלה מאותו מחשב.
נריץ את הפקודות הבאות עם שם המשתמש והאימייל שרשומים ב-GitHub
status
נבדוק מה סטטוס הקבצים בתיקיה באמצעות הפקודה הבאה:
הפקודה status מציגה לנו את מצב הקבצים.
חשוב להבחין בין המצבים ש-git מנהל.
untracked
- שינויים ש-git מזהה ומודעת אליהם, אך הם עדין לא מנוהלים באמצעות git ועומדים כרגע בצד.staged
- שינויים ש'הועלו לבמה', כלומר, סומנו כשינויים שיכנסו ב-commit הבא.committed
- שינויים שנרשמו ב-commit (נקודת שחזור) ויעלו ל-remote ב-push הבא.
הפקודה status מציגה את השינויים בהתאם למצב שלהם.
שינויים שהם untracked מסומנים בצבע אדום.
שינויים שהם staged מסומנים בירוק.
add
כדי להכניס שינויים למעקב של git ולסמן אותם שיכנסו ל-commit הבא, נריץ את הפקודה הבאה:
פקודה זו תבצע staging על השינויים בקובץ index.html.
ניתן להכניס את כל השינויים בבת אחת באמצעות הפקודה git add ואז רווח ונקודה, כך:
כעת נריץ שוב את פקודת git status ונוכל לראות שהשינויים האדומים הפכו לירוקים.
commit
כעת, נבצע commit על כל השינויים שהם staged, נריץ את הפקודה commit:
לכל commit יש להזין message בתוך המרכאות. הדגל m- הוא קיצור של המילה message.
מומלץ שה-message יתאר את סט השינויים שנעשו ב-commit הזה, כדי לאפשר לנו ניהול נבון של הגירסאות והבנה טובה יותר של היסטוריית הקוד.
ניתן לאחד בין פקודות ה-add וה-commit, כך:
log
ניתן להריץ פקודת git log כדי לראות את התיעוד של ה-commit.
תהליך העבודה עם GitHub
כל הפקודות עד לשלב זה הן פעולות שבוצעו ב-git באופן לוקלי. אין להן קשר ל-GitHub ולענן בכלל.
ניתן להשתמש ב-git ברמה הלוקלית כדי לנהל גירסאות של קבצים, ללא העלאה לענן.
כדי להעלות לענן יש ליצור חשבון ב-GitHub (לצורך הדוגמא. יש שירותי ענן נוספים שמבוססים על git, כמו Gitlab, BitBucket)
כעת, ניצור repository חדש ב-GitHub. נקפיד לא להוסיף לו קובץ readme או gitignore (כדי לא ליצור חוסר תיאום בין הקבצים שבענן לבין הקבצים שבלוקלי, מה שעלול קצת לסבך אותנו בהעלאה הראשונה.)
כעת עלינו לחבר את הקוד הלוקלי במחשב ל-repository ב-GitHub.
ה-repository ב-GitHub הוא ה-remote שלנו - כלומר, השרת המרוחק.
remote
נריץ את הפקודה שמוסיפה את הגדרת ה-remote, כך:
המילה origin היא שם ה-remote, ניתן לבחור שם אחר אם רוצים, אבל מקובל להשתמש בשם origin.
הקישור הוא כתובת ה-repository שאותה ניקח מ-GitHub.
ניתן לבדוק איזה remote מוגדר לתיקיה שלנו באמצעות הפקודה:
אם בטעות הגדרנו remote שגוי, נוכל למחוק את ה-remote באמצעות הפקודה:
כאשר origin הוא שם ה-remote שהגדרנו.
branch
אם ה-repository שלנו ב-GitHub ריק לגמרי (מה שאמור להיות בשלב זה) עלינו ליצור את הענף הראשי.
git מבוסס על branches - ענפים. יש את הענף הראשי וניתן ליצור ממנו ענפים רבים.
באופן הזה מתאפשרת עבודת צוות מקבילית. כל אחד מושך ענף ועובד עליו. בשלב מסוים הוא דוחף את השינויים לענף הראשי וכך כל הענפים יכולים להסתנכרן ולהתמזג.
בשלב זה לא נעבוד עם ענפים, אבל branch ראשי חובה שיהיה.
נריץ את הפקודה הבאה:
על מנת לבדוק מי ה-branch הנוכחי שעליו אנחנו נמצאים, נריץ:
push
נשים לב שעד כאן לא התחברנו בכלל לחשבון שלנו ב-GitHub (רק באתר, אבל לא דרך ה-cmd)
וזאת מכיון שעוד לא ביצענו שום פעולה של עדכון ל-remote. הכל עדין מתבצע ברמה הלוקלית.
הפקודה הבאה - push כבר תדרוש הזדהות לחשבון.
נריץ את הפקודה push כדי לדחוף את הקוד ל-remote:
אם עדין לא הזדהינו דרך ה-cmd, יפתח חלון קטן עם כפתור sign in with your browser.
בלחיצה עליו יפתח הדפדפן עם קישור ישיר להזדהות.
אם נפתח דפדפן אחר מזה שבו אנחנו כבר מזוהים, ניתן פשוט להעתיק את הקישור לדפדפן השני ולחסוך את ההזדהות החוזרת.
לאחר מכן, נחזור ל-cmd ונבדוק שאין הודעת שגיאה.
אם נרשמו כמה שורות ואחת מהן בסגנון writing objects סימן שהפעולה הצליחה.
נעבור לאתר של GitHub, נרענן את העמוד של ה-repository ונראה את הקוד שהעלינו 👋
clone
אם נרצה להוריד את הקוד מ-GitHub למחשב אחר כדי לעבוד עליו, נריץ פקודת clone.
כמובן, נדאג לפתוח את ה-cmd במיקום שבו נרצה לשים את התיקיה של הקוד.
הקישור הוא כתובת ה-Repository ב-GitHub. (נראה אותו באתר בלחיצה על הכפתור הירוק Code)
הפקודה מורידה אלינו את הקוד המעודכן וקדימה לעבודה ⚒️
pull
כעת יש לנו שני העתקים של הקוד בשני מחשבים. נכנה אותם לצורך הנוחות מחשב א' ומחשב ב'.
נניח שעדכנו את הקוד במחשב ב', ביצענו commit ודחפנו ל-GitHub באמצעות push.
אנחנו כמובן מעונינים לעדכן את הקוד במחשב א' בהתאם.
לשם כך נשתמש בפקודת pull שמושכת את השינויים הרלוונטיים.
אם לא נבצע pull במחשב א' ונעדכן את הקוד, כאשר ננסה לבצע push נקבל התראה מ-git שהקוד ב-remote חדש יותר ועלינו לבצע קודם כל pull.
במצב כזה, חשוב לבצע commit על השינויים במחשב א' כדי שלא יידרסו אם השינויים מה-remote נוגעים בדיוק לאותם קטעים בקוד.
שגיאות נפוצות
טיפול ב-ssl
בהרצה של פקודת push לעיתים מופיעה שגיאה כזו:
כדי לטפל בבעיה, נריץ את הפקודה:
ולאחר מכן נריץ שוב את פקודת ה-push.
ניתוק משתמש אחר
אם מופיעה שגיאה של repository not found כנראה משתמש אחר מחובר ל-GitHub ויש לנתק אותו.
כך גם אם מופיעה הודעה שמנסים לבצע פעולה עם הזדהות של משתמש X בזמן שמשתמש Y מחובר.
נפתח את אפליקצית הגדרות (נלחץ על התחל ונקליד את המילה הגדרות ואז אנטר)
נקליד בחיפוש 'מנהל האישורים' ובחלון שנפתח נבחר אישורים של Windows.
ברשימת האישורים נלחץ על האישור שתחת הכתובת https://github.com
נלחץ על הסר כדי למחוק את החשבון המחובר.
מומלץ לבצע את ההסרה כל פעם שמסיימים לעבוד על המחשב הציבורי.