Pergunta

Se eu tiver um clone de um repositório git como uma cópia em cache em um servidor remoto para implantação Capistrano / style Vlad, é melhor fazê-A)

git archive --format=tar origin/master | (cd #{destination} && tar xf -)

ou B)

cp -R cached-copy #{destination} && rm -Rf #{destination}/.git

Para esclarecer, o repositório já está no servidor remoto, e eu só quero para copiar uma versão específica para um diretório lançamentos no mesmo servidor durante a implantação.

Foi útil?

Solução

Eu diria que realmente

rsync -avP /local/repo/* server:/remote/repo

Isso funciona, desde que ele está ok para ignorar todos os arquivos de ponto no repo, não só .git. Se você quiser pular única .git então você vai precisar a opção -f e a página do manual.

Eu amo rsync . Funciona muito bem e na maioria das vezes você pode usá-lo apenas como você poderia usar scp!

Outras dicas

A)

Você economiza a sobrecarga de rede de transferir o diretório .git, que poderia ser muito grande, dependendo de quanto a história e não objetos no HEAD atual.

Se você sempre quis ter um repositório git real na extremidade remota é melhor empurrando para um repositório único e verdadeiro ter que mudar os deltas.

Nenhum!

A melhor maneira de fazer isto é:

  • git fetch seu cache
  • Clone o cache para o diretório atual (com as opções --no-checkout ativado)
  • Checkout a cometer quiser.

Quando você faz um clone local de Git usa hardlinks. Isso significa que, até que você modificar um arquivo, que você não vai, você pode ter 1.000 implantações e utilização (quase) apenas o espaço que você precisa para um. Desta forma, também é muito mais rápido arquivamento ou rsync.

Também alguém pode já ter escrito o seu código para você.

de vigetlab capistrano_rsync_with_remote_cache

Eu uso isso com o Subversion e funciona bem para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top