דלגו לתוכן

חיבור מארח קוד

Control Center עובד עם שלושה מארחי קוד, המכונים forges בכל האפליקציה: GitHub, GitLab ו־Bitbucket Cloud. אף אחד מהם אינו ברירת המחדל. חברו אחד והכול עובד; חברו כמה, וסביבת עבודה אחת תוכל להחזיק בבת אחת מאגרים מכולם.

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

  1. פתחו את הגדרות ← סביבת עבודה ← פרופיל וזהות (/settings/workspace/profile).
  2. אתרו את הכרטיס אחסון קוד. כל forge נתמך מופיע בו, מחובר או לא.
  3. לחצו על כניסה עם … אם השורה מציעה זאת, או על הוספת אסימון גישה והדביקו אחד.

כניסה מופיעה עבור forge שלשרת שלכם רשומה עבורו אפליקציה — נכון להיום זה GitHub, באמצעות device flow (ראו יצירת GitHub App). כל השאר הוא אסימון מודבק, וזו האפשרות הגלויה והכנה ולא כפתור שאינו יכול להשלים את הפעולה.

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

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

כותרת משנה משמעות
מחובר בתור octocat פרטי הגישה שלכם משמשים
מחובר בתור octocat · דרך האפליקציה של השרת הזה זהות האפליקציה של השרת עונה — לא ביצעתם כניסה
מחובר בתור octocat · ממשתני הסביבה משתנה סביבה של השרת עונה, ולא פרטי הגישה שלכם
לא מחובר אין לכם פרטי גישה ל־forge הזה

איזה אסימון כל forge רוצה

קטע בשם “איזה אסימון כל forge רוצה”
forge אסימון היכן ליצור אותו
GitHub Classic: repo ו־read:org. Fine-grained: ‏Contents + Pull requests (קריאה/כתיבה), Checks + Actions (קריאה) github.com → Settings → Developer settings → Tokens
GitLab אסימון גישה אישי עם api gitlab.com → User settings → Access tokens
Bitbucket אסימון API של Atlassian, בתוספת כתובת האימייל של החשבון שלכם id.atlassian.com → Security → API tokens

Bitbucket מאמת באמצעות כתובת האימייל של החשבון כשם המשתמש ואת האסימון כסיסמה. הגדירו BITBUCKET_EMAIL בסביבת השרת כדי שהוא ידע עם איזה אימייל לשייך את האסימון.

או להשתמש במשתני הסביבה

קטע בשם “או להשתמש במשתני הסביבה”

בהתקנה ללא ממשק או ב־CI, השרת קורא את אלה:

  • GitHub — GITHUB_TOKEN, ואז GH_TOKEN
  • GitLab — GITLAB_TOKEN, ואז CI_JOB_TOKEN
  • Bitbucket — BITBUCKET_API_TOKEN, ואז BITBUCKET_TOKEN (עם BITBUCKET_EMAIL)

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

אותו אדם הוא octocat ב־GitHub ומשהו אחר לגמרי ב־GitLab. Control Center פותר את הזהות שלכם לפי forge ומשתמש בזהות הנכונה לכל מאגר, וזה מה שהופך את “ממתין לסקירה שלי”, “נוצרו על ידיי” ו“אישרת את זה” לנכונים בסביבת עבודה משולבת.

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

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

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

כל forge תומך בלולאה המרכזית: הצגה ופתיחה של בקשות משיכה, קריאת דיפים, תגובה בתוך השורה ומחוצה לה, סקירה, מיזוג וסגירה. מעבר לכך הם שונים באמת, ו־Control Center מסתיר את מה ש־forge לא יכול לעשות במקום להציג פקד שנכשל בשקט.

יכולת GitHub GitLab Bitbucket
סקירות מרוכזות (ממתינות) ✓ ✓ —
בקשת שינויים ✓ ✓ ✓
מצב “נצפה” לכל קובץ מסונכרן ✓ — —
תגובות אמוג’י ✓ ✓ —
סוקרים מצוות / מקבוצה ✓ ✓ —
סוקרים מוצעים ✓ — ✓
תוצאות CI בבקשת משיכה ✓ ✓ ✓
צלילה לשלבים/לוגים של משימת CI ✓ ✓ —
בקשות משיכה מוערמות ✓ — —
תבניות לתיאור בקשת משיכה ✓ ✓ —
סקר התראות ✓ — —
פרופילים עשירים של משתמשים ✓ ✓ —
head ref של בקשת משיכה בצד השרת ✓ ✓ —

כשהיכולת חסרה, התכונה מתדרדרת בכנות:

  • מצב נצפה עדיין עובד, אבל רק במכשיר שבו הגדרתם אותו.
  • סקירות מרוכזות ב־Bitbucket מתפרסמות תגובה-תגובה, כך שסוקרים רואים אותן מגיעות בנפרד ולא בבת אחת.
  • אין head ref לבקשת משיכה ב־Bitbucket, ומשמעות הדבר שכשעושים checkout לבקשת משיכה מביאים את ענף המקור לפי שמו, וזה נכשל ברגע שהענף הזה נמחק.

GitLab מכנה בקשת משיכה merge request. Control Center אומר “בקשת משיכה” בכל המודל שלו, ומשתמש בשם העצם של כל forge במקום שבו הוא מדבר על אותו forge.

רשימת בקשות המשיכה ריקה ואומרת ש־forge לא מחובר

קטע בשם “רשימת בקשות המשיכה ריקה ואומרת ש־forge לא מחובר”

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

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

קטע בשם “חיברתי forge אבל המאגרים שלו עדיין לא מציגים כלום”

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

הרישום דורש את כל השלושה: הנתיב נמצא בתוך עץ עבודה של git, יש לו remote בשם origin, וה־remote הזה מצביע ל־github.com, ל־gitlab.com או ל־bitbucket.org. ראו הוספת מאגרים לסביבת עבודה.

הכול מפסיק לעבוד לזמן מה אחרי שימוש כבד

קטע בשם “הכול מפסיק לעבוד לזמן מה אחרי שימוש כבד”

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