Caso de negócios para sistemas de controle de versão descentralizados


26

Eu procurei e não conseguimos encontrar negócios razões por que git / mercurial / bazzr sistemas são melhores do que sistemas centralizados (subversão, forçosamente).

Se você estava tentando vender um DVCS para uma pessoa não técnica, quais argumentos você forneceria para o aumento do lucro do DVCS .

Em breve, lançarei o git para o meu gerente, levará algum tempo convertendo os repositórios do subversion e algumas despesas na compra de licenças de smartgit.

Editar Tentei transformar essa pergunta em uma discussão genérica sobre centralizado versus descentralizado, mas inevitavelmente ele se transformou em git vs subversão. Certamente existem melhores sistemas centralizados que o subversion.


1
Estamos em uma posição semelhante olhando para defender o caso e é preciso dizer que não estou convencido de que exista um atualmente.
Jon Hopkins

Poderia git-svnatender às suas necessidades?
precisa saber é o seguinte

@JBRWilkinson Acabei de usar o git-svn para migrar vários repositórios para o git. A empresa não investiu muito em ferramentas que se integram ao svn, portanto não foi um grande problema.
Keyo 7/01/11

Ref da edição - você ainda não explicou como e por que o SVN está falhando com você, de modo que você sente que precisa de uma substituição. Minha resposta (por exemplo) NÃO é sobre git vs svn, é sobre encontrar um business case para alterar o status quo.
Murph

Respostas:


23

Hmm, como gerente, tenho duas reações imediatas a esse ponto:

  • Se você ainda não tem boas razões, por que está lançando um git diferente de estar na moda?
  • Da mesma forma, como o Subversion está falhando e você precisa de uma substituição?

Na verdade, não sou negativo - acho que provavelmente existe um caso a ser feito (dependendo das circunstâncias), mas se o caso for simplesmente que o git é "melhor" do que a subversão, então você realmente não tem um.

Você também precisa ser capaz de enumerar as desvantagens - você já identificou a sobrecarga da migração e da reformulação de ferramentas - o que mais é um problema? Por exemplo, o que acontece com seu repositório legal, central e com backup? Como você se integra ao seu servidor de construção de integração contínua (se você não possui um, esqueça o git e classifique-o primeiro). Segurança e rastreamento - o SVN é executado com logins e permissões adequados.

Na minha opinião, os benefícios estão na flexibilidade, na melhor fusão, na capacidade de realizar confirmações locais sem interromper a construção e assim por diante. As desvantagens estão na falta de controle e na mesma flexibilidade.

Pode ser que tudo o que você queira fazer seja executar o git localmente em sua máquina como um cliente "melhor" do subversion (eu estou olhando para fazer isso usando mercurial).

Hmm, talvez toda essa resposta seja realmente um comentário? Você precisa defender aqui (na pergunta) o git over subversion (em seu ambiente) para ver se podemos ajudá-lo a identificar o caso de negócios.


FWIW, eu sei que é possível designar facilmente uma instância específica do repositório para ser a fonte de tronco / referência e, além disso, é assim que se liga ao servidor de construção - a diferença é que, com o DVCS, é mais uma decisão administrativa do que algo inerente à arquitetura.


1
Abordando as preocupações de permissões / flexibilidade: você ainda precisa de um repositório "fonte" também, onde é possível definir os direitos normalmente. A integração contínua é executada no repositório de origem, os desenvolvedores clonam o repositório de origem etc ... Seu backup é menos importante, já que todo mundo tem um clone, não apenas um checkout.
Matthieu M.

1
A observação sobre clones completos sendo backups é bem feita. Admito livremente que há algumas áreas que não entendi bem o suficiente, pois meu material de "trabalho" é svn e meu mercurial é pessoal e, até agora, um tanto limitado.
Murph

14

Eu diria que a ramificação e mesclagem rápidas e indolentes permitiriam que os desenvolvedores fossem mais produtivos com seu código, já que todos os novos recursos poderiam ser ramificados e posteriormente mesclados. Tornando o processo de desenvolvimento muito mais tranquilo. Além disso, a natureza distribuída permitiria que todos os desenvolvedores tivessem uma cópia inteira do código; portanto, não há nenhuma preocupação de uma falha centralizada do servidor derrubar todo o seu código. Provavelmente existem mais razões, essas duas, no entanto, são minhas principais razões para usar o Git.


2
Em um ambiente de negócios, o 'servidor centralizado' teria redundância, backup e administradores responsáveis ​​por mantê-lo (e todos os outros servidores) ativos.
precisa saber é o seguinte

