Por que o Mercurial é considerado mais fácil que o Git?


204

Ao analisar as comparações, parece-me que poderia haver um mapeamento 1: 1 entre seus conjuntos de recursos. No entanto, uma declaração frequentemente citada é que "Mercurial é mais fácil". Qual é a base desta declaração? (caso existam)


21
Estranho, nunca ouvi dizer que Mercurial era mais fácil. Encontrei mais documentação para o Git (pode ter sido a percepção), então aprendi isso.
Nic

16
Porque foi feito por Linus?
Job

124
Chegando ao território da guerra santa aqui, mas achei o Mercurial mais fácil de usar do que o Git porque, como usuário do Windows, me senti bem-vindo pelo Mercurial e tratado como uma aberração e um perdedor pelo Git. Sei que sou um software de antropomorfização e sei que ambos são perfeitamente capazes de serem usados ​​muito bem no Windows, mas essa é a impressão emitida pelos dois.
Carson63000


11
Gostaria de saber quantas pessoas estariam usando o Git se o Github não existisse ou não tivesse tantos projetos de alto nível nele?
Chris S

Respostas:


240

Caso em questão: digamos que você deseja alterar o nome de usuário em todas as confirmações anteriores. Eu precisei fazer isso várias vezes por vários motivos.

Versão Git

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
        then
                GIT_COMMITTER_NAME="<New Name>";
                GIT_AUTHOR_NAME="<New Name>";
                GIT_COMMITTER_EMAIL="<New Email>";
                GIT_AUTHOR_EMAIL="<New Email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

Versão mercurial:

arquivo autores.convert.list:

<oldname>=<newname>

Linha de comando:

hg convert --authors authors.convert.list SOURCE DEST

Agora, qual parece mais fácil de usar?


Nota: Passei 2 anos trabalhando exclusivamente com o Git, então esse não é um discurso do tipo "Eu odeio, não entendi em 2 segundos".

Para mim, é a usabilidade. O Git é muito orientado para o Linux, com uma maneira de fazer as coisas. Isso significa linha de comando, páginas de manual e descobrir por si mesmo. Ele tinha uma GUI muito ruim (nota: estou baseando isso no msysGit de cerca de um ano atrás), que parecia apenas me atrapalhar. Eu mal podia usá-lo

A linha de comando era pior. Sendo um programa orientado para Linux, no Windows era muito difícil de usar. Em vez de uma porta nativa, eles simplesmente empacotaram o git com o MinGW (Think cygwin), o que tornou o trabalho com ele muito mais difícil. O MinGW não é o prompt de comando do Windows e apenas age de maneira diferente. É uma loucura que essa seja a única maneira de trabalhar com o Git. Mesmo no Linux, parecia que a única maneira era trabalhar com linha de comando direta. Projetos como o RabbitVCS ajudaram alguns, mas não foram muito poderosos.

A abordagem orientada à linha de comando e o fato de ser um programa Linux significava que quase todos os guias de instruções, documentação de ajuda e questões de fórum / controle de qualidade dependiam da execução de comandos monstruosos, como acima. Os comandos básicos do SCM (commit, pull, push) não são tão complexos, mas mais e a complexidade cresce exponencialmente.

Eu também odeio o único lugar em que muitos usuários de git do OSS parecem ficar por aqui: Github. Quando você acessa uma página do github pela primeira vez, ela te mostra tudo o que você pode fazer. Para mim, uma página git de projetos parece caótica, assustadora e muito poderosa. Até a explicação do que é o projeto é empurrada para baixo. O Github realmente machuca as pessoas que ainda não têm um site completo configurado. Seu rastreador de problemas também é terrível e confuso. Sobrecarga de recursos.

Os usuários do Git também pareciam muito cultos. Os usuários do Git parecem sempre ser os que iniciam as "guerras sagradas" sobre as quais o DVCS é melhor, o que força os usuários do Mercurial a se defenderem. Sites como http://whygitisbetterthanx.com/ mostram arrogância e uma mentalidade quase "Use my software or die". Muitas vezes, fui a vários lugares de ajuda apenas para ser inflamado por não conhecer o X, usar o X antes, usar o Windows etc. É uma loucura.


