סנכרון והרבה מאגרים

חבילות וארכיונים

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

חבילה ארכיון
מחזיק היסטוריה: קומיטים, ענפים, תגיות את הקבצים בקומיט אחד
נפתח על ידי git clone / git fetch — הוא הוא רימוט כל כלי פריסה
אחר כך אפשר להביא ממנו שוב, למזג, להמשיך לעבוד כלום. זו תמונת מצב
שימוש העברת עבודה למכונה בלי רשת ״שלח לי את המקור ב־v2.1״

⌘K ← אריזת המאגר לחבילה או ייצוא ארכיון.

אריזת מאגר לקובץ יחיד, כשאפשרות הטווח מוכנה

חבילות

חבילה היא התשובה של git לפער ששום רשת אינה גושרת עליו: מכונה מנותקת מהרשת, דיסק און קי, קובץ מצורף לדוא״ל, לפטופ במטוס. הצד המקבל מריץ git clone work.bundle myrepo ומקבל מאגר אמיתי, עם ההיסטוריה והענפים שלכם, שמביא מאותו קובץ כאילו היה שרת.

שלושה היקפים:

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

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

קבלת חבילה

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

refs מיובאים נוחתים תחת bundle/…, במרחב השמות של מעקב הרימוטים. שום דבר מקומי לא זז: שום ענף לא מקודם קידום מהיר, שום עבודה לא נדרסת. אחר כך אתם ממזגים, עושים ריבייס או צ׳קאאוט ל־bundle/main בתנאים שלכם, בדיוק כמו לענף מכל רימוט אחר.

כדי להתחיל מאגר חדש מחבילה במקום זאת, שכפלו מהקובץ בטרמינל: git clone work.bundle myrepo. Gitcito מייבא לתוך מאגר פתוח; הוא אינו משכפל מקובץ.

ארכיונים

git archive כותב את העץ בקומיט אחד כ־zip או כ־tarball. בלי .git, בלי היסטוריה, בלי שום דרך להביא ממנו — וזו בדיוק הפואנטה כשהמקבל אמור לקבל קוד מקור, לא מאגר.

אפשרות מה היא עושה
הפניה ענף, תגית או קומיט לייצוא. תגית היא התשובה הרגילה
פורמט zip, tar.gz או tar
עטיפה בתיקייה מוסיפה תיקיית על, כך שפריסה לעולם לא מתיזה קבצים לכל עבר
רק הנתיב הזה ייצוא תת־תיקייה אחת במקום כל העץ

export-ignore היא הסיבה להשתמש בזה

מאגר יכול לסמן נתיבים ב־.gitattributes:

.github/     export-ignore
test/        export-ignore
*.psd        export-ignore

הנתיבים האלה מושמטים מכל ארכיון בעודם נשארים במאגר. כך פרויקט משחרר tarball של ריליס בלי תצורת ה־CI שלו, בלי הפיקסצ׳רים שלו ובלי קובצי העיצוב של 200 מגה־בייט, כשהכלל חי במאגר ולא בסקריפט ריליס של מישהו.

מגבלות ששווה להכיר

  • חבילה היא עותק מלא אלא אם אתם משתמשים בטווח. אריזת מאגר של 2 ג׳יגה־בייט כותבת קובץ של 2 ג׳יגה־בייט, וזה לוקח כמו שכפול.
  • חבילות ריקות נדחות על ידי git, לא על ידי Gitcito: טווח שאין בין קצותיו כלום מייצר שגיאה ולא קובץ חסר תועלת.
  • ייבוא אינו ממזג. refs מגיעים תחת bundle/… ונשארים שם עד שתעשו איתם משהו.
  • לארכיון אין היסטוריה, ולכן אי אפשר להפוך אותו בחזרה למאגר. אם המקבל יצטרך לבצע קומיט, שלחו חבילה.
  • export-ignore משפיע רק על ארכיונים. הוא אינו מסתיר דבר משכפול, מחבילה או מההיסטוריה — לשם כך ראו הסרת קובץ מההיסטוריה.

ראו גם: סנכרון · שיתוף מאובטח · הסרת קובץ מההיסטוריה

שיפור התרגום הזה ב־GitHub