שיתוף פעולה ב Git

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

1. איך זה עובד

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

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

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

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

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

  1. כל מי שרוצה לתרום קוד לפרויקט ציבורי בגיט יכול לשכפל את המאגר (זה נקרא fork). שיכפול המאגר אומר שאני יוצר פרויקט גיטהאב חדש תחת השם שלי ומעתיק אליו את כל הריפוזיטורי, את כל תיקיית גיט המשותפת, מהפרויקט אליו אני רוצה לתרום. אם נניח שאני רוצה לשלוח קוד לפרויקט ה Linux Kernel אז אני יוצר אצלי עותק של פרויקט Linux Kernel תחת השם שלי בגיטהאב.

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

  3. כשהעותק שלי של הפרויקט יציב וכולל את הקוד החדש שאני רוצה להציע, אני שולח הודעה למשתמש שיצר את הפרויקט במקור. ההודעה אומרת משהו כמו "תראה יש לי הצעה לשיפור לפרויקט שיצרת, אפשר לראות את ההצעה שלי בעותק של הפרויקט שנמצא אצלי במשתמש". הודעה כזאת נשלחת דרך המערכת של גיטהאב ונקראת Pull Request.

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

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

2. בואו נזמין חבר או חברה

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

  1. הפרויקט הוא פרויקט ציבורי וכולם יכולים לראות את הקומיטים והקבצים בו.

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

אני לוחץ על הכפתור הירוק עם הטקסט Add people ובתיבה שנפתחה יכול להכניס שם משתמש בגיטהאב של החבר או החברה או האימייל שלהם. המשתמש הראשי שלי בגיטהאב נקרא ynonp ולכן אני מקליד את שם המשתמש הזה בתיבה ובוחר Add ynonp to repository. עכשיו אני רואה את השם שלי ברשימת השותפים לפרויקט עם הטקסט Awaiting ynonp's response. כן בשביל שמישהו ישתתף אתכם בפרויקט עליהם לאשר את הבקשה.

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

3. עכשיו אתם

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

  2. בקשו מהחבר או החברה להוסיף מתכון ולבצע Push לקומיט החדש.

  3. בצעו אצלכם Fetch ואז Pull כדי לראות את המתכון החדש.