Mercurial, por outro lado, parece ir em direção a uma abordagem mais gentil. A página inicial deles parece muito mais amigável para os novos usuários do que a do Git . Em uma simples pesquisa no Google, o quinto resultado é o TortoiseHg, uma interface gráfica muito boa para o Mercurial. Toda a sua abordagem parece ser a simplicidade primeiro, o poder depois.

Com o Mercurial, eu não tenho bobagens SSH (SSH é o inferno no Windows), não tenho comandos estupidamente complexos, não tenho um usuário de culto a seguir, não tenho loucura. Mercurial simplesmente funciona.

O TortoiseHg fornece uma interface realmente utilizável (embora ultimamente pareça estar crescendo) que fornece recursos realmente úteis. As opções são limitadas ao que você precisa, removendo a desordem e as opções raramente usadas. Ele também fornece muitos padrões decentes

Mercurial, sendo muito amigável com os novatos, era muito fácil de entender. Mesmo alguns dos tópicos mais complexos, como os diferentes modelos de ramificação e edição de histórico, foram muito fáceis de seguir. Peguei Mercurial rapidamente e sem dor.

O Mercurial também funciona da primeira vez com pouca configuração. Em QUALQUER SO, posso instalar o TortoiseHg e obter todos os recursos que eu quero (principalmente os comandos do menu de contexto) sem precisar procurar Guis diferentes. Também está faltando a configuração do SSH (metade dos guias por aí diz usar Putty, Plink e Pagent, enquanto a outra metade diz usar ssh-keygen). Para novos usuários, o TortoiseHg leva alguns minutos para ser configurado, enquanto o Git leva de 30 minutos a uma hora com muita pesquisa.

Por fim, você tem os repositórios on-line. O equivalente ao Githubs é o BitBucket, que possui alguns dos problemas descritos acima. No entanto, há também o Google Code. Quando vou a um projeto do Google Code , não recebo sobrecarga de recursos, recebo uma interface limpa e agradável. O Google Code é mais uma combinação de repo / site on-line, que realmente ajuda a projetos de OSS que não possuem uma configuração de site existente. Eu me sentiria muito confortável usando o Google Code como site dos meus projetos por algum tempo, criando um site apenas quando absolutamente necessário. Seu rastreador de problemas também é poderoso, encaixando-se perfeitamente entre o quase inútil Issue Tracker do Github e a monstruosidade do Bugzilla .

Mercurial simplesmente funciona, pela primeira vez, sempre. Git fica no meu caminho e só me irrita quanto mais eu o uso.


6
Comentaristas : os comentários destinam-se a buscar esclarecimentos, não a discussões prolongadas. Se você tiver uma solução, deixe uma resposta. Se sua solução já estiver publicada, faça um voto positivo. Se você quiser discutir esta questão com outras pessoas, use o bate-papo . Veja o FAQ para mais informações.

1
O IntelliJ IDEA e o Xcode 4 têm uma integração maravilhosa com o Git em suas respectivas plataformas e, para as tarefas do dia a dia, você nunca precisa usar a linha de comando.

4
Gostaria de acrescentar que o tortoiseGIT é muito melhor agora quando você deseja usar o GIT no Windows. Você ainda precisa lidar com as chaves SSL e o processo de instalação não é tranquilo, mas, quando feito, funciona com facilidade.
Arkh

2
Extensões do Git Pessoalmente, acho muito mais fácil navegar e trabalhar do que o TortoiseHG no Windows, e só usei 1 linha de comando com o git.
KallDrexx

1
Estou meio confuso com esta linha: "MinGW não é o prompt de comando do Windows e apenas age de maneira diferente. É uma loucura que essa seja a única maneira de trabalhar com o Git". Eu uso a instalação do msysgit e a opção 2, para executar na linha de comando do Windows. Funciona bem. Existem algumas coisas que não funcionam (como o cursor, um caractere de continuação de linha no DOS), mas existem alternativas para aquelas (como o til) que funcionam bem. Eu não sou um entusiasta da linha de comando (ou pelo menos não era antes de começar a aprender o Git), mas usar o Git com a linha de comando é realmente fácil. Estou esquecendo de algo?
Kyralessa

