Ответ 1
Как насчет просто сделать его клоном?
git clone --mirror other/repo.git
Каждый репозиторий является резервной копией своего удаленного.
Есть ли простой способ резервного копирования всего репозитория git, включая все ветки и теги?
Как насчет просто сделать его клоном?
git clone --mirror other/repo.git
Каждый репозиторий является резервной копией своего удаленного.
git bundle
Мне нравится этот метод, так как он дает только один файл, который легче копировать.
Смотрите ProGit: маленький пучок радости.
Смотрите также " Как я могу послать кому-нибудь письмо с git-репозиторием? ", Где команда
git bundle create /tmp/foo-all --all
подробно:
git bundle
будет упаковывать только те ссылки, которые показаны git show-ref: сюда входят заголовки, теги и удаленные заголовки.
Очень важно, чтобы используемая основа удерживалась пунктом назначения.
Можно допустить ошибку, если в файле пакета содержатся объекты, уже находящиеся в месте назначения, так как они игнорируются при распаковке в месте назначения.
Для использования этого пакета вы можете клонировать его, указав несуществующую папку (вне любого git-репо):
git clone /tmp/foo-all newFolder
Развернувшись на некоторых других ответах, это то, что я делаю:
Настройка репо: git clone --mirror [email protected]:/url-to-repo.git
Затем, когда вы хотите обновить резервную копию: git remote update
из места клонирования.
Это создает резервные копии всех ветвей и тегов, в том числе новые, которые добавляются позже, хотя стоит отметить, что ветки, которые удаляются, не удаляются из клона (что для резервного копирования может быть хорошим).
Это атомный, поэтому нет проблем с простой копией.
Расширяя великолепные ответы 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
копирует только коммиты, которые приводят к некоторой ссылке (ветки или тегу) в хранилище. Таким образом, запутанные коммиты не сохраняются в связке.
Все содержится в каталоге .git
. Просто верните это вместе с вашим проектом, как и любой файл.
использовать пакет git или клон
копирование каталога git не является хорошим решением, потому что оно не является атомарным. Если у вас есть большой репозиторий, который занимает много времени, и кто-то подталкивает ваш репозиторий, это повлияет на вашу резервную копию. Эта проблема не будет выполняться при клонировании или создании пакета.
Вы можете создать резервную копию git с git-copy при минимальном размере хранилища.
git copy /path/to/project /backup/project.repo.backup
Затем вы можете восстановить свой проект с помощью git clone
git clone /backup/project.repo.backup project
Правильный ответ 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)
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 являются, по крайней мере, разными жесткими дисками, иначе это не имеет особого смысла.
Вот два варианта:
Вы можете напрямую взять tar каталога репо git, так как он имеет полное содержимое репо на сервере. Существует небольшая вероятность того, что кто-то может работать с репо при резервном копировании.
Следующая команда даст вам пустой клон репо (как и на сервере), тогда вы можете взять tar из того места, где вы клонировали без каких-либо проблем.
git clone --bare {your backup local repo} {new location where you want to clone}
Если это на Github, перейдите к bitbucket и используйте метод "import repository", чтобы импортировать репозиторий github в качестве частного репо.
Если это в битбакете, сделайте наоборот.
Это полная резервная копия, но она остается в облаке, что является моим идеальным методом.
Насколько я знаю, вы можете просто сделать копию каталога, в котором находится ваше репо, что это!
cp -r project project-backup