2
Em um grande ambiente de negócios, você teria redundância de servidor. Em uma pequena empresa, essa redundância de servidor não é tão certa.
Michael Shaw

2
Uma falha no servidor centralizado não anularia todo o seu código. Mesmo que você não tenha backups, o pior que pode fazer é anotar seu histórico de revisões. Mas desde que todos os desenvolvedores tenham o código verificado, ele também existe na forma atual em seus sistemas.
Mason Wheeler

1
@mason: mas isso é uma suposição: 'contanto que todos os desenvolvedores ... ". Porque em empresas de pequena escala com projetos de escala ainda menor, os projetos podem viver e estão sendo usados ​​felizes sem que ninguém o codifique por um ano ou mais. dois.
Inca

E também, eu não subestimaria o valor do histórico de confirmação. Em um sistema enorme, pode ser realmente valioso ver quem e por que fez alguma coisa no código.
Tamás Szelei

8

Presumo que você possa defender o controle de versão, aumentando a produtividade (e, portanto, o lucro), mesmo quando um desenvolvedor estiver trabalhando sozinho.

Um bom DVCS reconhece os mesmos benefícios de produtividade, mesmo quando trabalha em equipe - cada desenvolvedor pode obter todos os benefícios de trabalhar com controle de versão - pode fazer confirmações frequentes, retrocessos, brincar com as coisas etc. - sem se preocupar com conflitos com o que os outros desenvolvedores estão fazendo até estarem prontos para fazer as alterações.


Isso é o que eu ia postar, basicamente. Certamente, você verá melhorias na produtividade dos desenvolvedores comprometendo-se cedo e frequentemente ao seu próprio repositório, sem causar nenhum problema para seus colegas de trabalho.
precisa saber é o seguinte

5
Então você estará no inferno da integração quando, eventualmente, forçar suas alterações. Isso é uma coisa ruim, não é uma coisa boa.
Henry

À medida que você desenvolve o desenvolvimento local com muitas confirmações, pode continuar obtendo alterações do repositório central e mantendo as alterações locais alinhadas com o desenvolvimento contínuo em que outras pessoas estão trabalhando. Portanto, quando chegar a hora de enviar suas alterações para o repositório central, você já deve ter a maioria das alterações que estão acontecendo lá e a integração será fácil.
DaveJohnston

1
A menos que um de seus colegas de trabalho tenha feito exatamente a mesma coisa e os dois não se integrem há algum tempo. Sempre há trocas. Eu já vi casos em que as coisas foram integradas na linha principal onde elas não deveriam estar (solução incorreta, tentativa sem saída de uma solução e outras), integrar a integridade dos recursos também traz vantagens.
Joppe

2
Você não pode fazer todas essas coisas com (a) ramificações SVN ou (b) várias cópias de trabalho?
precisa saber é o seguinte

4
  • Ramificação por bug
  • Latência reduzida em suas diferenças.
  • Ser capaz de navegar muito rapidamente arbitrariamente pelo histórico de uma filial quando você estiver revisando por pares.
  • Você ainda tem acesso a todo o seu histórico quando não tem acesso ao servidor centralizado: você não está no escritório, a energia acabou, mas a bateria do laptop ainda está funcionando, ...

Essas coisas permitem que você trabalhe com mais eficiência, sozinho ou em equipe. Trabalho mais eficiente = menor tempo de desenvolvimento = menor tempo de colocação no mercado = lucro.


3

Perdoe-me por criar um link para meu próprio blog, mas escrevi artigos sobre esse assunto:

Sinta-se livre para votar se você não os achar relevantes.

Em poucas palavras, o DVCS facilita os modelos de ramificação que podem impedir que grandes grupos de desenvolvedores pisem nos dedos uns dos outros, o que aumenta a produtividade e a qualidade da sua construção diária. A parte confusa da colaboração do controle de versão pode ser feita em repositórios locais, deixando o repositório central mais limpo e de maior qualidade. Além disso, as decisões sobre quando ramificar podem ter um grande efeito na eficiência, por exemplo, se um departamento está pronto para começar a trabalhar no 2.0 quando o 1.0 ainda está sendo limpo por outros. O DVCS permite que essas decisões sejam tomadas em nível local e não por comitê.


As entradas do seu blog estão bem escritas. Ainda não li todos eles. Eu me pergunto por que você escolheu Bzr quando Git e Hg parecem ser muito mais populares. As pessoas parecem odiar Bzr por serem lentas. Também sou fã do Git por causa dos hashes das árvores em vez dos números das revisões, o que me parece muito seguro. Os números de rotações bzr não serão todos misturados quando as filiais forem mescladas?
Keyo 21/05

