Fazendo a mudança para o controle de origem


10

A nossa é uma empresa relativamente pequena (3-4 programadores e 3-4 designers de sites) que desenvolve um aplicativo Web PHP de propósito único que fornece a funcionalidade para mais de 100 sites. Operamos por alguns anos em um ambiente separado de desenvolvimento e produção que funcionou bastante bem. Sempre houve recursos separados suficientes para serem desenvolvidos para que os programadores nunca entrem em conflito e era mais conveniente trabalhar sem o controle de origem; mesmo que houvesse risco de perda de dados e tivéssemos nosso quinhão de arquivos faltando em uma ação inadvertida.

A outra consideração é que nossos designers não são conhecedores de tecnologia (eu os apresentei à marcação html, em vez de usar WYSIWYGs). Esse foi um dos motivos para hesitar em mudar para o versionamento.

No entanto, agora que alcançamos mais de 100 sites e a equipe de desenvolvimento está crescendo, estou tentando padronizar nossos procedimentos e o controle de origem parece um passo lógico para os programadores. Espero que isso também acelere nossas implantações de patches.

Infelizmente, tenho uma experiência muito limitada com a configuração de um sistema de controle de origem. O que estou curioso para saber de pessoas com uma configuração semelhante ou experiência em fazer a troca:

1) Você faz a versão de tudo (sites, css, modelos html e código do aplicativo) e, assim, força os designers a aprender o versionamento? Ou são apenas os desenvolvedores que trabalham no código do aplicativo?

2) Quais são algumas das armadilhas a serem observadas ao configurar inicialmente o controle de origem?

3) Implantação de dev => dicas de produção para controle de origem.

Obrigado por todas as idéias.

Editar 1: Dang. Todo mundo até agora está recomendando controlar tudo. Isso vai me fazer perder o cabelo cedo. Provavelmente, isso desencadeará uma nova pergunta no futuro próximo. Obrigado pelo conselho até agora, continue!

Edit 2: Muitas boas respostas, e analisaremos os vários sistemas de controle de versão. Obrigado pelas respostas a todos!


@mattdm ahh, 'version-control' ... eu estava tentando 'fonte-control' / sigh
dtest

Também "controle de revisão".
mattdm

A Adobe e a maioria dos outros desenvolvedores de software gráfico maiores já têm suas próprias implementações de controle de versão de ativos - indicando que isso deve ser ainda mais desejável para os designers (e sim, que inclui ativos de versão e não apenas arquivos descritores de texto).
Oskar Duveborn

Respostas:


10

É útil ter tudo versionado, mesmo para designers. E se implementado bem com um bom treinamento, acho que eles acharão mais útil do que oneroso.

Se você está apenas começando, eu sugiro usar um sistema de controle de versão distribuído, como git ou mercurial . Essa é a tendência geral do mundo e há muitas vantagens. É fácil trabalhar em um modo desconectado, sem dependência de rede e a capacidade de executar um trabalho privado e polido, ainda sob controle de versão, verificando tudo centralmente quando estiver pronto.

E, para não recorrer a apelos à autoridade ou algo assim, verifique o que Joel Spolsky tem a dizer sobre o assunto . (Citação de escolha: "Subversion = Sanguessugas. Mercurial e Git = Antibióticos.") Entre outras coisas, ele destaca que esses novos sistemas usam um novo modelo mental, diferente do controle de versão tradicional - e é por isso que entram nesse tipo de abordagem desde o início é uma vitória.


obrigado pela resposta, mattdm. Vou verificar esses links
DTest

+1 para esse ponteiro do artigo de Spolsky; Estou apenas lendo o tutorial Hg (HgInit) e acho que estou começando a obter o dVCS, pela primeira vez. Obrigado (você e Joel).
MadHatter

3

Eu diria que colocar tudo sob controle de versão. Quando tudo funcionar, você poderá copiá-lo para uma tag que, para a maioria dos sistemas SCM, não requer muito espaço em disco no servidor.

