Резервное копирование репозитория GitHub
Как лучше всего создать локальную резервную копию репозитория git, размещенного на GitHub, учитывая следующие требования?:
локальная резервная копия должна быть голой РЕПО.
резервная копия должна включать все филиалы.
это должно быть легко (постепенно) обновить резервную копию.
в принципе, я хочу идеальное зеркало, с возможностью легко обновить. По существу, команда
git clone --mirror git://github.com/...
приходит на ум, но, насколько я могу судить, это не позволяет легко обновить (мне придется удалить и воссоздать мою локальную резервную копию). Кроме того, опция mirror для git clone кажется довольно недавней, у меня ее нет на некоторых системах, над которыми я работаю (у которых есть немного более старые версии git).
каково ваше рекомендуемое решение для такого рода проблем?
6 ответов:
создать зеркало:
git clone --mirror git://github.com/user/project.gitобновление:
cd project.git git remote updateдля обновления без изменения текущего каталога:
git --git-dir project.git remote update
Я не уверен, что это может покрыть все ваши требования, но вы можете проверить git bundle
git bundleэта команда обеспечивает поддержку
git fetchиgit pullдля работы с упаковкой объектов и ссылок в архив на исходной машине, а затем импортировать их в другой репозиторий с помощьюgit fetchиgit pullпосле перемещения архива каким-то образомчто мне нравится в этом решении-это один файл производится, причем именно то, что я хочу в нем
git bundleбудут только ссылки на пакеты, которые показаны git-show-ref: это включает в себя головки, теги и удаленные головки.machineA$ git bundle create file.bundle master
Примечание: Кентом Фредриком упоминает в комментариях тонкость от
git rev-list:--allпритворитесь, как будто все ссылки в
$GIT_DIR/refs/перечислены в командной строке<commit>.он добавил:
ваш текущий пакет будет только связывать родителей фиксации, вам, вероятно, нужно будет указать
--allчтобы получить полный пакет все (ветви, которые потомок мастер).чтобы увидеть разницу:
$ git bundle create /tmp/foo master $ git bundle create /tmp/foo-all --all $ git bundle list-heads /tmp/foo $ git bundle list-heads /tmp/foo-all
но насколько я могу судить, это не позволяет легко обновить (мне придется удалить и воссоздать мою локальную резервную копию).
не уверен, что вы имеете в виду, что обновление должно быть так же просто, как
git fetch
git cloneкак это должно принести все ссылки / коммиты, которые видны на удаленной ветке.
git clone --mirrorтакже не очень отличается отgit clone --bare[источник]единственное существенное различие-это короткая рука
git remote add --mirror( см.
git help addдля различного поведения)если вы действительно обеспокоены, вы можете сделать это:
git clone --no-hardlinks --mirror $original $destкоторый будет делать только что-то другое, если они были на той же файловой системе в любом случае.
а если ты действительно параноик, вы можете дегтем.(gz|bz2) весь каталог и обратно это вверх.
Если вы просто нужно сделать резервную копию GitHub репозитории, вы можете посмотреть на простой скрипт Bash.
то, что вы просите, довольно сложно сделать в рамках ограничений git. Проблема в том, что ни клонирование, ни выборка не дадут вам все ветви по умолчанию. Смотрите этот вопрос:
для примера клонирования РЕПО с несколькими ветвями, вот расшифровка:
% git clone -o tufts linux.cs.tufts.edu:/r/ghc/git/experimental.git Initialized empty Git repository in /usr/local/nr/git/ghc/experimental/.git/ % cd experimental/ % git fetch % git branch -a * head tufts/HEAD tufts/experimental tufts/head tufts/norman % git branch --track experimental tufts/experimental Branch experimental set up to track remote branch refs/remotes/tufts/experimental. % git branch --track norman tufts/norman ...вы можете видеть, что клонирование каждой ветви программно будет немного сложнее.
Если github предоставляет доступ к rsync или унисон это лучшие инструменты для работы. В противном случае вам придется написать несколько страшных сценариев...
Я написал сценарий ruby с помощью некоторых других:
https://github.com/walterjwhite/project.configuration/blob/master/scripts/github.com.backup.ruby
этот скрипт позволяет мне загружать все мои репозитории. Я использую его, чтобы периодически делать резервную копию проектов, над которыми я работаю.
Я надеюсь, что это помогает, не стесняйтесь, чтобы настроить его. Я думаю, что это ошибка, иногда, GitHub будет тайм-аут и скрипт не обрабатывает что.
Comments