מבוא לעבודה עם Git ו-Github למתכנתים ולמפתחים

מחבר:
בתאריך:

 

מה זה Git?

git היא תוכנה שמאפשרת לנו לנהל גרסאות, ולחזור לגרסאות קודמות של הפרויקט שעליו אנחנו עובדים. כל פרויקט ב-git מכונה מאגר (repository), וכל מאגר יכול לכלול כמה קבצים ותיקיות.

יש ל-git עוד מספר היבטים, אבל נסתפק בתפקיד העיקרי ככלי לניהול גרסאות של תוכנה. נוסף ל-git שמנהל את המאגר המקומי, שיושב במחשב האישי שלנו, מומלץ לגבות את המאגר המקומי במאגר (repository) חיצוני, שיכול לשבת בשרתים של אתר דוגמת github.com. היתרון הוא בכך שיש לנו גיבוי של גרסאות הפרויקט שעליו אנחנו עובדים בענן, וגם שניתן לשתף אנשים נוספים בפיתוח הפרויקט.

 

מאגר מקומי ומאגר מרוחק

פיתוח תוכנה נעשה לרוב בצוותים, והבעיה היא כיצד לסנכרן את הקוד שכותב כל מתכנת בנפרד עם הפרויקט המלא. GIT הוא מערכת version control פופולרית שמאפשרת לנהל את הפרויקט לשמור את כל הגרסאות שלו מכול המתכנתים במקום אחד. ב-GIT משתמשים ביחד עם GitHub, שהוא אתר שמאחסן את הפרויקט בענן.

Repository הוא מאגר מידע, והוא עשוי מתיקיות ומקבצים.

קיים מאגר מרכזי (Central repository), שיושב ב-GitHub, ומרכז את כל הגרסאות מכל המתכנתים. וקיימים מאגרים מקומיים (Local repositories) על המחשבים של המתכנתים. נשתמש ב-GIT כדי לתווך בין המאגרים המקומיים על המחשבים של המתכנתים ובין המאגר המרכזי. המתכנת יכול לעדכן את המאגר המרכזי עם הקוד שהוא פיתח על המחשב שלו, וגם יכול להתעדכן בשינויים שערכו המתכנתים האחרים שמשתתפים בפרויקט.

מאגר מקומי ומרוחק של git

את המאגר המרכזי יוצרים באתר GitHub, ואז ניתן ליצור את המאגר המקומי שיעבוד מולו.

 

התקנה

כדי לעבוד עם git ו-github צריך להירשם לאתר github.com, ולהוריד את git למחשב האישי.

 

איך מתחילים לעבוד?

יוצרים מאגר מרוחק חדש באתר github.com על ידי לחיצה על הכפתור הירוק הגדול New repository בחשבון ה-github שלכם.

כיצד ליצור מאגר מרוחק חדש באתר github

כשיוצרים את המאגר החדש רצוי מאוד לזכור להוסיף לו קובץ README.

במחשב שלנו מנווטים דרך הטרמינל לתיקיית שבה תשב הגרסה המקומית של המאגר, ומקימים את המאגר באמצעות git clone, שמעתיק את קבצי הפרויקט מ-github.com לתיקייה במחשב שלנו.

$ git clone urltogirepo.git

 

איך ממשיכים?

אחרי שהורדנו את המאגר למחשב המקומי ניתן להוסיף קבצים, לערוך, למחוק וכיו"ב. ובסוף אנחנו צריכים להעלות אותו למאגר המרוחק כדי לשתף עם יתר המתכנתים שעובדים איתנו על אותו הפרויקט.

 

איך מעלים את השינויים ל-github?

מדי כמה שעות נרצה לגבות את הקבצים, שיושבים במאגר המקומי במחשב שלנו, במאגר המרוחק באתר github.com. לצורך כך נשתמש בשלוש הפקודות הבאות:

$ git add –A

להוספת כל הקבצים בתיקייה

$ git commit –m "some descriptive text"

כדי לתייג את מה שאנו מעלים באמצעות שם ייחודי ותיאורי.

$ git push

כדי להעלות את קבצי הפרויקט מהמחשב המקומי לשרת github המרוחק

 

כיצד לבחור אילו קבצים להעלות ל-GitHub?