2
@Keyo, eu escolhi o bzr porque tinha que ensinar DVCS para mim mesmo e o bzr é o mais amigável para iniciantes. Eu mudei para o git por velocidade, recursos e estabilidade desde então. O Bazaar também faz suas revisões e possui identificadores globalmente exclusivos, eles simplesmente não são o padrão exposto ao usuário. Seus números de revisão são realmente diferente do que usando HEAD~1, HEAD~2etc. no git. É muito raro você precisar do hash real, mas é a primeira coisa que você aprende no git e está sempre na sua cara. Esconder isso do usuário, a menos que você realmente precise, é uma das razões pelas quais o bzr é mais amigável para iniciantes.
Karl Bielefeldt

Obrigado pelo esclarecimento. Git não foi exatamente fácil para mim vindo da subversão. Muitos comandos têm a mesma palavra, mas fazem coisas diferentes.
Keyo

2

Meus argumentos para DVCS são estes:

  • A ramificação não é interrompida, o que leva a menos atritos no desenvolvimento de recursos e na manutenção dos produtos existentes. O atrito custa dinheiro a tempo.

  • A mudança para um sistema moderno atrai melhor desenvolvedores de ponta, o que levará a uma cultura de melhores produtos, o que permitirá que a empresa venda mais produtos.

  • As confirmações que não são de rede são mais rápidas , permitindo que os desenvolvedores se comprometam com frequência, levando à detecção e análise de erros refinados.

Essencialmente, trata-se de reduzir o atrito. Existe um termo para isso: Muda . Quanto mais atrito, mais dor é fazer as coisas. Quanto mais dor, menos trabalho, menos lucros.


2

Peço desculpas se estou me destacando, mas permita-me colocar o caso comercial em termos inequívocos:

O SVN torna a vida dos desenvolvedores miserável . E isso torna um negócio de software miserável.

... de maneiras que muitos não perceberão até começarem a usar um DVCS. Esse é o caso de negócios mais importante que pode ser feito . Por quê? Bem, comparado ao custo de encontrar e reter bons desenvolvedores, o custo de mudar para um DVCS é quase inexistente .

Considere o seguinte:

  • Todas, exceto as operações mais triviais no SVN (e na maioria dos outros CVCSes), exigem acesso à rede. Na maioria dos DVCSes, acesso à rede só ocorre quando você faz uma pushou pulloperação. Isso significa que comandos não triviais são lentos . O que você faz quando um comando leva uma eternidade? Pessoalmente, vou procurar notícias de programadores ou hackers enquanto espero. Simplificando, os DVCSes permitem que os programadores se concentrem em fazer o que amam: escrever o software da empresa .
  • O SVN tem suporte para ramificação da mesma maneira que as prisões têm suporte para deixar seu sabão cair no chuveiro: você pode fazê-lo, mas quando você fica fodido. Assim, o SVN força seus desenvolvedores a brigar constantemente entre si para fazer alterações .
  • Quando o SVN está inoperante, está inoperante. Torna-se terrivelmente difícil para os desenvolvedores fazerem seu trabalho, se é que podem fazê-lo. Assim, o SVN força seus desenvolvedores a confiarem em sua infraestrutura, sendo 100% livre de erros .
  • Hoje em dia, o git está rapidamente ganhando atenção, enquanto o SVN está perdendo rapidamente. Se não há benefícios em usar DVCSes sobre SVN, por que a comunidade de programação está mudando o mais rápido possível?

O que isso significa? Ainda não encontrei um desenvolvedor que tenha feito uma tentativa honesta ao DVCS que preferiria o SVN posteriormente. Se eu pudesse fazer mais uma afirmação irritante e ousada, o SVN é um "mal necessário" que os desenvolvedores se forçam a usar. Git é uma ferramenta que torna os desenvolvedores mais produtivos e felizes .

(Devo salientar que as declarações em negrito são aquelas em que você deve se concentrar. O restante apenas fornece contexto.)


5
-1 - você é soberbo e, embora exista alguma verdade no que você escreve, ela é gerada de maneira tão negativa que chega ao FUD em vez de à análise racional. O SVN é lento? Somente se o repositório for vasto e a rede glacial. O SVN desativado me impede de trabalhar - erm, não me lembro de já estar desativado e NÃO, pois meu computador não depende da existência do repositório para editar / compilar / executar a fonte. A ramificação e mesclagem do SVN são ruins? Uau, as pessoas têm memórias curtas ... por que o DVCS está ganhando espaço? Uma mistura de funcionalidades - que é aprimorada - e, francamente, moda.
Murph

