Полностью резервное копирование git репо?

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

Ответ 1

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

git clone --mirror other/repo.git

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

Ответ 2

git bundle

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

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

подробно:

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


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

git clone /tmp/foo-all newFolder

Ответ 3

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

Настройка репо: git clone --mirror [email protected]:/url-to-repo.git

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

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

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

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

Ответ 4

Расширяя великолепные ответы KingCrunch и VonC

Я объединил их обоих:

git clone --mirror [email protected]/reponame reponame.git
cd reponame.git
git bundle create reponame.bundle --all

После этого у вас есть файл с именем reponame.bundle который можно легко скопировать. Затем вы можете создать новый нормальный git-репозиторий, используя git clone reponame.bundle reponame.

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

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

git clone /backup/project.repo.backup project

Ответ 8

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

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

git clone --mirror [email protected]/your-repo.git
  • Обычно клонирование репо не включает все ветки, только Мастер.

  • Копирование папки репо будет "копировать" только те ветки, которые были извлечены... поэтому по умолчанию это только ветка Master или другие ветки, которые вы извлекли ранее.

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

Ответ 9

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

Ответ 10

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

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

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

    git clone --bare {your backup local repo} {new location where you want to clone}
    

Ответ 11

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

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

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

Ответ 12

Насколько я знаю, вы можете просто сделать копию каталога, в котором находится ваше репо, что это!

cp -r project project-backup