Git vs Team Foundation Server [fechado]
9 answers
Todos odeiam menos eu.
Faz qualquer outro desperdício de discussão: quando você continuar usando Git, eles vão culpar Você Se alguma coisa correr mal.
Para mim, o Git tem duas vantagens sobre um VCS centralizado que eu aprecio mais (como descrito em parte por Rob Sobers.):- Sempre que alguém sai do repo central, recebe uma cópia de segurança. história completa das mudanças. Quando um repo se perde: não se preocupe, leve um desses presentes em cada estação de trabalho.
- acesso offline do repo: Quando estou a trabalhar em casa (ou num avião ou comboio), consigo ver a história completa do projecto, cada checkin, sem iniciar a minha ligação VPN ao trabalho e posso trabalhar como se eu estivesse no trabalho: checkin, checkout, branch, qualquer coisa.
A principal diferença entre os dois sistemas é que o TFS é um sistema centralizado de controle de versões e o Git é um sistema distribuído de controle de versões.
Com o TFS, os repositórios são armazenados num servidor central e os programadores verificam uma cópia de trabalho, que é um instantâneo do Código num ponto específico no tempo. Com o Git, os desenvolvedores clonam o repositório inteiro para suas máquinas, incluindo todo o histórico.
Uma vantagem de ter o repositório completo nas máquinas do seu programador está a redundância no caso do servidor morrer. Outra boa vantagem é que você pode mover sua cópia de trabalho para trás e para a frente entre revisões sem nunca falar com o servidor, o que pode ser útil se o servidor está em baixo ou apenas inacessível.
Para mim, a verdadeira vantagem é que você pode enviar changesets para o seu repositório local sem nunca falar com o servidor ou infligir alterações potencialmente instáveis na sua equipa (isto é, quebrar a compilação).
Para por exemplo, se estou a trabalhar num grande recurso, posso demorar uma semana a codificá-lo e testá-lo completamente. Não quero entrar no código instável a meio da semana e quebrar a Constituição, mas o que acontece se eu estiver perto do fim da semana e acidentalmente bork toda a minha cópia de trabalho? Se não me comprometi o tempo todo, arrisco-me a perder o meu trabalho. Isso não é um controlo de versão eficaz, e a TFS é susceptível a isso.
Com DVCS, posso comprometer-me constantemente sem me preocupar em quebrar o compilar, porque estou a enviar as minhas alterações localmente . Em TFS e outros sistemas centralizados não existe um conceito de check-in local.Eu nem sequer entrei em quão melhor ramificação e fusão é em DVCS, mas você pode encontrar toneladas de explicações aqui em SO ou através do Google. Posso dizer-lhe por experiência própria que ramificar e fundir em TFS não é bom.
Se o argumento para a TFS na sua organização é que funciona melhor no Windows do que no Git, sugiro a Mercurial, que funciona muito bem no Windows -- há integração com o Windows Explorer (TortoiseHg) e Visual Studio (VisualHg).Original : @Rob, o TFS tem algo chamado " Shelving " que aborda a sua preocupação em comutar o trabalho em progresso sem que isso afecte a construção oficial. Eu percebo que você consulte a central de controle de versão como um obstáculo, mas com respeito à TFS, verificar o seu código para a prateleira pode ser vista como uma força b/c, em seguida, o servidor central tem uma cópia do seu trabalho-em-progresso no caso raro de sua máquina local falha ou é perdido/roubado ou você precisa mudar de marcha rapidamente. As a questão é que os Fe devem ser devidamente elogiados neste domínio. Além disso, a ramificação e fusão em TFS2010 foi melhorada a partir de versões anteriores, e não é claro a que versão você está se referindo quando você diz "... a partir da experiência que ramificar e fundir em TFS não é bom."Disclaimer: i'm a moderate user of TFS2010.
Editar Dez-5-2011: para a OP, uma coisa que me incomoda sobre TFS é que ele insiste em definir todos os seus arquivos locais para "apenas leitura" quando você não está trabalhando sobre eles. Se você quiser fazer uma alteração, o fluxo é que você deve "check-out" o arquivo, que apenas limpa o atributo readonly no arquivo para que a TFS saiba manter um olho nele. É um fluxo de trabalho inconveniente. A maneira que eu preferiria que funcionasse é que é apenas detecta automaticamente se eu fiz uma mudança e não se preocupa/incomodar com os atributos do arquivo em tudo. Dessa forma, posso modificar o arquivo no Visual Studio, ou no bloco de notas, ou com qualquer ferramenta que eu quiser. O sistema de controlo de versões deve ser o mais transparente possível a este respeito. Existe uma extensão Windows Explorer (TFS PowerTools ) que lhe permite trabalhar com os seus ficheiros no Windows Explorer, mas isso não simplifica muito o fluxo de trabalho.
Em cima de tudo o que foi dito (
Https://stackoverflow.com/a/4416666/172109
),
o que é correcto, o TFS não é apenas um VCS. Uma das principais características que o TFS fornece é a funcionalidade nativamente integrada de rastreamento de bugs. As mudanças estão ligadas a problemas e podem ser rastreadas. Várias políticas de check-ins são suportados, bem como a integração com o domínio Windows, que é o que as pessoas que executam TFS têm. GUI fortemente integrado com Visual Studio é outro ponto de venda, que apela para menos do que a média mouse and click developer e seu gerente.
Se a sua equipa usar o TFS e quiser usar o Git, talvez queira considerar uma ponte "git to tfs". Essencialmente você trabalha dia a dia usando Git em seu computador, então quando você quer empurrar suas alterações você as empurra para o servidor TFS.
Há um casal lá fora (no github). Eu usei um em meu último lugar (junto com outro desenvolvedor) com algum sucesso. Ver:Veja uma explicação detalhada no meu post TFS como um true cross-technology platform .
O que eu mais gosto no Git é a opção Push / Pull, onde você pode facilmente contribuir com código para um projeto sem a necessidade de ter direitos de commit. Acho que tu ... poderia usar Usuários muito limitados e shelvesets em TFS para imitar isso, mas não é tão poderoso como a opção Git. Ramificar entre projetos de equipe também pode funcionar, mas de uma perspectiva administrativa não é realmente viável para muitas organizações, pois adicionar projetos de equipe adiciona um monte de despesas administrativas.
Eu também gostaria de acrescentar às coisas mencionadas na área de controle Não-fonte. Características como rastreamento de itens de trabalho, Relatórios e automação de construção (incluindo gerenciamento de laboratório) beneficiar muito de um repositório de liderança central. Estes tornam-se muito mais difíceis quando você usa um modelo distribuído puro, a menos que você faça um dos nós liderando (e, assim, voltar para um modelo menos distribuído).Com o TFS Basic a chegar com o TFS 11, pode não estar longe de esperar um TFS distribuído que lhe permita sincronizar o seu TFS local básico com um TFS central na era TFS 12+. Vou pôr o meu voto a favor disso no uservoice!
Para mim a grande diferença é que todos os arquivos ancestrais que a TFS irá adicionar à sua solução (.vssscc) para 'suportar' TFS-Tivemos Problemas Recentes com esses arquivos terminando mapeados para o ramo errado, o que leva a alguma depuração interessante...