1
@ Murph - Goste ou não, as pessoas odeiam mudanças a ponto de serem torpedas. Para convencê-los a mudar, você precisa convencê-los de que o status quo está quebrado. E está quebrado. O FUD é ruim apenas quando não há razão para ter medo, incerteza e dúvida. Quanto à mente, eu concordo com você. Mas esse não é realmente o ponto. É se as pessoas que tomam decisões concordam ou não com isso. E todo gerente que eu já conheci foi convencido por esse argumento (mesmo que odeie o git).
Jason Baker

2
Eu não estou necessariamente discordando de você, Jason apenas sugerindo que seus argumentos não foram bem fundamentados. Especificamente, acho que você está exagerando pelo efeito e, se for pego fazendo isso, tende a perder pontos por seu argumento, mesmo que esteja certo. (Exceto pelos pontos em que você está errado, é claro ... (
:) Murph

2
Todos os seus pontos são questões de opinião e não fatos. Eu enumeraria cada um, mas não há espaço suficiente nos comentários. Que tal você responder de novo sem a grandeza?
Henry

1
@ Henry - Programmers.se é para perguntas e respostas subjetivas. Assunto == questão de opinião.
Jason Baker

1

A única coisa que consigo pensar é que o git funciona sem uma conexão de rede. Todo o resto é até difícil de vender para usuários técnicos que usam submersão ou força por algum tempo.


2
Claro, mas o Subversion também funciona sem uma conexão de rede. (Não cometer obviamente, mas as coisas comuns como a obtenção de informações sobre a cópia de trabalho ou diffing com a revisão base todo o trabalho.)
j_random_hacker

@j_random_hacker: O objetivo de um VCS é rastrear alterações de código. A confirmação rastreia alterações de código. Se você não pode se comprometer offline, eu diria que o seu VCS não funciona enquanto estiver offline.
Daenyth

1

A diferença mostra quando há problemas

Mudamos para o git há 6 meses depois de portar nosso repositório de uma década.

Até agora, encontrei o seguinte, depois de algumas experiências:

  • ramificação e fusão é quase indolor. Isso facilita muito o trabalho em recursos separados e correção de erros sem pisar nos dedos um do outro. Também torna muito fácil aplicar uma determinada correção de bug em outro lugar também.

  • mais robusto por design - você não confia 100% na disponibilidade de um servidor central; caso contrário, pode promover temporariamente qualquer clone como substituto a quente. Isso remove um ponto crucial de falha - se o servidor SVN ficar inativo por qualquer motivo, ninguém poderá fazer o trabalho do SVN. Se o repositório central do git for desativado por qualquer motivo, você ainda poderá trabalhar e pressionar / puxar localmente para garantir que as confirmações sejam replicadas. Você pode até ter vários repositórios externos exatamente para esse fim.

  • a interação do repositório é simplificada. Para o CVS, você basicamente precisava acessar o tempo todo, sempre que precisava de alguma informação. Para o git, todo o repositório está disponível localmente, permitindo que muitas coisas aconteçam mais rapidamente.

Portanto, o benefício não é tanto na rotina diária, mas é muito claro no momento em que você tem algo que não está funcionando corretamente!

Portanto, sugiro que, no seu caso de negócios, observe o que você fará quando ocorrer um desastre ...


É o mesmo argumento dos backups: você só precisa deles quando ocorrer um desastre. A questão é o que você fará quando o fizer e o que aceitará que aconteça.

0

A facilidade de ramificar e mesclar é a razão mais concreta, mas para convencer alguém, você precisará dar um exemplo concreto de como isso melhora as coisas.

Digamos que você tenha alguns programadores trabalhando em melhorias de desempenho para um aplicativo, e eles estão no estágio experimental e não sabem se o código que estão escrevendo fará parte do ramo mestre / tronco. No entanto, eles precisam compartilhar código frequentemente e experimentar idéias que podem ser becos sem saída. Como você gerencia ramificações e mesclagens tão freqüentes no subversion? A resposta curta é que você não. Com um dvcs, é realmente fácil, e os programadores podem experimentar rapidamente novas idéias em ramificações e compartilhar com outras pessoas antes de decidir se essa ideia será mantida.


-1

O argumento comercial para abandonar o SubVersion é o suporte à ramificação, que é uma barreira para a estabilização e manutenção do produto. Se você precisar liberar um produto e continuar o desenvolvimento, precisará de uma ramificação. Com o subversion, os desenvolvedores não usarão a ramificação corretamente, e assim você falhará em manter o desenvolvimento no tunk e garantir que as correções de bugs também o façam no tronco e no branch.

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.