מה זה Fork?
Fork היא שיטה לבצע "העתקה" של מאגר GitHub לחשבון ה-GitHub האישי שלכם. השימוש העיקרי ב-Fork הוא כאשר תרצו לתרום שינויים לפרויקט שאינכם בעלי ההרשאות בו (למשל פרויקט קוד פתוח או פרויקט צוות אחר). Fork יוצר אצלכם עותק נפרד של הפרויקט ב-GitHub, בו אתם חופשיים לבצע שינויים מבלי להשפיע ישירות על המקור. העותק (ה-Fork) אינו מתעדכן אוטומטית מהמקור, אך הוא שומר על קשר: ניתן מאוחר יותר לעדכן את ה-Fork מהמקור בצורה ידנית, ובוודאי תוכלו באמצעותו להגיש Pull Request למאגר המקורי.
מתי להשתמש ב-Fork?
אם ברצונכם להוריד פרויקט רק לקריאה או להתנסות – מספיק Clone ישיר (כנ"ל). אך אם מטרתכם לשנות את הקוד ולשלוח את השינויים בחזרה (למשל לתקן באג או להוסיף פיצ’ר בפרויקט קוד פתוח), מומלץ להשתמש ב-Fork. כך תוכלו להעלות את השינויים שלכם ל-GitHub (למאגר ששייך לכם), ואז לפתוח Pull Request למאגר המקורי כדי לבקש ממתחזקי הפרויקט לשלב את תרומתכם.
שלבים לביצוע Fork ו-Clone של פרויקט
-
- יצירת Fork ב-GitHub: היכנסו לדף המאגר המקורי ב-GitHub. בחלק העליון של הדף (בקרבת הכפתור "Star"), תמצאו כפתור הנקרא Fork. לחצו עליו. GitHub ישאל לאיזה חשבון או ארגון שלכם תרצו לבצע את ה-Fork (אם יש לכם חשבונות מרובים או שאתם שייכים לארגוני GitHub שונים). בחרו את החשבון הפרטי שלכם (או ארגון מתאים). התהליך יימשך מספר שניות, ולאחריו תועברו לדף חדש – זהו העותק (Fork) שנוצר תחת החשבון שלכם. שם המאגר בדרך כלל יישאר אותו דבר, אבל עכשיו הוא תחת המשתמש שלכם. לדוגמה, אם המקור היה github.com/original user/project, כעת הכתובת תהיה github.com/your username/project. חשוב: בשלב זה, ה-Fork שלכם מנותק מהמקור בכל הנוגע לגרסאות – שינויים חדשים במקור לא יופיעו אוטומטית ב-Fork שלכם, ולהיפך, עד שתבצעו סנכרון באופן יזום.
Cloning של ה-Fork למחשב המקומי: לאחר שיש לכם Fork בחשבון שלכם, כעת עליכם לשכפל אותו למחשב (בדומה לשכפול רגיל). חזרו על שלבי השכפול הקודמים, אך הפעם השתמשו בכתובת המאגר של ה-Fork שלכם. כלומר, לחצו שוב על כפתור Code בעמוד ה-Fork (שבבעלותכם), העתקו את כתובת ה-HTTPS או SSH, ובצעו git clone לכתובת הזו. לדוגמה:
2. לאחר פעולה זו, תקבלו תיקייה עם קוד הפרויקט, הזהה למקור ברגע יצירת ה-Fork. ההבדל הוא שעבור ה-remote (המאגר המרוחק) של עותק זה, מוגדר כעת ה-Fork שלכם. תוכלו לוודא זאת עם הפקודה git remote – שתראה את כתובת ה-origin.
3. עבודה על הקוד המקומי והעלאת שינויים: כעת, כשיש לכם עותק מקומי מה-Fork, אתם יכולים ליצור ענפים חדשים, לערוך קוד, לבצע Commits ולדחוף (push) את העדכונים למאגר שלכם ב-GitHub (ה-Fork). למשל, אם תרצו לתקן באג, תוכלו ליצור ענף: git checkout -b fix-bug-123, לבצע את התיקונים בקוד, להריץ git add לקבצים ששונו ואחריו git commit -m "Fix bug 123: description of fix". כשתהיו מוכנים לשתף, הריצו git push origin fix-bug-123 (כאן "origin" מציין את ה-Fork שלכם ב-GitHub, ו-"fix-bug-123" הוא שם הענף שיצרתם). לאחר פקודת הפוש, השינויים שלכם יהיו זמינים במאגר ה-Fork ב-GitHub.
4. פתיחת Pull Request למאגר המקורי (אופציונלי): אם המטרה היא לתרום את השינוי חזרה למקור, הצעד הבא הוא לפתוח Pull Request. גשו לדף ה-Fork שלכם ב-GitHub. לרוב, לאחר פוש של ענף חדש, GitHub יציג לכם כפתור "Compare & Pull Request". לחצו עליו. תיפתח טיוטה של Pull Request שמציע למתחזקים של original user/project למזג את הענף fix-bug-123 מהמאגר שלכם. מלאו שם ותיאור (באנגלית, לרוב) עבור ה-PR, והגשתם תישלח. כעת מתחזקי הפרויקט יכולים לסקור את השינויים, להעיר הערות, ולשלב (Merge) את הקוד שלכם אם יימצא מתאים. במידה ויבקשו מכם לשנות משהו, תוכלו לעדכן את הקוד ולבצע commit נוסף ו-push – העדכון יתווסף אוטומטית ל-Pull Request הפתוח.
הערה: Fork למעשה יוצר העתק עצמאי. אם בינתיים המתחזקים שינו משהו במקור ואתם רוצים לקבל את העדכון הזה אליכם, יש צורך להגדיר remote נוסף (למשל לקרוא לו "upstream") שמצביע אל המאגר המקורי, ואז לבצע משיכה (pull) ממנו. זה נושא מתקדם מעט, ואפשר ללמוד עליו בהמשך (מילות מפתח: Git remote add upstream).