Я использую мерзавца на относительно маленьком проекте, и я нахожу, что архивирование содержания .git каталога могло бы быть прекрасным способом создать резервную копию проекта. Но это довольно странно, потому что, когда я восстанавливаю, первая вещь, я должен сделать, git reset --hard
.
Есть ли какие-либо проблемы с резервным копированием мерзавца repo этот путь? Кроме того, есть ли какой-либо лучший способ сделать это (например, портативный формат мерзавца или что-то подобное?)?
Другим официальным способом будет использование git-пакета
, который создаст файл, поддерживающий git fetch
и git pull
для обновления вашего второго репо.
Полезно для инкрементного резервного копирования и восстановления.
Но если вам нужно сделать резервную копию всего (потому что у вас нет второго репо с некоторым старым содержимым уже на месте), то резервная копия, как уже упоминалось в другом моем ответе, немного более сложная, после комментария Кента Фредрика :
$ git bundle create /tmp/foo master
$ git bundle create /tmp/foo-all --all
$ git bundle list-heads /tmp/foo
$ git bundle list-heads /tmp/foo-all
(Это ]атомная операция , в отличие от создания архива из . git
, как прокомментировано в fantabolous)
Warning: Я бы не рекомендовал Pat Notz решение , которое клонирует репо.
Резервное копирование многих файлов всегда сложнее, чем резервное копирование или обновление... только одного.
Если вы посмотрите на историю правок из OP Yar answer, вы увидите, что Yar сначала использовал клон - зеркало -зеркало
, ... с редактированием:
Использование этого с Dropbox - это полный беспорядок .
У вас будут ошибки синхронизации, и вы НЕ МОЖЕТЕ РОЛЛИРОВАТЬ ДИРЕКТОРИЙСКИЙ БАКС В DROPBOX.
Используйтеgit bundle
, если хотите вернуться в свой дропбокс.
Текущее решение Yar использует git bundle
.
Я останавливаю свое дело.
Способ, которым я это делаю, заключается в создании удаленного (голого) репозитория (на отдельном диске, USB Key, сервере резервного копирования или даже github) и затем использую push --mirror
, чтобы сделать так, чтобы удаленное repo выглядело точно так же, как мое локальное (за исключением того, что удаленный является голым репозиторием).
В результате все ссылки (ветки и теги), включая не-быстрое обновление, будут протолкнуты. Я использую это для создания резервных копий моего локального репозитория.
Man-страница man page описывает это следующим образом:
Вместо того, чтобы называть каждый запрос, указывает, что все ссылки в разделе
$GIT_DIR/refs/
(который включает, но не ограничиваетсяrefs/heads/
,refs/remotes/
иrefs/tags/
) будут зеркалироваться в удаленный репозиторий. Вновь созданные локальные ссылки будут перенесены на удаленный конец, локально обновленные ссылки будут принудительно обновлены на удаленном конце, а удаленные ссылки будут удалены с удаленного конца. Это настройка по умолчанию, если установлена опция конфигурацииremote.
..mirror
Я сделал псевдоним для push:
git config --add alias.bak "push --mirror github"
Затем я просто запускаю git bak
всякий раз, когда мне нужно сделать резервную копию.
[Оставляю это здесь для справки.]
Мой сценарий пакета под названием git-backup
выглядит так
#!/usr/bin/env ruby
if __FILE__ == $0
bundle_name = ARGV[0] if (ARGV[0])
bundle_name = `pwd`.split('/').last.chomp if bundle_name.nil?
bundle_name += ".git.bundle"
puts "Backing up to bundle #{bundle_name}"
`git bundle create /data/Dropbox/backup/git-repos/#{bundle_name} --all`
end
Иногда я использую git backup
, а иногда использую git backup с другим именем