פוסט
GitHub מאפס לגיבור: issues, forks ו-main מוגן
חלק 3 במדריך ל-GitHub: issues ותוויות, תרומה לפרויקט של מישהו אחר דרך fork, הגנה על ענף, CODEOWNERS ושמירה על ריפוזיטורי בטוח.
בחלק 2 שינינו את ספר המתכונים דרך pull request. החלק הזה מוסיף את מה שמאפשר לאנשים אחרים לעבוד עליו: issues, forks, כללים על main ואבטחה.
Issues
Issue הוא פתק על משהו שצריך לעשות או שמקולקל: באג, רעיון לפיצ׳ר, שאלה. issue טוב אומר מה ציפינו שיקרה, מה קרה, ואיך משחזרים.
- Labels (
bug,good first issue) למיון וסינון. - Assignees לציון מי עובד על זה, ו-milestones לקיבוץ issues לקראת יעד.
- אזכורים: כותבים
@danaכדי להתריע לאדם, ו-#42כדי לקשר ל-issue או PR מספר 42. - תבניות: קבצי Markdown או טפסים ב-
.github/ISSUE_TEMPLATE/מוצעים כשפותחים issue, וקובץpull_request_template.mdב-.github/ממלא מראש תיאורים של PR.
gh issue create --title "Soup recipe is missing salt" --body "Step 2 never mentions salt."
gh issue list
Projects הופכים issues ו-PRs ללוח או לטבלה (To do, In progress, Done), ו-Discussions נותנים לריפוזיטורי מקום לשאלות פתוחות שהן לא משימות.
Forks: תרומה לפרויקט של מישהו אחר
בקוד פתוח בדרך כלל אי אפשר לעשות push לריפוזיטורי. הפתרון הוא fork: עותק משלנו שלו, בחשבון שלנו.
- לוחצים Fork בדף הפרויקט (או
gh repo fork --clone). - משכפלים את ה-fork שלנו, ומוסיפים את המקור כ-remote שני בשם
upstream. - פותחים ענף, עושים commit, ו-push ל-fork שלנו (
origin). - פותחים PR מהענף שב-fork אל הריפוזיטורי המקורי.
gh repo fork someone/their-project --clone
cd their-project
git remote -v # origin = ה-fork שלנו, upstream = המקור
git switch -c fix-typo
# עורכים, commit
git push -u origin fix-typo
gh pr create --fill
כדי לעדכן את ה-fork, משתמשים בכפתור Sync fork בדף ה-fork שלנו, או מהטרמינל:
git fetch upstream
git switch main
git merge upstream/main
git push
קוראים קודם את CONTRIBUTING.md של הפרויקט ומחפשים את התווית good first issue. מתחזקים אוהבים PRs קטנים וממוקדים.
מגינים על main
כשיש עוד אנשים, רוצים ש-main יהיה קשה לשבור, ושאף אחד, כולל אנחנו, לא יעבוד עליו ישירות. ב-Settings → Branches (או ב-Rulesets החדשים יותר) אפשר להגן על ענף. בין האפשרויות:
- לדרוש pull request עם מספר אישורים מוגדר לפני מיזוג.
- לדרוש ש-status checks (workflow של Actions) יעברו.
- לדרוש שכל השיחות ייפתרו לפני מיזוג.
- לדרוש היסטוריה ליניארית, כלומר רק מיזוגי squash או rebase.
- לחסום force push ומחיקה של הענף.
- להגביל מי רשאי לעשות push אליו.
קובץ CODEOWNERS (ב-.github/, בשורש או ב-docs/) ממפה נתיבים לאנשים או לצוותים, ו-GitHub מבקש מהם ביקורת אוטומטית כש-PR נוגע בקבצים שלהם:
* @dana
/docs/ @sam
*.yml @dana @devops-team
השורה האחרונה שמתאימה מנצחת. עם “require review from code owners”, האדם הנכון תמיד רואה קבצים רגישים.
שומרים על ריפוזיטורי בטוח
- לעולם לא עושים commit ל-secrets. טוקן שהגיע ל-commit דלף גם אחרי שנמחק: קודם מבטלים ויוצרים חדש, ורק אחר כך מנקים את ההיסטוריה. ה-secret scanning יכול להזהיר, ובסוגי secrets נתמכים גם לחסום את ה-push.
- Dependabot פותח PRs שמעדכנים תלויות ישנות או פגיעות. מפעילים אותו בהגדרות האבטחה, או מוסיפים
.github/dependabot.yml. - Code scanning (CodeQL) מחפש פגיעויות נפוצות בכל PR.
- מפעילים אימות דו-שלבי: הדבר היעיל ביותר שאפשר לעשות.
- מוסיפים
SECURITY.mdשאומר איך לדווח על פגיעות באופן פרטי.