Git Backup / home com outros repositórios dentro dele

1

Estou tentando fazer um backup automatizado do meu diretório /home . Em teoria, isso é simples, executando isso em um cronjob:

cd /home
git add .
git commit -m "nightly backup"
git push

onde o push enviará as alterações para um servidor de backup remoto.

O problema que tenho é se houver um repositório git no diretório /home , por exemplo, %código%. A tarefa de backup é executada e envia todas as alterações ao servidor. No entanto, quaisquer diretórios que contenham repositórios agora estarão em branco no servidor.

Eu percebo que isso poderia ser tratado com submódulos. No entanto, isso tem várias desvantagens:

  • Cada submódulo deve ser registrado com o repositório pai (Isso pode ser automatizado, mas seria um pouco trabalhoso recorrer a todos os diretórios e adicionar o submódulo toda vez que o cron for executado)

  • As alterações não confirmadas do submódulo não serão submetidas a backup, isso não é um comportamento desejável para um backup, eu quero um instantâneo ao vivo de todos os arquivos como eles estão no momento, independentemente de serem ou não rastreado em outro lugar

Eu percebo que existem outras ferramentas, como o rsync, para fazer isso, no entanto, seria bom ter que acompanhar as mudanças ao longo do tempo. Existe alguma maneira de ter git tratar outros repositórios como se fossem apenas arquivos normais (incluindo o diretório .git!)

Uma solução alternativa para isso seria executar algo assim no cron:

  • Recorre a todos os subirectories
  • Procure uma pasta .git
  • Renomeie .git para outra coisa
  • Em seguida, execute o padrão add / commit / push

Isso funcionará, mas exigirá renomear todas as pastas .git de volta durante qualquer processo de restauração. Existe alguma maneira de conseguir isso sem essa sobrecarga?

    
por Tom B 19.04.2016 / 14:12

3 respostas

1

Sei que meu comentário não é uma resposta direta, mas ... Eu recomendaria reorganizar sua metodologia de backup das seguintes formas (ou / ou):

  • Ter um repositório "maior" único com todos os subprojetos dentro dele: um repositório para / home, quero dizer. Isso pode parecer louco à primeira vista, mas depende da complexidade de seus sub-projetos (subdiretórios) e pode funcionar para algo simples e que não é desenvolvido ativamente.
  • Descarte sua ideia e mantenha o backup completo com uma solução de backup especial (o rsync é apenas um deles e não a panacéia). Isso faz sentido porque "por que você precisa fazer backup de todo o material relacionado ao git?". É melhor olhar para isto como em um nível mais alto de sua arquitetura que precisa ser mantido de outra forma que o git (git é algo interno). Aqui eu quero dizer que se o seu principal motivo de " no entanto seria bom ter git rastrear as mudanças ao longo do tempo " é a capacidade de retroceder as mudanças para algum ponto exato, então Git é uma sobrecarga e não uma solução que você precisa. Backups diferenciais / incrementais + completos com software especial (onde você pode excluir todas as pastas ".git", btw) é uma maneira apropriada.
por 19.04.2016 / 14:32
2

Git over git é um pouco louco:)

  1. Tente adicionar ao gitignore dir com seus repositórios.
  2. Adicione seu comando cron script para arquivar seus repositórios antes de confirmar.
  3. (Optioal) Configure a consolidação / envio automático para todo o seu repositório incluído.

IMHO, 1 & 2 será bom para você.

cd /home
tar -zcvf my-gits-backup.tar.gz path/to/git/projects
git add .
git commit -m "nightly backup"
git push
    
por 19.04.2016 / 14:34
2

Eu também tenho um monte de git repos e faço backup deles no logout, reinicialize ou desligue com rsync na minha nuvem. É a solução mais simples que você encontrará por aí.
Eu também ouvi falar sobre bup ( link ), mas nunca usei, então não posso dizer você como isso funciona.
Eu mesmo, eu não usaria o git para fazer backup de múltiplos repositórios do git (já que eu não preciso de um histórico de backups) A única história na qual estou interessado, já está dentro dos repositórios do git!

    
por 19.04.2016 / 15:14

Tags