Как сделать резервную копию git-репо?


26

Я планирую перейти с SVN на git. С svn я просто копирую свою папку репозитория, когда хочу сделать резервную копию. Однако у Git его нет, так что мне делать?

Должен ли я создать клон на отдельном диске и обновить его, извлекая из моего проекта? Тогда я могу записать / заархивировать эту папку, и она будет иметь всю историю?

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


См. Также: Резервное копирование репозитория GitHub (ответы работают и для git-проектов, не относящихся к GitHub)
Мартин Тома,

Ответы:


14

Вы просто копируете это. мерзавец делает использовать папку репо, это просто скрыто от обычного директивных. (Папка названа .gitв * nix системах, поэтому она появляется только при использовании ls -a. Я предполагаю, что она устанавливает атрибут «скрытый» в Windows, но я никогда не использовал git в среде Windows, поэтому я не уверен насчет как это там обрабатывается.)


В моем сундуке есть пара файлов проекта, которые я игнорирую. Так я буквально могу скопировать это? (Я предполагаю, что это работает так же, как Linux). Так клон это просто копия файла? Я предполагаю, что если я извлеку все данные, которые я хочу, находится в папке. Я проверил, есть ли файлы .git, но в моем стволе svn есть файлы .svn, и не подумал проверить, были ли там данные истории

2
В Windows это все еще .gitс атрибутом «скрытый».
Гравитация

1
@ acidzombie24: .gitкаталог содержит все состояние хранилища, включая историю. (Это «распределенная» часть.)
grawity

5
@grawity: это больше «самодостаточная» часть, распределенная часть - это когда вы обмениваетесь diff-файлами между самодостаточными репозиториями :)
akira

19

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

Мы используем следующую стратегию (почти точно):

git clone --mirror yourrepo backup.repo
tar cjf backup.repo.tar.bz2 backup.repo
scp backup.tar.bz2 ssh://somewhereelse

Затем, чтобы восстановить из вашей резервной копии:

tar xjf backup.repo.tar.bz2
git clone backup.repo yourrepo

2
Это полезно, спасибо. Как использовать резервное хранилище для восстановления рабочего дерева?
Джонатан Дэй

10

Я использую Git Bundle . Для создания файла копии (одного файла резервной копии) выполните:

git bundle create backup.bundle master

Чтобы восстановить репозиторий с мастером веток, просто клонируйте файл backup.bundle:

git clone backup.bundle -b master my-project

2

создайте новый клон где-нибудь еще:

 % git clone yourepo somewhereelse

Кстати, у git есть папка репо, вы можете найти ее в своей рабочей копии под подкаталогом .git. каждая рабочая копия имеет эту «папку репо».


10
Я не думаю, что клон приемлем в качестве резервной копии, так как это не точная копия. По крайней мере, удаленные ветви клонированного репо будут отсутствовать в клоне, а ветви клонированного репо появятся как удаленные ветви в клоне.
Слеське
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.