Um pouco de contexto: estou no terceiro ano da faculdade. os alunos são divididos em equipes de 4. Quase todo mundo estará trabalhando no Windows (exceto alguns como eu, que estão no Linux). Como parte do currículo da escola, em breve começaremos a trabalhar em um projeto para um cliente real, mas eu e outra equipe estamos nos perguntando qual seria o melhor caminho para compartilhar nosso código.
Trabalho em período parcial há 3 anos e tenho muita experiência usando o git e o mercurial em projetos diferentes, por isso não tenho problemas ao usar um sistema ou outro. No entanto, nenhum dos meus colegas de equipe já usou um sistema de controle de versão antes. Há também uma outra equipe que tentou usar o SVN, mas teve grandes problemas e prefere tentar outra coisa, então eles pediram minha opinião.
Meus pensamentos: Eu ouvi dizer que o mercurial + TortoiseHg tem uma melhor integração no Windows, mas estou me perguntando se o conceito de cabeças anônimas pode confundi-las, mesmo que eu as explique. Por outro lado, acho que os ramos git são mais fáceis para um iniciante (separação clara do trabalho de cada programador), mas não funcionam tão bem no Windows.
fonte
Respostas:
Mercurial, sem dúvida.
Naturalmente, isso é subjetivo e varia de uma pessoa para outra, mas a opinião geral é de que o Mercurial é mais fácil de se grudar, especialmente para alguém novo no VCS ou alguém de um dos VCS da velha geração.
Pontos na mão:
Mercurial foi desenvolvido com o Windows em mente ; Git foi portado. Não importa o que alguém tente me dizer, o Git ainda é um cidadão de segunda categoria no Windows. Certamente, as coisas melhoraram nos últimos anos, mas você ainda vê muitas discussões sobre por que algo funciona / ou não funciona no Windows, como no * nix box. O TortoiseHg funciona muito bem e as implementações do Visual Studio são ainda mais fáceis de usar sem interromper o fluxo de trabalho.
Se alguém inicia a discussão "O Git é mais poderoso depois de você ...", então ele está praticamente dizendo tudo. Para 95% dos usuários, o Mercurial parece mais intuitivo. Começando pela falta de índice, pelas opções mais intuitivas (as opções são coerentes), pelos números locais para confirmações, em vez dos hashes SHA1 (quem pensou que os hashes SHA1 são amigáveis ??!)
Os ramos de Mercurial não são menos poderosos que os de Git. Post descrevendo algumas das diferenças. Voltar a uma revisão anterior é tão simples quanto "atualizar a revisão antiga". A partir daí; basta fazer um novo commit. As ramificações nomeadas também estão disponíveis se você desejar usá-las.
Agora, eu sei que tudo isso são detalhes, e eles podem ser aprendidos e tudo, mas a coisa é ... essas coisas se somam. E, no final, um parece mais simples e mais intuitivo que o outro. E o sistema de controle de versão não deve ser algo que se gasta tempo aprendendo - você está lá para aprender programação e depois programar; VCS é uma ferramenta.
Apenas para observar; Eu uso Git e Mercurial diariamente. Não tenha problemas para usar qualquer um deles. Mas quando alguém me pede uma recomendação, eu sempre recomendo o Mercurial. Ainda me lembro, quando ele chegou às minhas mãos, parecia muito intuitivo. Na minha experiência, Mercurial apenas produz menos WTF / minuto que Git.
fonte
Descobri que a interface do usuário do TortoiseHg é uma ótima experiência no Windows. Ao experimentar o Git no passado, acabei indo à linha de comando. Para o usuário médio, uma boa interface do usuário é muito mais acessível que uma linha de comando. Então, eu sugiro usar o Mercurial. (Ele também inclui um bom gráfico de ramificação na janela do ambiente de trabalho. Deve esclarecer qualquer uma das dificuldades básicas de ramificação.)
Uma vez que eles entendam as coisas da perspectiva da interface do usuário, eles podem acabar indo para a linha de comando para criar scripts ou executar operações manuais - mas não precisam.
fonte
Se você estiver interessado em uma terceira opção, sugiro fósseis . Acho que a capacidade de ativar um servidor web temporário para compartilhar código funciona muito bem em pequenos projetos. O Fossil é apenas um executável; portanto, você pode colocá-lo e sua fonte em um pen drive e usá-lo em qualquer computador da universidade.
Use
fossil ui
para iniciar um servidor Web temporário onde quer que você esteja para que seus colegas sincronizem com você. Também oferece um sistema de tickets, wiki e uma interface da web fácil de usar para alterar ramificações e confirmar as marcações.Apenas certifique-se de ler o guia de início rápido e / ou o livro . Finalmente, existe um projeto chamado winFossil para oferecer a eles uma interface de usuário mais amigável do que a interface do usuário da web.
fonte
Dado que as equipes são novas no controle de versão e muitas estão usando o Windows, eu recomendaria o mercurial over git.
O modelo conceitual de controle de versão usado pelo git e mercurial é muito semelhante; portanto, depois de dominar um, é fácil escolher o outro (e por razões semelhantes, é muito fácil converter um repositório de um para o outro) . Isso significa que não é grande coisa se você mudar de idéia mais tarde.
Na minha opinião, mercurial é mais fácil para novos usuários aprenderem. Torna as coisas simples fáceis e as perigosas difíceis. O Git facilita operações perigosas (fáceis de fazer, não necessariamente fáceis de fazer corretamente!).
A interface do TortoiseHg para o Winodows também é muito boa e é outro argumento a favor do uso do mercurial.
fonte
Minha preferência pessoal é pelo git.
No entanto, como algumas pessoas estarão usando o Windows e o excelente tutorial hginit existe, eu recomendaria ensiná-las a usar mercurial.
fonte
Como muitas pessoas sugeriram, o Mercurial via TortoiseHg tem uma barreira muito baixa à entrada.
Para os usuários do Windows, é um instalador único, e não dois instaladores (e um monte de coisas que eles talvez não queiram aprender) e a interface do usuário THg é muito mais polida que o TortoiseGit + Msysgit .
Cabeças anônimas
Se você acha que eles ficariam confusos com cabeças anônimas, não incentive o uso delas. A maioria dos
hg
livros adota uma abordagem equilibrada, ensina ramos topológicos e nomeados e permite que o leitor determine qual é o mais apropriado para seu uso.Ramos nomeados
Uma coisa que eu realmente sinto falta
git
éhg
o nome de branches , então essa é uma opção.git
ramificações são boas enquanto você trabalha nelas, mas depois de mesclar esse trabalho em outra ramificação, você perde grande parte do contexto dessas alterações.Em
hg
você poderia criar um ramo chamadoJira#1234
e sempre ser capaz de encontrar todas as revisões associadas a essa correção . Emgit
, uma vez que sua ramificação é mesclada e a ref excluída, é necessário inferir quais revisões fizeram parte da correção da topologia da árvore de revisões. Mesmo que você não exclua a ref, você ainda sabe apenas o último commit nesse ramo, e não quais de seus ancestrais faziam parte dessa cadeia de commits.Favoritos
Como alternativa, se você não quiser usar ramificações nomeadas, mas desejar um
git
estilo de fluxo de trabalho com suas ramificações anônimas, poderá usar marcadores .Esse poderia ser o melhor dos dois mundos - eles aprendem um
git
fluxo de trabalho, mas usam oshg
comandos mais simples .Área de índice / cache / armazenamento temporário
Pessoalmente, acho que é muito mais provável que os alunos se confundam com a
git
área de indexação / cache / preparação do que comhg
os chefes anônimos. Eu prefirohg
tornar opcional essa funcionalidade avançada na linha de comando, da maneira quegit
você sempre deseja / precisa usá-la.Eu também acho que a área de preparação encoraja confirmações que não foram testadas ou compiladas. Como muitos dos locais em que trabalhei tiveram uma regra de não confirmar, se não compilar , prefiro arquivar / esconder as alterações que não quero no momento, executar novamente os testes de unidade e confirmar uma versão que Eu sei compila.
Quando você mais tarde rastrear um bug usando hg bisect ou git bisect , agradecerá a si mesmo por poder testar todas as revisões, não apenas as que são compiladas.
fonte
hg
estes nomes filiais são sempre topologicamente local, assim você só vê-los se você olhar para eles.c
implementa uma interface modificada no arquivoi
e acidentalmente confirmar oi
sem,c
então se alguém puxar suas alterações antes que você comece a cometerc
a compilação delas falhará. Se você usar o fluxo de trabalho stash / compilar / confirmar, esse erro simplesmente não ocorrerá, pois sua compilação será interrompida primeiro. Eu tentei deixar minha resposta mais clara.