Чи є простий спосіб створити резервну копію цілого git repo, включаючи всі гілки та теги?
Чи є простий спосіб створити резервну копію цілого git repo, включаючи всі гілки та теги?
Відповіді:
Що про те, щоб просто зробити його клоном?
git clone --mirror other/repo.git
Кожне сховище - це резервна копія його віддаленого пристрою.
git branch -a
. Може бути, більш очевидним є такий спосіб: після клонування сховища ви не отримуєте кожну гілку, ви отримуєте кожну комісію. Гілки посилаються лише на існуючий комітет.
git clone
охоплює все це. (1) є необов'язковим, а не вимогою. Якщо результат все-таки оптимізований, все одно резервна копія (2) вже покрита самим git. - Я хотів би сказати, що якщо ви git clone
вже охоплюєте відповідні пункти, для чого вам потрібен інший інструмент? Хоча я також вважаю за краще, git bundle
я не вважаю, що моя відповідь неправильна чи недійсна. Ви можете бачити обидва підходи як резервне резервне копіювання.
git bundle
Мені подобається цей метод, оскільки в результаті виходить лише один файл, який легше копіювати.
Дивіться ProGit: маленький пучок радості .
Дивіться також " Як я можу надіслати кому-небудь репозиторій git? ", Де команда
git bundle create /tmp/foo-all --all
докладно:
git bundle
буде містити лише посилання на пакет, які показані git show-ref : сюди входять голови, теги та віддалені головки.
Дуже важливо, щоб основу використовували місце призначення.
Добре помилятися на стороні обережності, викликаючи, щоб файл групи містив об’єкти, які вже є в пункті призначення, оскільки вони ігноруються при розпакуванні в пункті призначення.
Для використання цього пакету ви можете його клонувати, вказавши неіснуючу папку (поза будь-яким git repo):
git clone /tmp/foo-all newFolder
git bundle
правильна відповідь на мою думку, а не прийнята. Я думаю, що він добре знає команду клонування, якщо він може задати таке запитання, і йому явно недостатньо (бо це клон, а не смітник). Дампи - це різні речі, як прості копії, наприклад: 1) вони не потрібні, щоб бути оптимальними (або навіть здатними) для нормальної роботи 2), але вони повинні мати хороший опір і можливість відновлення даних проти корупції даних 3) Це часто корисно якщо вони легко розрізнюються для додаткового резервного копіювання, тоді як копія не є ціллю.
git bundle
або не git clone
отримує все , наприклад, сценарії гаків.
git bundle
проти віддаленого репо?
Розширюючи деякі інші відповіді, це те, що я роблю:
Налаштування репо: git clone --mirror user@server:/url-to-repo.git
Потім, коли ви хочете оновити резервну копію: git remote update
з місця клонування.
Це створює резервну копію всіх гілок і тегів, включаючи нові, які будуть додані пізніше, хоча варто відзначити, що гілки, які видаляються, не видаляються з клону (що для резервної копії може бути хорошою справою).
Це атомно, тому не має проблем, які складе проста копія.
Розкриваємо чудові відповіді KingCrunch та VonC
Я поєднав їх обох:
git clone --mirror git@some.origin/reponame reponame.git
cd reponame.git
git bundle create reponame.bundle --all
Після цього у вас є названий файл, reponame.bundle
який можна легко скопіювати. Потім ви можете створити нове звичайне сховище git із цього, використовуючи git clone reponame.bundle reponame
.
Зауважте, що git bundle
лише копії комісій, які призводять до деякої посилання (гілки чи тегу) у сховищі. Таким чином, зв'язування комітетів не зберігається в розшаруванні.
git bundle create reponame.bundle --all
?
Все міститься в .git
каталозі. Просто поверніть це разом зі своїм проектом, як і будь-який файл.
copy
або cp
командує, і це не відповідає його потребам. І я також думаю, що він думає про голому сховищі (хоча це теж можна скопіювати, я думаю, що це не повноцінне резервне копіювання).
використовувати git bundle або клон
копіювання каталогу git не є гарним рішенням, оскільки воно не є атомним. Якщо у вас є великий сховище, яке копіюватиме тривалий час, і хтось натисне на ваше сховище, це вплине на вашу резервну копію. Клонування або створення пакету не матиме цієї проблеми.
Можна створити резервну копію git repo за допомогою git-copy при мінімальному розмірі пам’яті.
git copy /path/to/project /backup/project.repo.backup
Тоді ви можете відновити свій проект за допомогою git clone
git clone /backup/project.repo.backup project
git clone --bare
+ git push --force
.
Правильна відповідь ІМО - це git clone --mirror . Це повністю створить резервну копію вашого репо.
Дзеркало клонування Git буде клонувати все сховище, нотатки, заголовки, рефлекси тощо, і зазвичай використовується для копіювання всього сховища на новий git-сервер. Це знищить усі гілки і все, все сховище.
git clone --mirror git@example.com/your-repo.git
Зазвичай клонування репо не включає всі гілки, лише Майстер.
Копіювання папки repo "копіює" лише ті гілки, які витягнули ... тож за замовчуванням це лише гілка Master або інші гілки, які ви попередньо перевірили.
Команда Git bundle також не є тим, що ви хочете: "Команда bundle буде пакувати все, що зазвичай буде натиснуто по дроту командою git push, у двійковий файл, який ви можете комусь надіслати електронною поштою або поставити на флешку. Потім роз'єднати в інше сховище. " (Від чого різниця між git clone --mirror та git clone --bare )
Цей потік був дуже корисним для отримання деякої інформації про те, як можна зробити резервні копії git repos. Я думаю, що все ще не вистачає деяких підказок, інформації чи висновку, щоб знайти «правильний шлях» (tm) для себе. Тому я ділюсь своїми думками, щоб допомогти іншим, і викладу їх на обговорення, щоб покращити їх. Дякую.
Отже, починаючи з підбору оригінального питання:
Потім збагатити його типовими побажаннями та вказати деякі попередні налаштування:
Точка зору відрізняється від того, що таке "100%" резервна копія. Ось два типові.
git - це інструмент для розробників і підтримує цю точку зору через git clone --mirror
та git bundle --all
.
git gc
)git - це інструмент для розробників і залишає це адміністратору. Резервне копіювання конфігурації git та конфігурації ОС слід розглядати як відокремлене від резервного копіювання вмісту.
Більшість із них є загальними для резервного копіювання.
git gc --auto
git bundle --all
git bundle verify
.git clone --mirror
git fsck
.Резервне копіювання в холодному режимі завжди може зробити повне резервне копіювання файлів: відмовити у всіх доступах до git repos, зробити резервну копію та знову дозволити доступ.
Резервне копіювання файлів не може бути виконано за допомогою активних репозицій через ризик пошкодження даних, що надходять у дію. Гаряча копія забезпечує фіксований стан активного сховища для цілей резервного копіювання. Постійні комісії не впливають на цю копію. Як зазначено вище, функції клонування та пакету git підтримують це, але для резервного копіювання "100% адміністратора" декілька речей потрібно зробити за допомогою додаткових команд.
git bundle --all
для створення повних / поступових дамп-файлів вмісту та файлів конфігурації копіювання / резервного копіювання.git clone --mirror
, обробляти та копіювати конфігурацію окремо, а потім зробити повне резервне копіювання файлу дзеркала.
cd /path/to/backupdir/
git clone /path/to/repo
cd /path/to/repo
git remote add backup /path/to/backupdir
git push --set-upstream backup master
це створює резервну копію і робить налаштування, так що ви можете робити git push для оновлення резервної копії, що, мабуть, те, що ви хочете зробити. Просто переконайтеся, що / path / to / backupdir та / path / to / repo є принаймні різними жорсткими дисками, інакше це не має такого великого сенсу.
Ось два варіанти:
Ви можете безпосередньо взяти тар каталога git repo, оскільки він містить весь оголений вміст репо на сервері. Існує невелика ймовірність, що хтось може працювати над репо, під час здійснення резервного копіювання.
Наступна команда дасть вам голий клон репо (так само, як це на сервері), тоді ви можете взяти тар місця, де ви клонували без жодних проблем.
git clone --bare {your backup local repo} {new location where you want to clone}
Якщо він знаходиться на Github, перейдіть до бітбукета та використовуйте метод "імпортувати сховище", щоб імпортувати своє github репо як приватне репо.
Якщо він знаходиться в бітбукеті, зробіть навпаки.
Це повна резервна копія, але залишається в хмарі, що є моїм ідеальним методом.
Наскільки я знаю, ви можете просто зробити копію каталогу, в якому знаходиться ваше репо, це все!
cp -r project project-backup
git clone --bare
, дасть вам послідовний знімок.