Как скопировать локальный репозиторий Мерзавца?

Я использую мерзавца на относительно маленьком проекте, и я нахожу, что архивирование содержания .git каталога могло бы быть прекрасным способом создать резервную копию проекта. Но это довольно странно, потому что, когда я восстанавливаю, первая вещь, я должен сделать, git reset --hard.

Есть ли какие-либо проблемы с резервным копированием мерзавца repo этот путь? Кроме того, есть ли какой-либо лучший способ сделать это (например, портативный формат мерзавца или что-то подобное?)?

151
задан peterh says reinstate Monica 5 April 2016 в 16:52
поделиться

3 ответа

Другим официальным способом будет использование 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.

Я останавливаю свое дело.

142
ответ дан 23 November 2019 в 22:15
поделиться

Способ, которым я это делаю, заключается в создании удаленного (голого) репозитория (на отдельном диске, 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 всякий раз, когда мне нужно сделать резервную копию.

62
ответ дан 23 November 2019 в 22:15
поделиться

[Оставляю это здесь для справки.]

Мой сценарий пакета под названием 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 с другим именем

35
ответ дан 23 November 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: