| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 09:57:14
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Oi,
Estou definindo uma nova política de SCM e me baseando um pouco na experiência passada e em boas práticas que encontrei. Alguém conhece bons documentos de SCM? Pode comentar a prática adotada na sua empresa apra discutirmos?
Basicamente estou adotando regras simples de um branch por release, tags a vontade.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 10:19:18
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Será que não seria melhor uma tag por release não?
Acho que branchs são coisas pra se utilizar apenas em caso de experimentação ou mudanças muito grandes na estrutura do projeto.
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 10:24:43
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Eu estava pensando inicialmente em tags por relase e branches quando efetivamente for feita alguma manutenção, mas não vi muita utilidade em não gerar logo um branch.
O problema em apenas taggear é que você *vai* ter que dar manutenção no release antes da próxima versão ser lançada e se você não mantêm branches sua base de código se mistura.
Tipo:
Head---TAG_V1-------------------TAG_V2--->
Se eu preciso alterar algo em V1 para manutenção enquanto está sendo desenvolvido V2 eu não consigo fazer uma nova versão (1.1) sem ter tudo que foi desenvolvido até então para V2, o que não é desejável.
Com vários branches:
(a tentativa de desenho ficou horrível)
Eu tenho acesso ao código de V1 sem interferir no head enquanto V2 é desenvolvido.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 11:25:05
|
oyama
Virtual Machine Man
Membro desde: 19/04/2005 10:11:09
Mensagens: 572
Offline
|
O problema de trabalhar com 1 branch para cada versão é quando a coisa for convergir (merge).
Já passamos por este tipo de discussão na nossa empresa e o ideal for definir mais de uma politica, dependendo do tipo de projeto:
Default: usar apenas o HEAD e tags para gerar as versões. Excepcionalmente, abre-se um branch para lançar uma versão de manutenção no caso de não pode usar o proprio HEAD para isto (já foram comiitadas modificações que não foram testadas ou não podem ir na versão anterior). A modificação aplicada no branch deve "rapidamente" ser aplicada na linha de desenvolvimento da próxima versão. Esta política supõem que não há manutenção em versões passadas, apenas na versão em produção (stable).
Várias versões para manutenção: ai seria o caso de ter um branch para cada versão. Teria que existir politicas de convergencia de código (por tempo ou por feature) para que a versão mais recente também tenha a modificação do branch aplicada. Isto pode ser extremamente complexo dependendo do software de controle de versão utilizado. O CVS tem poucos recursos para uma boa administração disto. Dependendo do tamanho da equipe, vale a pena "burocratizar" o processo, criando mecanismos de controle próprio (criar scipts que verificam permissões de commits e depenencias de versões).
Eu tinha um artigo publicado na Dr. Dobb's a muito tempo que explanava sobre a utilização do CVS para SCM. Se eu achar o artigo eu posto aqui.
Espero ter ajudado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 11:32:32
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Hm.. eu não consigo pensar em como um projeto com mais de um release consiga sobreviver à primeira opção.
A política de merge é simples: completou a tarefa (provavelmente um bugfix) em um branch faz merge em todos os que também são afetados imediatamente. A tarefa só está concluída após os merges.
Fazer merge é chato e trabalhoso mas se você contar que não fazer é mortal, então não tem jeito.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 11:41:48
|
Fabricio Cozer Martins
GUJ Ranger
![[Avatar]](/images/avatar/2ecd2bd94734e5dd392d8678bc64cdab.jpg)
Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline
|
o chato é fazer merge de hora em hora, no mais tá blza
|
Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 11:58:50
|
oyama
Virtual Machine Man
Membro desde: 19/04/2005 10:11:09
Mensagens: 572
Offline
|
pcalcado wrote:Hm.. eu não consigo pensar em como um projeto com mais de um release consiga sobreviver à primeira opção.
Aqui nós conseguimos sobreviver com esta politica na maioria dos projetos
Boas praticas para isto dar certo:
Periodos relativamente curtos entre uma versão/release e outra. Trabalhamos com um periodo de 3 meses.
Os clientes terem uma política de ter sempre a versão mais recente em produção. Sei que isto é extremamente difícil, mas usando a política de se deu pau e não está com a última versão, então tem que migrar para a versão mais recente para ter a correção.
pcalcado wrote:
A política de merge é simples: completou a tarefa (provavelmente um bugfix) em um branch faz merge em todos os que também são afetados imediatamente. A tarefa só está concluída após os merges.
Fazer merge é chato e trabalhoso mas se você contar que não fazer é mortal, então não tem jeito.
Tentamos isto em um projeto, mas deu muito stress. A maioria dos programadores não realizava a tarefa corretamente e não tinhamos uma boa ferramenta para gerenciarmos isto. Bem, no nosso caso, a experiencia não foi boa.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 12:49:18
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
oyama wrote:
Os clientes terem uma política de ter sempre a versão mais recente em produção. Sei que isto é extremamente difícil, mas usando a política de se deu pau e não está com a última versão, então tem que migrar para a versão mais recente para ter a correção.
Isso me lembra um projeto há alguns anos-luz atrás. Tivemos que descompilar os binários apra provar que o sistema em produção não estava na última versão enviada. Passamos então a colocar como uma String no fonte o número da versão, um comando 'strings' do Unix resolvia.
De qualquer modo, isto não é viável no meu cenário, geralmente o cliente está com uma versão em produção, ahcam um bug. Enquanto aquela está em produção, temos que homologar uma versão com bugfix, isso tudo enquanto no Head estão desenvolvendo a nova versão.
oyama wrote:
Tentamos isto em um projeto, mas deu muito stress. A maioria dos programadores não realizava a tarefa corretamente e não tinhamos uma boa ferramenta para gerenciarmos isto. Bem, no nosso caso, a experiencia não foi boa.
Na última empresa que trabalhei isso era integrado com o processo. Havia um mergeblamer integrado ao Subversion que mandava emails diários com o que não foi integrado, funcionava muito razoavelmente. Além disso, a política do 'se não integrou não fechou a task' motiva porque a pessoa não pode dizer pro gerente que acabou até fazê-lo.
Claro que no calor da batalha contra um bug as coisas acabam sendo ingonardas mas o mergeblamer sempre lembra ao gerente de configurações que tem gente em dívida.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 13:50:32
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Para aqueles que como eu acompanham este tópico e boiaram no tal de Merge & Blame que o Phillip falou, aqui um link do no forum do subversion que achei interessante:
http://svn.haxx.se/users/archive-2004-07/0098.shtml
Algumas respostas:
http://svn.haxx.se/users/archive-2004-07/0101.shtml
http://svn.haxx.se/users/archive-2004-07/0105.shtml
Philip, qual SCM que está usando? Ainda usa o Perforce?
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 13:54:07
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Luca wrote:
Philip, qual SCM que está usando? Ainda usa o Perforce?
Nada, passei para Subversion em outro projeto e acabo de mudar para uma empresa que já tem CVS para dois projetos anteriores.
Se dependesse de mim os projetos novos iam pro Subversion mas isso é uma negociação um pouco complexa
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 14:17:26
|
juzepeleteiro
Virtual Machine Man
Membro desde: 19/07/2005 16:01:40
Mensagens: 583
Localização: Rio de Janeiro
Offline
|
Só um comentário, tags são estáticas, você não pode modificar uma versão tag. Para isso você têm que criar uma branch aparti dessa tag.
Exemplo de repositório (usando subversion):
/trunk é sempre a versão que está sendo produzida (major release, no exemplo seria a 2.0).
Em branches está, quando necessário, alguma versão que já foi lançada (cópia aparti do /tags) para bugfixes e/ou alguma evolutiva quando necessário. Quando essa versão for finalizada, ela recebera um novo número (no exemplo se houve só correção de bugs 1.1.2, se houve mudança de funcionalidade 1.2) e então é movida para tags.
O shelves é o espaço que cada participante do projeto tem para seu uso, seja para experimentar alguma coisa, para testar alguma ideia... Dessa forma você inibe o uso de "versões locais" e oferece backup, versionamente e tudo que um scm oferece.
Eu recomendo o livro " Pragmatic Version Control".
Outras coisas legais em um SCM é o uso correto das tags de versão, (@version $Id$ no meu caso) e um sistema de alerta.
Se você usa MSN no trabalho pode configurar o seu SCM para mandar um alerta a cada commit, se não usa (como eu) e o seu SCM gera um RSS com as mudanças (no caso do Subversion, através do WebSVN) instale um programa na maquina de cada desenvolvedor que dar aqueles alerta tipo "Novo Email" só que baseado em RSS. Funciona bem.
Existem varios desses sistemas de alerta, mas um que está para sair e me parece beeeem legal é o www.touchstonegadget.com
|
http://ofert.as - Cupons de desconto |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/06/2006 15:20:15
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Politica de SCM da maioria dos projetos onde eu trabalho aqui na ThoughtWorks eh sempre mais ou menos a mesma: se precisa fazer branch, ta na hora de voltar pra lousa e pensar melhor no assunto e em como estruturar o trabalho.
Alguns projetos fazem uma tag por iteracao, outros quando um story card eh completado (e passou por aprovacao do cliente). Eu prefiro tag-por-release, mas acabei nunca nem tendo que usar tags, entao tudo bem
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/06/2006 22:20:34
|
Fabricio Cozer Martins
GUJ Ranger
![[Avatar]](/images/avatar/2ecd2bd94734e5dd392d8678bc64cdab.jpg)
Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline
|
cv wrote:Politica de SCM da maioria dos projetos onde eu trabalho aqui na ThoughtWorks eh sempre mais ou menos a mesma: se precisa fazer branch, ta na hora de voltar pra lousa e pensar melhor no assunto e em como estruturar o trabalho.
Olá ,
porque você acha que branch não são legais ? Estou tendo essa mesma impressão
|
Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/06/2006 07:25:45
|
s4nchez
Virtual Machine Man
![[Avatar]](/images/avatar/bef4d169d8bddd17d68303877a3ea945.jpg)
Membro desde: 05/06/2006 11:35:55
Mensagens: 674
Localização: London, UK
Offline
|
Também sou da visão de que branch é exceção, e não regra.
Hoje em dia minha equipe segue a seguinte política:
-Tags sempre que for fechar uma iteração ou release (seguindo um padrão de nomenclatura pré-definido)
-Tags sempre que o programador não estiver confiante com a alteração que vai fazer e quer criar um "ponto de restauração" no repositório. (incentivamos essa prática pois sentimos que dá maior segurança)
-Branches quando é preciso corrigir um erro do sistema que já está em produção. Neste caso cria-se o branch na tag do release em questão, faz-se as correções, cria-se uma nova tag de release, publica-se o resultado e faz-se um merge do repositório.
|
Ivan Sanchez | coding dojo | blog | twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/06/2006 08:08:35
|
s4nchez
Virtual Machine Man
![[Avatar]](/images/avatar/bef4d169d8bddd17d68303877a3ea945.jpg)
Membro desde: 05/06/2006 11:35:55
Mensagens: 674
Localização: London, UK
Offline
|
pcalcado wrote:
Isso me lembra um projeto há alguns anos-luz atrás. Tivemos que descompilar os binários apra provar que o sistema em produção não estava na última versão enviada. Passamos então a colocar como uma String no fonte o número da versão, um comando 'strings' do Unix resolvia.
Resolvemos este problema (e outros) utilizando um arquivo changelog.txt
|
Ivan Sanchez | coding dojo | blog | twitter |
|
|
 |
|
|