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