No que diz respeito às armadilhas iniciais, você não deve se preocupar muito; comprometa tudo com o servidor e, se não estiver correto, você pode embaralhar e excluir as coisas extras mais tarde. A única coisa que eu não confirmaria são os artefatos criados a partir da fonte, ou seja, os arquivos de código java pertencem ao controle de versão, mas não as classes compiladas ou ISOs / DVDs inteiros dos binários "criados a partir da fonte".

O desenvolvimento da produção é fácil, em todos os principais marcos, crie uma filial. O layout do diretório no sistema de controle de versão geralmente se parece com:

/ trunk / projeto / filiais / projeto / versão1 / filiais / projeto / versão2 / filiais / projeto / versão3

Então, digamos que você encontre um bug na versão 2 do produto, navegue até esse ramo, corrija-o e libere a versão 2.1. Enquanto você trabalha na pasta / trunk / project para a nova versão 4, cabe a você quais recursos são mesclados para trás e para frente.

Não deixe que os usuários de kool-aid do SCM o enganem, há muito poucas diferenças funcionais entre os sistemas de controle de versão populares, como o Subversion e o Git. O mais importante para sua equipe será o quão bem esses servidores se integram às suas ferramentas existentes. Também não gosto de WYSIWYGs, mas é bom ter eclipse-php ou outros IDEs compatíveis com o servidor.


Oh, cara, você precisa de um pouco mais de ajuda. Você pode usar o controle de versão distribuído para replicar apenas algo como um sistema CVS ou SVN, mas há realmente uma diferença fundamental. (Isto não é para bater em SVN, o que é bom para o que faz, você mente.)
mattdm

3

Sou desenvolvedor e já trabalhei como administrador de TI antes.

Para responder suas perguntas específicas:

1) Sim, versão tudo.

2) Sugira que você configure um repositório de controle de versão e um projeto fictício para as pessoas aprenderem.

3) Marque as versões que são colocadas em produção. até as provações. Então você sempre pode verificar uma versão específica que alguém está executando.

Vejo que você marcou a pergunta como CVS.

Minha sugestão é dar uma olhada séria no subversion, combinado com o TortoiseSVN, o que facilita muito o uso. Também existe um TortoiseCVS.

Eu sugiro que você execute um tutorial interno sobre controle de versão. Ficarei surpreso se seus desenvolvedores / designers não tiverem encontrado isso antes. Tartaruga apenas torna muito fácil de usar.

Também pode ser benéfico instalar uma das interfaces da web no cvs ou no subversion.

A razão pela qual sugiro subversão sobre o CVS é ​​que, embora o CVS seja muito bom, ele apresenta alguns problemas sérios de design e implementação. Os pontos altos para mim foram: 1) Você não pode controlar os diretórios da versão 2) O manuseio de arquivos binários não é muito bom, pois muitas coisas costumam ser texto. 3) Nenhum commit atômico. 4) Lembro-me de que costumava atrapalhar e deixar os arquivos de bloqueio por aí que eu tinha que remover manualmente do repositório de códigos. Havia espaço para corrupção ao fazê-lo, desde que você remova os arquivos de bloqueio. 5) Suporte SSL e gerenciamento de usuários / senhas

O Subversion basicamente corrige todos esses problemas provavelmente são muitos outros. Ele também possui muitos recursos avançados, como externos (que eu realmente uso). E é possível vincular os usuários / grupos ao diretório ativo que você pode achar útil. Na época, usei o CVS que não estava disponível. Pode ser agora, eu não verifiquei.

Provavelmente a maior diferença para entender o svn ao usá-lo é que você não cria tags. Em vez disso, você cria o que parecem ser cópias, onde o diretório do projeto é copiado para a pasta Tags e recebe um nome. Dê uma olhada na documentação e você verá o que quero dizer. Eu sei que parece estranho, mas você se acostuma.

Este site pode ter algum benefício (embora eu não possa garantir): Configuração de um repositório svn modular para sites php http://www.howtoforge.com/set-up-a-modular-svn-repository-for -php-websites


