A maneira que eu costumo fazer isso é usar o SSH ao invés do hgweb para push e pull. O esquema também funciona se você enviar diretamente para o diretório do site, no entanto, eu recomendo isso por alguns motivos. Primeiro, empurrar para um repositório nonbare ainda precisaria de um checkout de qualquer maneira (isso pode ser facilmente corrigido com um hook de entrada), segundo se você bagunçar a implementação, é muito mais fácil de corrigir se o diretório do site for separado do diretório de repositório, diretórios separados permitem que você envie para o repositório compartilhado sem implementar (por exemplo, quando você precisar mover códigos que não estão prontos para serem executados de uma máquina de desenvolvimento para outra máquina de desenvolvimento).
Então o esquema funciona assim:
- servidor
- diretório de repositório "bare": repositório compartilhado
- diretório do site "ao vivo": hg pull / path / to / bare (crie uma entrada [paths] para isso em hgrc)
- script / alias para ir do bare para o live e fazer outras tarefas de implantação
- ~ / .ssh / authorized_keys contém chave pública para acesso ssh
- Local
- diretório de desenvolvimento "local": hg push ssh: //[email protected]/path/to/bare (crie uma entrada [paths] para isso em hgrc)
- ~ / .ssh / rsa_id é usado para envio seguro sem senha
O uso do SSH também seria mais seguro do que o uso do hgweb, já que o processo do Apache não deveria ser capaz de gravar no diretório do site "ao vivo" nem no diretório "bare" do repositório. Atravessar o SSH significa que apenas o usuário do SSH precisa ter acesso de gravação a esses diretórios.
Sem um repositório nu, parece um pouco mais simples assim:
- servidor
- diretório do site "ao vivo"
- ~ / .ssh / authorized_keys contém chave pública para acesso ssh
- Local
- diretório de desenvolvimento "local": hg push ssh: //[email protected]/path/to/live (crie uma entrada [paths] para isso em hgrc)
- ~ / .ssh / rsa_id é usado para envio seguro sem senha
mas você perde as vantagens que mencionei acima.