Hospedando um anexo Git em um servidor sem o git-anexo instalado

9

As máquinas A e B hospedam um repositório comum do anexo git . Ambos têm o programa git-annex instalado e eu edito manualmente / confirmo / etc coisas nas duas máquinas. A&B não estão conectados à Internet ao mesmo tempo, portanto não podem ser sincronizados diretamente.

O servidor C está sempre ativado e conectado (e gratuito e bastante seguro). Possui o git instalado, mas não tenho direitos de administrador, portanto não consigo instalar o git-anexo.

Minha pergunta: Posso usar o Servidor C como um hub central para enviar e receber atualizações do git-anexo de A e B, sem precisar instalar o git-anexo e todas as dependências do haskell ghc no C?

Tentei usar C com controles remotos especiais "diretório" ou "rsync" , mas isso parece conter apenas arquivos, não o restante do que é necessário para atualizar A e B após pressionar / puxar.

Qualquer dica seria muito apreciada!

Vincent
fonte

Respostas:

6

Com o acesso git e rsync ao mesmo servidor, você pode usá-lo para armazenar o histórico (via acesso git) e o armazenamento de valores-chave do anexo (via acesso rsync). Eles também podem ser dissociados e armazenados em qualquer número de servidores diferentes.

Parece que você já leu todas as ferramentas necessárias. Basicamente, você terá dois controles remotos separados, ambos apontando para diferentes locais no server-c. O primeiro controle remoto (server-c) é um controle remoto normal do git para sincronizar seu histórico e qualquer coisa que seja verificada diretamente no repositório git. O segundo controle remoto é um controle remoto especial em anexo.

[remote "server-c"]
    url = [email protected]:/path/to/repo.git
    fetch = +refs/heads/*:refs/remotes/server-c/*
[remote "server-c-rsync"]
    annex-rsyncurl = example.com:/home/user/annex-rsync
    annex-uuid = ...

Você deve ser capaz de configurar isso com algo como:

git remote add server-c [email protected]:/path/to/repo.git
git annex initremote server-c-rsync type=rsync rsyncurl=example.com:/home/user/annex-rsync encryption=none

Isso deve fornecer a funcionalidade básica que você está procurando. A única desvantagem é que você tem 2 nomes remotos diferentes que realmente apontam para o mesmo servidor. Em particular, você só precisa se lembrar de usar o controle remoto especial (server-c-rsync) ao usar os argumentos --to = ou --from = de obter, copiar e mover.

Pode ser possível apontar um único controle remoto para os dois locais, no entanto, não tenho certeza se isso é realmente suportado. Os seguintes comandos parecem criar um .git / config sensato.

git init
git annex init "test"
git remote add server-c [email protected]:/path/to/repo.git
git annex initremote server-c type=rsync rsyncurl=example.com:/rsync/user encryption=none

Para mim, isso resulta em um único controle remoto no .git / config com um url = (para as operações normais do git) e um anexo-rsyncurl =. No entanto, eu não testei mais isso para garantir que o anexo git ignore o URL e use apenas a entrada annex-rsyncurl ao operar com arquivos anexados.

Justin Geibel
fonte
Ótimo! Vou fazer alguns testes, mas isso deve me aproximar bastante de uma solução viável. Muito obrigado pelo seu tempo e resposta!
Vincent
Ainda bem que pude ajudar. Comecei a usar o git me anexando durante as férias e até agora estou extremamente feliz com isso!
precisa saber é o seguinte
Eu acho que o último exemplo deve funcionar. Na verdade, eu acho que seria rsync arquivos no lugar, mesmo se é apenas um repositório git nua ...
anarcat