Как сделать резервную копию 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
akirisol
источник
2
Это полезно, спасибо. Как использовать резервное хранилище для восстановления рабочего дерева?
Джонатан Дэй
10

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

git bundle create backup.bundle master

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

git clone backup.bundle -b master my-project
MariuszS
источник
2

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

 % git clone yourepo somewhereelse

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

Акира
источник
10
Я не думаю, что клон приемлем в качестве резервной копии, так как это не точная копия. По крайней мере, удаленные ветви клонированного репо будут отсутствовать в клоне, а ветви клонированного репо появятся как удаленные ветви в клоне.
Слеське