80

Git versus Mercurial

Acredita-se que o Mercurial seja mais simples e fácil de aprender do que o Git. Por sua vez, geralmente existe a percepção de que o Git é mais flexível e poderoso. Isso se deve, em parte, porque o Git tende a fornecer mais comandos de baixo nível, mas também em parte porque o Mercurial padrão tende a ocultar recursos avançados , deixando aos usuários editar o arquivo de configuração do mercurial para ativar os recursos avançados que eles gostam. Isso geralmente leva à percepção de que recursos avançados não estão disponíveis no Mercurial.

Conceitos Git

O Mercurial sempre se concentrou mais nos aspectos da interface, o que facilitou o aprendizado originalmente. Em comparação com o Git, é necessário um entendimento mais superficial para operar com o Mercurial de uma maneira útil. A longo prazo, esse encapsulamento deu ao Mercurial a falsa aparência de ser menos poderoso e cheio de recursos do que realmente é.


73
Então Mercurial esconde apenas a funcionalidade avançada, enquanto GIT esconde toda a funcionalidade ... ;-)
temor

4
Git não tem mais poder. Por exemplo, não há equivalente ao HEAD ~ 1 do git . Mercurial tem p (x) que se estende por ramos, que inútil. Não há estágio no Hg. Todos os galhos devem ser empurrados quando você empurra. O Mercurial não é tão flexível, mesmo com todos os plugins como histedit, shelf e rebase. A linha de comando do Git também é melhor, fornece dicas ao usuário, mercuriais não. Sou forçado a usar esse DVCS um pouco aleijado no trabalho e entrei em situações em que mercurial não tem o poder de fazer o que quero.
Keyo

22
@Keyo: Mercurial has ~, see revsets . Ele não possui uma área de preparação, mas você pode emular com o MQ, que é muito mais poderoso. Aprenda a usar a ferramenta, em vez de se ater ao que você sabe do git, ela será recompensada.
Idan K

22
@Keyo: Você não precisa empurrar todos os galhos com o Mercurial quando pressiona. Você pode enviar por push um ramo específico ( hg push --branch BRANCH) ou até uma revisão específica ( hg push --rev REV). Por favor, veja hg help pushpara mais opções.
Regent

1
Para sua informação, pode-se obter um subconjunto considerável da área de preparação usando a extensão de registro . OTOH, acho que a extensão shelve (modelada após o comando "shelve" de Baazar e próximo a "git stash") serve muito melhor para a maioria dos propósitos de usar a área de preparação.
Brandizzi

47

Contexto: uso diariamente o Mercurial (para o trabalho) e o Git (para projetos paralelos e de código aberto). Eu uso principalmente ferramentas baseadas em texto com ambos (não IDEs) e estou em um Mac.

Em geral, acho o Mercurial mais fácil de trabalhar. Algumas coisas que eu acho tornam o Mercurial mais fácil:

  1. Falta do índice. O índice é uma ferramenta poderosa que habilita muitos dos recursos do Git, mas também é uma camada extra que adiciona um passo em muitas coisas que faço regularmente. O fluxo de trabalho do Mercurial é mais semelhante a algo como svn.
  2. Números de revisão em vez de shas. Isso é uma coisa pequena que eu acho que facilita muito o trabalho com comandos diários no Mercurial. É muito mais fácil colocar alguns números de revisão em sua cabeça durante uma reescalonização, mesclagem, etc. enquanto escreve um comando, do que fazer o mesmo com shas encurtados.
  3. Ramos. A abordagem do Git para as ramificações nomeando commits é poderosa e substancialmente diferente de outros sistemas de controle de versão. Isso facilita muito algumas coisas. Acho que a abordagem do Mercurial combina com o svn pensando um pouco melhor e facilita a compreensão visual do histórico do ramo. Isso pode ser apenas uma preferência.

