Fluxo de trabalho GIT de desenvolvedor único (saindo do FTP direto)

11

Estou tentando decidir se a mudança para o VCS é sensata para mim. Sou desenvolvedor web único em uma organização pequena (5 pessoas). Estou pensando em VCS (Git) por estes motivos: controle de versão, backup externo, repositório de código centralizado (pode acessar de casa).

No momento, eu trabalho em um servidor ativo em geral. Entro no FTP, faço minhas edições e as salvo, em seguida, carrego e atualizo novamente. As edições geralmente são para arquivos de tema / plug-in para CMSes (por exemplo, Concrete5 ou Wordpress). Isso funciona bem, mas não fornece backup nem controle de versão.

Eu estou querendo saber a melhor forma de integrar o VCS neste procedimento. Eu imaginaria configurar um servidor Git no servidor web da empresa, mas não sei como enviar as alterações para as contas dos clientes (geralmente VPS no mesmo servidor) - no momento, basta acessar o SFTP com os detalhes e fazer as mudanças diretamente.

Também não tenho certeza do que representaria sensivelmente um repositório - o site de cada cliente obteria o seu próprio?

Qualquer insight ou experiência seria realmente útil. Acho que não preciso de todo o poder do Git, mas o controle básico de versão e o acesso à nuvem de fato seriam realmente úteis.

Edição: Eu reduzi-o para as duas opções que parecem mais sensatas. O primeiro é baseado na resposta da ZweiBlumen , na qual são feitas edições no servidor ativo e confirmadas a partir daí para o servidor Git (externo). Isso tem a vantagem de que meu fluxo de trabalho não mudará muito (há uma etapa extra de fazer as confirmações, mas, caso contrário, é idêntico).

A segunda opção é trabalhar localmente usando XAMPP e confirmar as alterações na máquina local. Somente quando o site entra no ar eu carrego o artigo finalizado para o servidor da Web da máquina local (imediatamente após a confirmação final para o Git). Isso parece bom em teoria, mas se o site posteriormente exigir reparos e eu os fizer no servidor ativo (como normalmente faço), precisarei copiar manualmente os arquivos alterados no meu repositório local e confirmar essas alterações no diretório Servidor Git. Isso parece excessivamente complexo e talvez seja muito diferente do meu fluxo de trabalho atual.

Penso que, em geral, darei uma chance à opção nº 1 e verei como eu vou.

melat0nin
fonte
1
O que deve ser lembrado sobre o git (ou qualquer outro VCS distribuído) é que todos os repositórios são, pelo menos tecnicamente, pares: seu repositório local é tão "real" quanto o servidor ativo ou o repositório de backup. É suas políticas de fluxo de trabalho que lhes dão estrutura - por isso, se você realmente quer continuar fazendo o trabalho preliminar no servidor ao vivo, você pode ...
comingstorm
Obrigado, é bom saber. A flexibilidade inerente ao Git torna difícil elaborar um ponto de partida para as "melhores práticas" - isso é uma força do ponto de vista de um usuário experiente, mas é discutível uma fraqueza do ponto de vista de um noob!
melat0nin

Respostas:

3

O que eu faço (com o Subversion, mas também funcionará com o Git) é comprometer tudo em um repositório do Subversion, mas obviamente dividir em projetos, ramificações e tags, conforme necessário. Depois, faço check-out desses repositórios no servidor ativo. Portanto, quando eu faço uma alteração na minha máquina de desenvolvimento e a submeto ao repositório, geralmente é apenas o caso de atualizar a cópia com check-out no servidor ativo para tornar as alterações ativas. O bônus adicional é que, se eu precisar fazer uma correção rápida no servidor ativo, eu o comprometo no repositório do servidor e atualizo a cópia de trabalho na minha máquina de desenvolvimento.

Tenho certeza de que existem outras maneiras de gerenciar isso, mas acho isso bastante direto e estou exatamente na mesma situação que você: desenvolvedor único em uma organização pequena (4 pessoas).

ZweiBlumen
fonte
1
Obrigado pela sua resposta! Isso significa que você puxa o instantâneo para sua máquina local, faz e confirma alterações, e faz uma solicitação de recebimento do servidor ativo (por SSHing in)? E se a mudança for realmente pequena? Você executa um servidor da web local para desenvolvimento? (Eu não poderia passar por esse processo de mudanças CSS simples .. Eu ficaria louco!)
melat0nin
1
Para uma pequena alteração no CSS, eu faria a alteração diretamente no servidor e, em seguida, confirmava essa alteração no repositório a partir do servidor. Quando eu tenho que fazer uma quantidade mais séria de trabalho no site, atualizo o site na minha máquina dev com a versão mais recente do site do repositório. Eu acho que realmente não importa onde você faz a alteração (servidor ou máquina de desenvolvimento) desde que você a comprometa no repositório.
ZweiBlumen
Então, quais ferramentas você usa para isso? FTP para fazer o arquivo mudar diretamente no servidor, em seguida, uma sessão SSH é aberta em segundo plano para realizar as confirmações no servidor Git de vez em quando?
melat0nin
1
Sim, é basicamente isso. Na verdade, eu uso o Subversion. Temos sites no Windows, bem como servidores Linux. Na área de trabalho remota do Windows I, altere o CSS e confirme usando o TortoiseSVN. No Linux, eu uso uma sessão SSH e vim para fazer as alterações (mas você também pode fazer o FTP das alterações, eu acho).
ZweiBlumen
Eu segui a sua sugestão de editar no servidor e confirmar a partir daí via SSH, o que venho fazendo há alguns dias. Parece funcionar muito bem, obrigado!
Melat0nin
2

É bastante fácil criar um post-updategancho , que atualiza automaticamente ( git archiveé preferível exportar por razões de segurança) o diretório de dados do servidor da Web quando você envia para uma ramificação específica.

Portanto, tenha um repositório git configurado em algum lugar (por razões de segurança, eu o colocaria em um servidor diferente da web) com esse gancho. Obviamente, você precisará do servidor de teste para testar alterações maiores, que podem estar na sua máquina local ou atualizadas pressionando para ramificação diferente. Em qualquer um dos casos, você pode ignorá-lo para obter ortografia trivial e correções de CSS simplesmente executando commit e push.

Jan Hudec
fonte
1

Eu seguiria estas etapas:

  1. Configure o servidor remoto com um par de chaves público / privado adequado para envio / recepção remoto
  2. Configure duas ramificações testando e liberando
  3. Desenvolva localmente com um ambiente de teste na ramificação de teste
  4. Quando estiver satisfeito, mescle-se à ramificação de liberação e envie para o servidor remoto
  5. Ligue o servidor remoto para atualizar para a versão mais recente do lançamento

Configure um repositório por site, para evitar que eles se amontoem. As ramificações separadas permitem evitar que a versão "boa" atual seja alterada para o que você está trabalhando no momento, o que pode ou não funcionar.

Spencer Rathbun
fonte
Estou entendendo corretamente - existem dois servidores (1) para o Git, (2) servidor web ativo e uma máquina de desenvolvimento local. O Dev é feito localmente e depois enviado ao servidor Git, que possui um gancho para atualizar o servidor ativo?
melat0nin
@ melat0nin Essa é uma maneira de fazer isso. Você também pode obter o servidor ativo do servidor git como um trabalho cron. Ou você pode ter 2 máquinas. A máquina de desenvolvimento local e o servidor da web de produção ao vivo. Dessa forma, enviar o repositório da máquina dev para a máquina de produção é atualizado para o ramo de lançamento mais recente sempre que você envia.
Spencer Rathbun