Sim, eu apenas rotulei como cvs porque não consegui encontrar a tag certa (que acabou sendo 'version-control'). Eu brinquei com o svn um pouco no passado e provavelmente verificarei o git e alguns outros antes tomar uma decisão final. Obrigado pelas sugestões também, especialmente sobre a versão fictícia. Esse link será útil, pois tenho certeza de que essa seria uma das minhas perguntas quando eu finalmente configurar o controle de versão
DTest

3

Com grande respeito à grande parte da sabedoria que aparece acima - e é sensato - a implantação do controle de versão é como a implantação de sistemas de monitoramento. Meus clientes dizem "o que devo monitorar" e a resposta óbvia é "monitorar tudo". Mas isso não é uma notícia bem-vinda: eles têm 350 sistemas, cada um dos quais com 20 a 30 variáveis ​​de sistema mais um monte de variáveis ​​específicas de uso, e todos eles podem ser monitorados de maneira útil; mas há apenas um de mim e eles gostariam de ver alguns resultados dentro de duas semanas.

Portanto, embora eu concorde que a melhor prática é controlar tudo a versão, se isso não for prático, comece controlando aquelas coisas cuja falta de controle causou muitos problemas até agora .

Se a maioria das interrupções for causada pelo código do aplicativo, comece controlando isso; se a maioria for por patches CSS não planejados, controle isso; e assim por diante.

Isso não apenas fornecerá o melhor retorno para o investimento de tempo, mas também fornecerá boas razões para estender o uso do controle de versão no futuro: "Como adicionamos controle de versão ao código do aplicativo, interrupções não planejadas em 30 minutos caíram de 11 por mês para 2. Esses dois foram causados ​​por alterações estáticas de HTML, então pretendemos controlar a versão seguinte ".

Um lançamento graduado também oferece a você usuários qualificados dentro da organização. Sim, você teve que ensinar todos os seis desenvolvedores de aplicativos como usar o sistema, mas eles aprenderam e estão bem com ele; agora que é hora de lançar o sistema para a equipe de CSS, você tem mais seis especialistas internos do que há três meses. Você pode até ter convertidos a essa altura; um desenvolvedor que teve sua bunda salva pela capacidade de fazer backup imediatamente de uma mudança prejudicial pode muito bem ser seu melhor evangelista para a equipe de CSS.

Editar 1: se você decidir seguir esse caminho, um pano de fundo barato como chips é adicionar um arame de tripa por cima, pelo menos em uma caixa de produção. Dessa forma, se as coisas quebram, mas o VCS diz que não era nada atualmente tem a responsabilidade, você pode identificar rapidamente o que tem mudado, que tanto acelera a correção e sugere seu próximo candidato para controle de versão.


1
IMHO é melhor ir de botas e tudo e versão do tudo. Muitas vezes voltará a morder você, se não o fizer. por exemplo, eu não costumava fazer check-in de bibliotecas de terceiros, mas agora faço isso. O motivo é que, devido às dependências, é melhor conseguir tirar todo o sistema do controle de versão do que tentar juntar tudo e fazê-lo funcionar. Se você não fizer isso, precisará manter cópias de bits compatíveis e documentar o que depende de quê. Com o VC, basta fazer check-in e ele deve funcionar quando você fizer o check-out. Entendeu o que eu quis dizer?
Matt

Ei, eu também; leia o trecho que diz "Concordo que a melhor prática é controlar tudo a versão". Mas na edição 1, o OP solicita especificamente estratégias alternativas à melhor, e isso é muito o segundo melhor, em conflito.
MadHatter

Desculpe cara, eu interpretei esse parágrafo como "não é prático" quando diz "se não é prático ...", então você está certo, é uma alternativa.
Matt

Esta é realmente uma alternativa viável. Especialmente com a mentalidade de uma empresa "Prove antes de nos comprometermos totalmente".
dtest

2

Versão controla tudo. Não faz sentido ter arquivos HTML sob controle de versão e, em seguida, ter um site completamente danificado por causa de uma alteração no CSS que não está sendo controlada e, portanto, não pode ser revertida facilmente.