6
+1 por mencionar o índice; Eu acho que o índice e suas interações são o que torna o git mais difícil de aprender do que mercurial.
Sean McMillan

18
O hgequivalente a gitramificações é realmente chamado bookmarks. Até onde eu sei, os hggalhos não têm um equivalente git.
Hank Gay

6
Estou na mesma situação, com mercurial no trabalho e idiota em casa. A ramificação mercurial é um pouco chata para mim, eu gosto de ter ramificações privadas e pressioná-las quando quiser. Mercurial me obriga a usar prateleiras ou repositórios adicionais. Os números de revisão são bobos, me dê o hash. O palco é ótimo no git, sinto falta disso. Estou realmente sentindo falta do poder do git. Eu fiz algumas coisas com alguns plugins, mas a ramificação realmente me irrita.
Keyo

6
@ Keyey - Na minha experiência, gitramificação é um subconjunto de hgramificação. É hgpossível ter ramificações nomeadas e sem nome (topológicas) e até gerenciar ramificações sem nome da mesma maneira que o gituso de marcadores. Eu realmente nunca vi o ponto na área de preparação. Preferiria arquivar alterações indesejadas e, em seguida, garantir que meu código compile e conclua meus testes antes de enviá-lo. Posso então desmontar e continuar. Além disso, "Massaging Hunks" de Charles Bailey (p90 +) me assusta * 8 '): accu.org/content/conf2011/accu2011LT_fri_share_v2.pdf
Mark Booth

7
@Keyo: No Mercurial, as ramificações privadas são chamadas de 'marcadores': atualize para a revisão raiz hg bookmark keyo-stuff, faça as coisas e hg commit, eventualmente, depois hg push -B keyo-stuff. Se você não gosta de números de revisão, não os use; Mercurial aceitará um hash em qualquer lugar que aceitará um número de revisão, eu acho. Devo dizer que seus comentários criticam o Mercurial pela falta de recursos que de fato parecem ignorantes e um pouco agressivos; você não está fazendo muito bem ao estereótipo de usuários do Git!
Tom Anderson

29

Isso é muito subjetivo e depende de uma pessoa para outra, mas sim, eu diria que para alguém completamente novo no VCS ou para alguém vindo de um dos VCS da "velha escola", o Mercurial parecerá mais fácil.

Por exemplo, adicionando arquivos, a inexistência do índice em Hg, a facilidade de voltar a algumas revisões antigas e ramificar a partir daí (apenas atualizar e confirmar) como alguns dos exemplos mais "óbvios". Agora, a maioria dos recursos de um sistema pode ser emulada em outro e vice-versa, mas isso requer algum conhecimento no Git, enquanto no Mercurial os padrões (se você me permitir chamá-los assim) são bastante "amigáveis". Essas pequenas coisas - a troca aqui e ali, o comportamento não óbvio em um comando e assim por diante ... essas coisas se somam e, no final, um sistema parece mais fácil de usar que o outro.

Apenas para completar a resposta; Eu uso o git, mas ao recomendar um VC para alguém que é "novo para eles", eu quase sempre recomendo o Mercurial. Lembro que, quando ele chegou às minhas mãos, parecia muito intuitivo. É minha experiência que o Mercurial produz menos wtf / minuto que o Git.


+1 para "menos peso / minuto" -1 para "isso é muito subjetivo". Não é muito subjetivo ... Não sei por que as pessoas ainda pensam que as diferenças de interface do usuário são subjetivas. Se eu pegar os comandos mercurial e md5 hash, você não argumentaria que algumas pessoas acham que um md5 hash é mais intuitivo que o original, não é? (Espero que não). O mesmo vale para o Git. Git é apenas mais fácil do que mercurial se sua experiência com o git for consideravelmente mais substancial do que mercurial.
Weberc2

17

Eu acho que é simples assim: o Mercurial tem uma sintaxe mais familiar (principalmente para usuários do SVN) e está bastante bem documentado. Depois de se acostumar com a sintaxe Git, você achará tão fácil de usar quanto qualquer outra coisa.


