Резервное копирование репозитория GitHub



Как лучше всего создать локальную резервную копию репозитория git, размещенного на GitHub, учитывая следующие требования?:




  1. локальная резервная копия должна быть голой РЕПО.


  2. резервная копия должна включать все филиалы.


  3. это должно быть легко (постепенно) обновить резервную копию.



в принципе, я хочу идеальное зеркало, с возможностью легко обновить. По существу, команда



git clone --mirror git://github.com/...


приходит на ум, но, насколько я могу судить, это не позволяет легко обновить (мне придется удалить и воссоздать мою локальную резервную копию). Кроме того, опция mirror для git clone кажется довольно недавней, у меня ее нет на некоторых системах, над которыми я работаю (у которых есть немного более старые версии git).



каково ваше рекомендуемое решение для такого рода проблем?

673   6  

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.

https://github.com/ptrofimov/github-backup-sh

то, что вы просите, довольно сложно сделать в рамках ограничений 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

    Ничего не найдено.