Бандли та архіви
Два способи запакувати репозиторій в один файл. Вони виглядають взаємозамінними, але не є такими, і саме через те, що легко вибрати не той, ця сторінка й існує.
| Бандл | Архів | |
|---|---|---|
| Містить | Історію: коміти, гілки, теги | Файли на одному коміті |
| Відкривається через | git clone / git fetch — він і є віддалений репозиторій |
Будь-який розпаковувач |
| Далі | Ви можете фетчити з нього знову, зливати, працювати далі | Нічого. Це знімок |
| Використовуйте для | Перенесення роботи на машину без мережі | «Надішли мені код на v2.1» |
⌘K → Запакувати репозиторій у бандл або Експортувати архів.

Бандли
Бандл — це відповідь git на прірву, яку не перекриває жодна мережа: машина без
мережі, USB-флешка, вкладення в листі, ноутбук у літаку. На тому боці
запускають git clone work.bundle myrepo і отримують справжній репозиторій — з
вашою історією та вашими гілками, — який фетчить із того файлу так, ніби це
сервер.
Три обсяги:
| Обсяг | Що подорожує | Розмір |
|---|---|---|
| Усе | Кожна гілка й тег, повна історія | Увесь репозиторій |
| Одна гілка або тег | Це посилання і все, до чого воно дотягується | Зазвичай більша частина |
| Діапазон комітів | Лише те, що між двома кінцями | Малий |
Бандл із діапазону — це латка історії, а не репозиторій. Він записує дальній кінець як передумову: git відмовиться відкрити його в репозиторії, де того коміту ще немає, бо новим комітам не буде до чого причепитися. Це правильна поведінка — і несподіванка, коли стикаєшся з нею вперше. Беріть діапазон тоді, коли інший бік уже має вашу роботу до якоїсь точки: до тегу, який він отримав востаннє, або до коміту, від якого ви обидва відгалузилися.
Як його прийняти
Імпортувати бандл… читає файл, показує список того, що в ньому є, і одразу каже, чи зможе цей репозиторій його використати — якщо передумов бракує, він повідомляє, скількох саме, замість того щоб упасти згодом із власним формулюванням git.
Імпортовані посилання опиняються під 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: діапазон, між кінцями якого нічого немає, дає помилку, а не марний файл.
- Імпорт не зливає. Посилання приходять під
bundle/…і лишаються там, доки ви щось із ними не зробите. - Архів не має історії, тож перетворити його назад на репозиторій неможливо. Якщо одержувачу доведеться комітити — надсилайте бандл.
export-ignoreвпливає лише на архіви. Він нічого не приховує ні від клонування, ні від бандла, ні від історії — для цього дивіться видалення файлу з історії.
Дивіться також: Синхронізація · Безпечний обмін · Видалення файлу з історії