Полностью сделать резервную копию git-репо? - PullRequest
110 голосов
/ 07 апреля 2011

Есть ли простой способ сделать резервную копию всего репозитория git, включая все ветви и теги?

Ответы [ 12 ]

167 голосов
/ 07 апреля 2011
git bundle

Мне нравится этот метод, так как он дает только один файл, который легче копировать.
См. ProGit: маленький пучок радости .
См. Также « Как мне отправить кому-нибудь письмо с git-репозиторием? », где команда

git bundle create /tmp/foo-all --all

подробно:

git bundle будет упаковывать только те ссылки, которые показаны git show-ref : сюда входят заголовки, теги и удаленные заголовки.
Очень важно, чтобы используемая база удерживалась пунктом назначения.
Можно допустить ошибку, если в файле пакета содержатся объекты, уже находящиеся в месте назначения, так как они игнорируются при распаковке в месте назначения.


Для использования этого комплекта вы можете клонировать его, указав несуществующую папку (вне любого git-репо):

git clone /tmp/foo-all newFolder
54 голосов
/ 07 апреля 2011

Как насчет просто сделать его клоном?

git clone --mirror other/repo.git

Каждый репозиторий является резервной копией своего удаленного.

21 голосов
/ 29 мая 2014

Расширяя некоторые другие ответы, вот что я делаю:

Настройка репозитория: git clone --mirror user@server:/url-to-repo.git

Затем, когда вы хотите обновить резервную копию: git remote update из расположения клона.

Это резервное копирование всех веток и тегов, включая новые, которые будут добавлены позже, хотя стоит отметить, что удаляемые ветви не удаляются из клона (что для резервной копии может быть хорошей вещью).

Это атомарное, поэтому нет проблем, которые могут возникнуть у простой копии.

См. http://www.garron.me/en/bits/backup-git-bare-repo.html

9 голосов
/ 04 января 2019

Расширение на великолепные ответы 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 копирует только коммиты, которые приводят к некоторой ссылке (ветви или тегу) в хранилище. Таким образом, запутанные коммиты не сохраняются в связке.

4 голосов
/ 11 апреля 2013

использовать git bundle или клон

копирование каталога git не является хорошим решением, поскольку оно не является атомарным. Если у вас большой репозиторий, копирование которого занимает много времени, и кто-то отправляет его в ваш репозиторий, это повлияет на резервное копирование. Клонирование или создание пакета не будет иметь этой проблемы.

4 голосов
/ 07 апреля 2011

Все содержится в каталоге .git. Просто сохраните это вместе с вашим проектом, как любой файл.

3 голосов
/ 03 июня 2015

Вы можете сделать резервную копию git repo с помощью git-copy при минимальном объеме хранилища.

git copy /path/to/project /backup/project.repo.backup

Затем вы можете восстановить свой проект с помощью git clone

git clone /backup/project.repo.backup project
2 голосов
/ 14 мая 2018

Правильный ответ IMO: git clone --mirror . Это полностью сделает резервную копию вашего репо.

Git clone mirror клонирует весь репозиторий, заметки, заголовки, ссылки и т. Д. И обычно используется для копирования всего репозитория на новый git-сервер. Это приведет к удалению всех веток и всего весь репозиторий.

git clone --mirror git@example.com/your-repo.git
  • Обычно клонирование репо включает не все ветви, а только Master.

  • Копирование папки репо будет «копировать» только те ветви, которые были вытащил ... так что по умолчанию это только ветка Master или другое филиалы, которые вы уже проверили ранее.

  • Команда Git bundle также не то, что вы хотите: «Команда bundle упакует все, что обычно будет проталкиваться провод с командой git push в двоичный файл, который вы можете отправить по электронной почте кто-нибудь или вставьте флешку, затем распакуйте в другой репозиторий. "(От В чем разница между git clone --mirror и git clone --bare )

0 голосов
/ 02 июля 2019

Если это на Github, перейдите к bitbucket и используйте метод «import repository» для импорта вашего github репо как частного репо.

Если оно в битбакете, сделайте наоборот.

Это полная резервная копия, но она остается в облаке, и это мой идеальный метод.

0 голосов
/ 25 июля 2015

Вот два варианта:

  1. Вы можете напрямую взять tar каталога git repo, так как он содержит все необходимое содержимое репо на сервере. Существует небольшая вероятность того, что кто-то может работать над репо во время резервного копирования.

  2. Следующая команда даст вам чистый клон репо (точно так же, как он находится на сервере), затем вы можете взять tar из места, где вы клонировали, без каких-либо проблем.

    git clone --bare {your backup local repo} {new location where you want to clone}
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...