Armadilhas: Eu, pessoalmente, não encontrei nenhuma durante meu uso bastante limitado do controle de versão.

Implantação: Atualmente, uso o subversion hospedado nas caixas do Windows, tanto no trabalho quanto em casa. Windows apenas porque é isso que está disponível. Caso contrário, poderia facilmente ter sido outro sistema operacional. A chave para usuários não-técnicos i é fornecer uma ferramenta simples baseada em GUI para lidar com importações, exportações, confirmações, diferenças, etc. Qual ferramenta usar dependerá um pouco do sistema operacional e do VCS usado.

Uso: Quando faço alterações no código, testo e confirmo com frequência. Isso me permite voltar o quanto for necessário quando eu estragar. Além disso, comparando várias revisões e copiando partes do código, não preciso perder todas as alterações apenas porque preciso voltar para uma versão anterior para corrigir algumas coisas em outra parte do código.

Benefício adicional: você pode conceder acesso ao repositório de origem por uma VPN ou conexão segura, permitindo que os usuários trabalhem em casa ou em outro lugar. por exemplo, posso ter uma ideia em casa e editar meu código de trabalho de vez em quando, antes de perder o pensamento.


2

Versão de tudo.

A implantação depende de quanto você precisa "personalizar" para cada um desses sites. Se eles são idênticos, exceto por um ou dois arquivos de configuração, basta verificar uma cópia do código para eles e fazer pequenas alterações. Conforme necessário, execute o comando update do controle de versão para cada um dos clientes.

Se você optar pelo modelo de distribuição "checkout diretamente no site do cliente", verifique se o servidor exclui o acesso aos diretórios de controle de versão, para que as pessoas não possam navegar para http://example.com/. git / e espie seus internos. Além disso, eu definitivamente teria um host virtual de teste e produção para cada cliente, a fim de garantir que uma atualização do site não funcione. Especialmente se você estiver fazendo alterações personalizadas nos arquivos de clientes individuais, precisará lidar com conflitos antes que as alterações sejam ativadas. Nesse caso, você faria o check-out / atualizaria o host virtual de teste e, quando tudo funcionasse corretamente, copiaria o host virtual de teste para o host virtual de produção.


infelizmente, vai ter que ser configurado com cada site ser 'personalizado' para permitir a possibilidade de personalização (mesmo se não existe nenhum no momento)
dtest

@Teste isso ainda pode ser feito, significa apenas mais trabalho para mais conflitos, dependendo da natureza da personalização. Obviamente, se você está fazendo MUITA personalização, é preferível lidar com conflitos do que esquecer que você alterou o index.php para um cliente e substituí-lo por um novo index.php que não possui mais os recursos especiais
DerfK

Também no @DTest, vou sugerir as sugestões de "controle de versão distribuído" para este caso. Você poderá rastrear as alterações personalizadas que você fez para um cliente e registrá-las no repositório "pessoal" do cliente, depois extrair as alterações do repositório "central" (nunca repita as alterações personalizadas do cliente de cliente para o repositório central)
DerfK

0

Tudo o que as pessoas estão dizendo sobre o que versão é boa.

Se você decidir ir com o subversion, recomendo tentar a pilha Bitnami Trac; http://bitnami.org/stack/trac

Ele simplifica a configuração do subversion para você, vem com um sistema de emissão de bilhetes (que você pode optar por usar neste estágio ou não) para acompanhar mudanças e bugs, e um wiki que pode ser usado para documentar como você deseja que seus desenvolvedores usem o sistema.

Dê a todos os seus desenvolvedores do Windows o TortoiseSVN. Ensine a todos alguns princípios básicos da linha de comando svn.

No final do dia, a ferramenta é menos importante do que a mentalidade que você precisa para instilar seus desenvolvedores. Espero que em breve eles vejam que o controle de versão é uma coisa boa porque os impede de perder trabalho e permite que eles voltem de becos sem saída que os levam a lugar nenhum de volta a bons estados conhecidos. Os benefícios superam a sobrecarga (leve).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.