Я использую git в относительно небольшом проекте и обнаружил, что архивирование содержимого каталога .git может быть хорошим способом для резервного копирования проекта. Но это немного странно, потому что, когда я восстанавливаюсь, первое, что мне нужно сделать, это git reset --hard
.
Есть ли проблемы с резервным копированием git-репо таким образом? Кроме того, есть ли лучший способ сделать это (например, портативный формат Git или что-то подобное?)?
git bundle
Ответы:
Я начал немного взламывать скрипт Yar, и в результате получился github, включая man-страницы и скрипт установки:
https://github.com/najamelan/git-backup
Установка :
Приветствую все предложения и тяну запрос на github.
источник
sudo install.sh
, а затем настраиваете его (он использует систему git config), чтобы установить каталог назначения (см. Файл readme на github). Затем вы запускаетеgit backup
внутри своего хранилища. Как примечание, это был эксперимент с git bundle и ответ на этот вопрос, но git bundle никогда не делает абсолютно точную копию (например, если я хорошо помню, особенно о git remotes), поэтому лично я на самом деле использую tar для резервного копирования. Git каталоги.Другой официальный способ - использовать git bundle.
Это создаст файл, который поддерживает
git fetch
иgit pull
для того, чтобы обновить ваш второй репо.Полезно для инкрементного резервного копирования и восстановления.
Но если вам нужно сделать резервную копию всего (потому что у вас нет второго репо с уже существующим содержимым), резервное копирование будет более сложным, как упоминалось в моем другом ответе, после комментария Кента Фредрика :
(Это атомарная операция , в отличие от создания архива из
.git
папки, а комментировал по fantabolous )Предупреждение: Я бы не рекомендовал Pat Notz «s решение , которое клонирование репо.
Резервное копирование многих файлов всегда сложнее, чем резервное копирование или обновление ... только один.
Если вы посмотрите на историю правок в OP Яра ответ , вы бы увидели , что ЯР используется сначала
clone --mirror
, ... с редактированием:Текущее решение Яр использует
git bundle
.Я считаю так.
источник
git bundle
. Это невозможно с глобальным почтовым индексом всего локального репо.Как я сделать это, чтобы создать удаленный (обнажить) хранилище (на отдельном диске, USB, сервер резервного копирования или даже GitHub) , а затем использовать ,
push --mirror
чтобы сделать этот вид удаленного репо точно , как мой локальный ( за исключением удаленного является голой хранилище).Это подтолкнет все ссылки (ветки и теги), включая обновления без ускоренной перемотки. Я использую это для создания резервных копий моего локального хранилища.
Страница людей описывает это следующим образом :
Я сделал псевдоним, чтобы сделать push:
Затем я просто запускаю
git bak
всякий раз, когда хочу сделать резервную копию.источник
--mirror
самом деле не выполняется никакой проверки объектов, которые он получает. Вы должны, вероятно, бежатьgit fsck
в какой-то момент, чтобы предотвратить коррупцию.[Просто оставив это здесь для моей справки.]
Мой скрипт пакета называется
git-backup
такИногда я использую,
git backup
а иногда я использую,git backup different-name
что дает мне большинство возможностей, которые мне нужны.источник
--global
опцию, этот псевдоним будет виден только в вашем проекте (он определен в вашем.git/config
файле) - это, вероятно, то, что вы хотите. Спасибо за более подробный и красиво отформатированный ответ.Оба ответа на эти вопросы верны, но мне все еще не хватает полного, короткого решения для резервного копирования Github-репозитория в локальный файл. Суть доступна здесь, не стесняйтесь раскошелиться или адаптироваться к вашим потребностям.
backup.sh:
restore.sh:
источник
Вы можете сделать резервную копию git-репо с помощью git-copy . git-copy сохранил новый проект как голое хранилище, это означает минимальную стоимость хранения.
Затем вы можете восстановить свой проект с
git clone
источник
Нашел простой официальный путь после того, как пробирался сквозь стены текста выше, который заставил бы вас думать, что его нет.
Создайте полный комплект с:
Восстановите его с помощью:
Эта операция является атомной AFAIK. Проверьте официальные документы для мельчайших деталей.
Что касается "zip": пакеты git сжаты и удивительно малы по сравнению с размером папки .git.
источник
пришел к этому вопросу через гугл.
Вот что я сделал самым простым способом.
затем создайте новую ветку git из этой ветки
вернитесь в исходную ветку и продолжайте:
Предполагая, что вы облажались и нужно что-то восстановить из резервной ветки:
Лучшая часть, если что-то напортачило, вы можете просто удалить исходную ветку и вернуться в резервную ветку !!
источник