Как организовать и настроить зеркальные резервные серверы для репозиториев Git? - PullRequest
2 голосов
/ 19 июля 2010

Я перемещаю некоторые svn-репозитории в Git. Итак, что я в основном пытаюсь сделать, это:

  • Установите один сервер с пустыми Git-репозиториями, из которого я буду тянуть и пихать до
  • Установите несколько серверов резервного копирования для всех моих репозиториев, которые находятся на 1-м сервере.

Итак, допустим, у меня есть каталог на моем сервере, например: $HOME/git/, в котором есть пустые репозитории. Например:

~/git/project1.git
~/git/project2.git
~/git/project3.git
...

Мои серверы резервного копирования могут быть зеркалами для этого сервера или сохранять резервные копии данных в архивах или где-либо еще. Я полагаю, я могу сделать что-то вроде:

git clone --bare ssh://gitserver/~user/git/projectX.git

Или, может быть:

$ cd ~/git/project1.git
$ git bundle create ~/gitbackup/project1.bdl --all

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

Интересно, как вы, ребята, делаете это? Может быть, есть какой-то лучший способ сделать это, чем я уже думал. Любой совет будет оценен.

Ответы [ 2 ]

5 голосов
/ 20 июля 2010

Общая идея заключается в следующем:

  • создать голое репо на вашем сервере резервного копирования
  • иметь хуков (вероятно, хук после получения)) в основном голом репозитории Git для автоматической отправки всего, что получено, в соответствующее резервное хранилище Git по протоколу git: или ssh+git: .

Существуют и другие методы еще в 2008 году , основанные на гибак , но идея остается прежней.


Пример сообщения-приемный крюк:

    #!/bin/sh
    #
    # A hook script that is called after a successful
    # commit is made.
    #
    # Place this file in .git/hooks and chmod +x

    BRANCH=`git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
    git push origin $BRANCH
    #!/usr/bin/env ruby
    STDIN.read.split("\n").each do |line|
       oldrev, newrev, refname = line.split(' ')

       if refname.match(/^refs\/heads\/(.*)/)
         branch = $1

         `git push origin #{branch}`
       else
         puts "#{refname} was weird, not sure what to do."
       end
    end
2 голосов
/ 20 июля 2010

Не похоже, что здесь есть что-то особенное - вам просто нужно стандартное решение для резервного копирования.

Мне повезло с rsnapshot или rsync, если мне просто нужны простые резервные копии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...