7
Não. Existem muitas etapas do fluxo de trabalho para você chamar apenas de "sintaxe diferente". Você precisa entender o modelo subjacente que está manipulando e todo o estado do índice git, para usar o Git. Dizer que SQL e Pascal são duas sintaxes diferentes para a mesma coisa seria igualmente errado. Git é um sistema de versão de conteúdo do sistema de arquivos com recursos DVCS. O Mercurial é um DVCS que não realiza todas as operações de versão de conteúdo do sistema de arquivos que o GIT faz, apenas o subconjunto exigido pelos usuários do DVCS.
Warren P

9

As percepções podem estar mudando ao longo do tempo. O Mercurial é muito bem projetado e o Git também. O Mercurial parece ser mais fácil de aprender (pelo menos foi para mim), e houve dificuldades que encontrei no Git, que não tenho paralelo no Mercurial. Tentei aprender Python e Ruby e fui mais longe, mais rápido com o Python. Isso não significa que o Python seja sempre e em toda parte melhor que o Ruby, ou mesmo que seja melhor para mim. É exatamente o que eu aprendi e fiquei com. Os programadores costumam fazer guerras sagradas por preferência pessoal. Outros seres humanos também fazem isso.

Sou um usuário mercurial que tenta manter uma mente aberta sobre o Git e admito livremente que ele não "se tornou minha nova coisa favorita" na mesma medida que o Mercurial. Eu acho que o Git é realmente muito bom.

Um exemplo contrário para a complexidade GIT / mercurial: O suporte agradável ao GIT está embutido no XCode, no Mac. Menos fácil de usar o XCode com o Mercurial do que o GIT.

Minha experiência com o GIT até agora foi que eu me confundo e me perco e preciso consultar mais a documentação ao usá-la. Acredito que muita documentação foi escrita, mas nada que me permitiu "grok". Em segundo lugar, eu posso modificar e estender o Mercurial facilmente no Python, e como sou adepto do Python e como qualquer pessoa realmente pode aprender o python rapidamente, isso me parece uma vantagem. Eu também conheço C e escrevo extensões Python em C, então suponho que algum dia, se eu precisar de uma, eu poderia escrever facilmente uma extensão Git em C.

Facilidade de uso não é algo fácil de quantificar. Está lá e não acho que seja inteiramente subjetivo, mas não temos boas técnicas de medição objetiva. Quais seriam as unidades de facilidade de uso? Milli-iPods?

Não sou tão partidário a ponto de ser 100% pró-mercurial e 100% anti-git. Agora estou mais confortável com o Mercurial, no Windows e no Linux, e quando começar a trabalhar mais em Mac, espero tentar manter o XCode + GIT.

Atualização 2013: Agora usei o Mercurial AND GIT por tempo suficiente para encontrar alguns recursos que eu gostaria que o Git tivesse, como esta pergunta sobre estratégias de mesclagem. Realmente Git é incrível, se difícil de aprender, e às vezes enlouquecedoramente complexo.


7

Há algumas coisas que a IMO provavelmente colocará novos usuários fora do Git:

  1. A cultura Git é mais centrada na linha de comando. Embora ambas as ferramentas tendam a se concentrar muito na linha de comando (como eu já disse várias vezes, as instruções da linha de comando podem ser poderosas e mais fluentes, mas não são uma boa estratégia de marketing ), esse é muito mais o caso do Git. Enquanto o Mercurial possui uma ferramenta GUI padrão de fato no TortoiseHg, que é até a opção de download padrão para usuários do Windows na página inicial do Mercurial, o Git tem vários front-ends da GUI concorrentes (TortoiseGit, Git Extensions, gitk, etc.) que não são bem anunciados no site do Git e, de qualquer maneira, são completamente desagradáveis. (Texto em preto nos rótulos vermelhos? Vamos lá, TortoiseGit, você pode fazer melhor que isso!) Há também uma atitude muito mais difundida na comunidade Git de que as pessoas que usam ferramentas da GUI não são desenvolvedores de software adequados.

  2. O Git possui vários padrões prontos para uso que fazem todo o sentido para usuários avançados, mas provavelmente serão surpreendentes, se não intimidadores, para novos usuários. Por exemplo, é muito mais agressivo a automatização de tarefas como a mesclagem (por exemplo, o git pull mescla e confirma automaticamente, sempre que possível). Há um caso de mesclagens totalmente automatizadas , mas a maioria dos usuários inexperientes tem medo de mesclar e precisa ter a oportunidade de ganhar confiança em suas ferramentas antes de liberar todo o seu poder no código-fonte.

  3. Documentação e complexidade inerente:

    $ hg help log | wc -l
    64
    $ git help log | wc -l
    912
    

