חבילות וארכיונים
שתי דרכים להכניס מאגר לקובץ יחיד. הן נראות בנות החלפה ואינן כאלה, ובחירה בלא נכונה היא כל הסיבה שהעמוד הזה קיים.
| חבילה | ארכיון | |
|---|---|---|
| מחזיק | היסטוריה: קומיטים, ענפים, תגיות | את הקבצים בקומיט אחד |
| נפתח על ידי | 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משפיע רק על ארכיונים. הוא אינו מסתיר דבר משכפול, מחבילה או מההיסטוריה — לשם כך ראו הסרת קובץ מההיסטוריה.
ראו גם: סנכרון · שיתוף מאובטח · הסרת קובץ מההיסטוריה