בדוגמה הקודמת ראינו כיצד להעלות את כל הקבצים מהמאגר המקומי, אבל לפעמים אנחנו רוצים לסנכרן רק חלק מהקבצים. בוא נלמד איך לעשות את זה.

הפקודה git status אומרת לך אילו קבצים במאגר המקומי שונים מהמאגר המרוחק, וכך שאתה יכול להחליט אילו קבצים לדחוף. כשאתה מחליט לא לסנכרן קובץ מסוים אתה עושה לו unstage, והוא מופיע באדום. כשאתה עושה stage לקובץ הוא מופיע בירוק.

$ git status

בשלב זה, הקבצים שלא עשינו להם staging יופיע באדום.

כדי לעשות stage לקובץ : משתמשים בפקודה git add עם שם הקובץ.

$ git add [file_name]

עכשיו נשתמש בפקודה git status כדי לוודא שאכן הקובץ עבר staging.

הקובץ מופיע בירוק כי עשינו לו staging.

ניתן לעשות לקובץ unstage ובכך להסיר אותו מרשימת הקבצים שצריכים להסתנכרן עם המאגר המרוחק:

$ git reset [file_name]

השלב השני הוא commiting.

בשלב זה אתה נותן הוראה ל-git לתעד את השינויים שערכת במאגר שלך.

$ git commit -m [your message]

ההערה שאתה מוסיף מיועדת לעזור לך לזכור אילו שינויים ערכת במאגר.

בצעד השלישי נדחוף את השינויים שערכנו למאגר המרוחק.

$ git push origin master

 

כיצד למשוך את המידע מ-GitHub?

בשלב זה נעדכן את המאגר המקומי על ידי משיכת השינויים מהמאגר המרוחק. זה שלב שתצטרך לעשות בכל פעם שתעדכן את המאגר שלך בקוד שמקורו במתכנת אחר שעובד על אותו פרויקט.

נכנס לתוך תיקיית הפרויקט, ונקליד את הפקודה:

$ git pull origin master

git ייבא את השינויים מהמאגר המרוחק אל המאגר המקומי.

 

כיצד לחזור לגרסאות קודמות?

בכל פעם שמעלים גרסה חדשה ל-Git נשמרות גם הגרסאות הקודמות, וכך אנחנו יכולים לחזור אחורה אל גרסאות קודמות של הפרויקט. לדוגמה, אם אתה רוצה לחזור למצב הפרויקט לפני 4 ימים אתה יכול לעשות זאת, וכל הקבצים והתיקיות של הפרויקט יחזרו בדיוק למצב שבו הם היו לפני ארבעה ימים. איך זה עובד? לכל גרסה שמעלים יש commit number שבאמצעותו git מזהה את הגרסה.

כדי לצפות בפירוט של כל הגרסאות בפרויקט נשתמש בפקודה:

$ git log

ניתן לחזור לגרסה קודמת על ידי שימוש בפקודה:

$ git checkout [commit_number]

 

diff

נשתמש בפקודה diff כדי להשוות את הגרסה המקומית של קובץ לגרסה במאגר המרוחק.

$ git diff [file] 

 

ניגודי עניינים (merge conflict)

מכיוון שצורת העבודה הזו מאפשרת למספר מתכנתים לעבוד במקביל. כל אחד על העותק של המאגר שנמצא במחשבו האישי, יתכנו ניגודי עניינים כאשר שני מתכנתים משנים את אותה שורה בקובץ מסוים, ומנסים להעלות את השינויים למאגר המרוחק. מצב זה ידוע כ-merge conflict, והדרך לפתור אותו היא למשוך באמצעות pull את הגרסה מהאתר המרוחק, לעדכן את הקובץ, ורק אז לדחוף אותו חזרה ל-github באמצעות :

$ git add –A
$ git commit –m "message"
$ git push

 

לסיכום

במדריך זה למדנו איך ניתן לנהל מאגר מרוחק על שרתי github, כיצד להוריד אותו למחשב האישי, וכיצד לעבוד בצוות על אותו פרויקט. במדריך הבא נלמד כיצד לחזור לגרסאות קודמות של הפרויקט, וכיצד לעבוד עם יותר מענף אחד (branching).

הוסף תגובה חדשה

 

= 5 + 8