3
Na verdade, eu prefiro uma ajuda que é de 912 linhas por muito tempo para uma ajuda que é 64.
Dysaster

10
Na verdade, prefiro uma interface do usuário que seja tão intuitiva e perfeita que você não precise de ajuda em primeiro lugar.
Jammycakes #

2
Quero a GUI e a ajuda. :) O que me parece intuitivo é uma bagunça para outra pessoa.
Dysaster 01/10/19

1
Claro, mas quando a ajuda é necessária, deve ser fácil segui-la.
Jammycakes #

3
Eu pensei em uma nova analogia; Git é como C ++ (desculpe Linus!) E Mercurial é como Pascal. O que está implícito e só pode ser feito de uma maneira em Pascal (ou Mercurial) pode ser feito explicitamente, dezenove maneiras diferentes em C ++ (e Git). Algumas pessoas preferem ferramentas com mais botões e alavancas, e Git é isso.
Warren P

3

Uma coisa que consigo pensar é

git add .
git commit -am "message"

vs.

hg ci -Am "message"

git commit -anão adiciona arquivos recém-criados, hg ci -Ao que significa que algo que requer dois comandos com o git pode ser feito com um comando no Mercurial. Por outro lado, "menos digitação" não significa necessariamente "mais amigável".


11
Costumo achar que, no meu fluxo de trabalho, adicionar novos arquivos automaticamente é realmente indesejável. Eu vim a preferir como git commit -afunciona simplesmente porque facilita o controle do que é e do que não é adicionado a um determinado commit. (Não é realmente incomum para mim para especificar caminhos individuais para cada svn cipara evitar a adição de material não relacionado com um commit.)
greyfade

3
É justo, mas acredito que hg cisem a -Abandeira o equivalente a git commit -a. Eu usei git muito mais que hg, então não tenho 100% de certeza.
Zhehao Mao

Eu verifiquei, hg ci== git commit -a.
Zhehao Mao

mas se você especificar arquivos específicos com o hg commit, poderá evitar os que não deseja. Nos casos pouco frequentes em que eu quero esse controle, acho que isso funciona bem.
Alex Miller

1
por que você "adiciona"? e depois "git commit -am"? Tudo já não seria adicionado ao índice?
27611 Jacobangel

3

Porque é.

Git expõe muito mais coragem do que mercurial. Você pode usar o mercurial em poucos minutos depois de pegá-lo, mas acho que o git ainda é muito difícil de lidar depois de alguns meses de luta com ele (eu fiz muito pouco nos últimos dois meses além de tentar aprender o git ) Eu estou usando ambos na linha de comando e principalmente no Linux, então isso não é apenas uma aversão à interface da linha de comando.

Um exemplo simples são os relativamente poucos sinalizadores e argumentos de linha de comando necessários para o mercurial em comparação ao git. A área de preparação e o comportamento do comando add no git também adicionam mais complexidade do que o necessário. O trio de redefinição, check-out e reversão e suas múltiplas permutações adicionam uma complexidade enorme, o que era bastante desnecessário quando você testemunha a natureza direta da reversão e atualização no mercurial.

Concordo com o comentário acima também sobre o Hginit , que definitivamente tornou muito mais fácil compreender o mercurial. Bem escrito e muito fácil de entender. Nenhuma documentação escrita para o git chega perto. Por um lado, acho que a maior parte do que é escrito por Scott Chacone (que escreveu sozinho a maioria da documentação / livros sobre git) é particularmente confusa.

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.