10 Things I hate about Git

Mas aí você está batendo em uma tecla que o próprio autor do artigo citou: os erros do SVN não fazem acertos do git.

[]'s[/quote]

Verdade. É fato que o GIT tem muita coisa que poderia ser melhorada.

O artigo realmente trás algumas bem pertinentes. O grande problema, é que artigos dessa espécie deve ter um público alvo específico. Qualquer um que não seja capaz de abstrair o que interessa do que não interessa transforma a coisa em uma guerrinha de ferramentas.

Como o Vinny falou, a comparação GIT - SVN é até injusta, pois ambos possuem propostas diferentes. Tem gente que usa Git, quando um SVN já resolve os seus problemas, e aí detona a ferramenta como se não prestasse… Assim como outros que usam SVN quando na verdade precisavam de um GIT para resolver seus entraves.

Só que o Rubem deu uma opinião pessoal que eu concordo, pois a conversa estava indo para esse lado, quando alguns amigos manifestaram o sentimento de “ainda bem que não usei”. Eu expliquei que usei, mostrei algumas coisas que foram vantagens pra mim e recomendo fortemente o screencast do Akita sobre o assunto.

Enfim, no final das contas, o próprio Subversion nasceu com o Slogan de ser “um CVS melhorado”…

FATO:

Nunca, jamais, em momento algum use GIT num projeto sem que nenhum membro da equipe REALMENTE o domine…

Sem dúvida é poderoso e completíssimo, botando o SVN no chinelo em funcionalidades, porém é MAIS UMA FERRAMENTA e com grande curva de aprendizado que vamos ter que passar meses (conforme o relatos dos defensores aqui) para aprender, como se já não bastasse as 2 dúzias de ferramentas que temos que saber para projetos novos e legados :frowning:

GIT, só com um “coach”, pois até aprender sozinho terá feito umas 50x o clone do mesmo projeto após desistir de tentar fazer simples operações de trocar arquivos com o repositório remoto. Eu mesmo já perdi a conta de vezes que não tive alternativa a não ser fazer outro “clone” do mesmo projeto após desistir de tanto do comando após conflitos que só o GIT enxergava. Talvez eu não tenha QI suficiente para usar o GIT (não é ironia, eu realmente acho que para usar GIT no dia-a-dia você deve ter um QI bem acima da média).

Talvez se o GIT tivesse plugins para Eclipse e Netbeans realmente funcionais como existem para SVN e cia… Mas realmente ainda não é o caso. Por isso torço pela evolução desses plugins para que o GIT possa ser mais fácil de aprender e usar.

[quote=jyoshiriro]FATO:

Nunca, jamais, em momento algum use GIT num projeto sem que nenhum membro da equipe REALMENTE o domine…

Sem dúvida é poderoso e completíssimo, botando o SVN no chinelo em funcionalidades, porém é MAIS UMA FERRAMENTA e com grande curva de aprendizado que vamos ter que passar meses (conforme o relatos dos defensores aqui) para aprender, como se já não bastasse as 2 dúzias de ferramentas que temos que saber para projetos novos e legados :frowning:

GIT, só com um “coach”, pois até aprender sozinho terá feito umas 50x o clone do mesmo projeto após desistir de tentar fazer simples operações de trocar arquivos com o repositório remoto. Eu mesmo já perdi a conta de vezes que não tive alternativa a não ser fazer outro “clone” do mesmo projeto após desistir de tanto do comando após conflitos que só o GIT enxergava. Talvez eu não tenha QI suficiente para usar o GIT (não é ironia, eu realmente acho que para usar GIT no dia-a-dia você deve ter um QI bem acima da média).

Talvez se o GIT tivesse plugins para Eclipse e Netbeans realmente funcionais como existem para SVN e cia… Mas realmente ainda não é o caso. Por isso torço pela evolução desses plugins para que o GIT possa ser mais fácil de aprender e usar.[/quote]

Veja este screencast do Akita On Rails de 3hs SCREENCAST GIT, veja tudo, depois experimente novamente alguns dias, ENTENDENDO o que esta fazendo, como funciona o HEAD e tudo mais, depois se ainda tiver achando muito dificil, vou concordar vou vc na questão do QI :wink:

Olá, fred.

Todo mundo que lê/ouve uma reclamação minha me passa esse vídeo hehehehe

Amigo, já o vi, já entendi como o GIT funciona e já sei boa parte dos comandos. A questão é que não levei “dias” (e todo mundo sempre me fala “meses” pra aprender). Não estou aqui dizendo “mimimi não sei e não aprendi a usar o GIT” e sim que ele é muuuuuito mais difícil de aprender e usar que SVN e cia. Já sei que serva pra 100000 de coisas a mais, mas me refiro a simplicidade de controle de versão.

Todo mundo me passa esse mesmo vídeo aí e me fala em “meses” de aprendizado (você é o primeiro que me fala em “dias”). SVN e cia a pessoa vê o colega CLICAR em menus na IDE, fazer merges de forma VISUAL na IDE e talvez nunca mais pergunte pra ninguém como fazer as coisas. Entendeu o que eu quis dizer?

Vejo colegas dizendo que há plugins visuais de GIT pra Eclipse e Netbeans. Realmente há mas são muito bugados (usei ambos esses meses agora)… Passam a anos luz dos similares pra SVN e cia. Sei que isso não é culpa da equipe do GIT e nem um defeito do GIT, mas que plugins visuais para as IDEs free que realmente ajudassem seriam uma mão na roda, não concorda?

Enfim, reconheço o potencial e o grande valor do GIT, mas que ele tem uma grande curva de aprendizado e é bem trabalhoso de usar se comparado com SVN e cia, disso eu não tenho dúvida.

[quote=jyoshiriro]Olá, fred.

Todo mundo que lê/ouve uma reclamação minha me passa esse vídeo hehehehe

Amigo, já o vi, já entendi como o GIT funciona e já sei boa parte dos comandos. A questão é que não levei “dias” (e todo mundo sempre me fala “meses” pra aprender). Não estou aqui dizendo “mimimi não sei e não aprendi a usar o GIT” e sim que ele é muuuuuito mais difícil de aprender e usar que SVN e cia. Já sei que serva pra 100000 de coisas a mais, mas me refiro a simplicidade de controle de versão.

Todo mundo me passa esse mesmo vídeo aí e me fala em “meses” de aprendizado (você é o primeiro que me fala em “dias”). SVN e cia a pessoa vê o colega CLICAR em menus na IDE, fazer merges de forma VISUAL na IDE e talvez nunca mais pergunte pra ninguém como fazer as coisas. Entendeu o que eu quis dizer?

Vejo colegas dizendo que há plugins visuais de GIT pra Eclipse e Netbeans. Realmente há mas são muito bugados (usei ambos esses meses agora)… Passam a anos luz dos similares pra SVN e cia. Sei que isso não é culpa da equipe do GIT e nem um defeito do GIT, mas que plugins visuais para as IDEs free que realmente ajudassem seriam uma mão na roda, não concorda?

Enfim, reconheço o potencial e o grande valor do GIT, mas que ele tem uma grande curva de aprendizado e é bem trabalhoso de usar se comparado com SVN e cia, disso eu não tenho dúvida.[/quote]

Pra ser sincero nunca usei muito os plugins das IDE’s, o pouco que vi do e-git no eclipse parece que ele até abstrai e fica meio parecido com cvs/svn, no IDEA achei tranquilo tambem, mas eu realmente me acostumei a fazer os comandos na console mesmo, depois q acostuma tu nem sente falta de interface grafica, quando preciso enxergar melhor visualmente o que esta havendo uso o gitk.

Olha eu tambem tive que apagar tudo umas 3 vezes aqui, e isto depois que vi o video do Akita, dei até comando git aninhado com find do linux pra tentar consertar a coisa, mas no fim vi que eu tinha feito caca.

O segredo é ter varios branchs, e pequenos, e em cada um dos pequenos branchs ter varios commits, porque ai vc consegue ir voltando se fizer coisa errada. Um dos grandes diferenciais não é tanto o que o git pode fazer, mas a cultura de aprender a trabalhar com branchs pra todo lado, que, ao menos em svn/cvs nao é tao comum.

eu gosto de fazer um branch pra cada issue/ticket/feature
-master - código de produção
–develop - um passo antes da producao, onde todas as issue se reunem
----issue_10 - e aqui um branch pra cada feature/bug/issue, e dentro de cada nao tenho apenas um commit grande com tudo que fiz, mas varios
----issue_11
----issue_12

Aos Git haters, os grafos mandam lembranças.

Algumas tips que eu acho que podem ser úteis. Vou dizer a grosso modo, da forma como entendo o Git e uso no meu dia-dia (e me salva um bocado):

  • branch - ponteiro para determinado commit. Uma branch pode ter o estado alterado
  • tag - ponteiro para determinado commit. Uma tag não pode ter o estado alterado. Geralmente usado para releases.
  • HEAD: ponteiro para o último commit da current branch ou tag
  • origin/<branch>: ponteiro para o último commit da branch no remote
  • git checkout: navega entre os ponteiros e modifica o HEAD. Ex. git checkout HEAD, git checkout origin/master, git checkout &lt;branch&gt;, etc
  • git reset: navega entre os ponteiros, modifica o HEAD e o estado da branch. Ex. git reset &lt;commit&gt;, git reset HEAD, etc
  • git merge: obviamente, faz merge de commits diferentes entre duas branches diferentes. Ex: git merge master
  • git rebase: pega um ponto em comum entre duas branches, faz o diff dos commits, aplica primeiro a diferença da branch e ser rebased e depois reescreve os commits da branch atual. O rebase muda o ID dos commits da branch atual. Ex. git rebase master &lt;minha_branch&gt; (faz rebase da master na minha_branch)

Fiz merda, apaguei commits, “perdi” os logs da minha branch, etc, oq faço? git reflog, git reflog &lt;branch&gt;. Este guarda TODO o histórico de uma branch. Sempre tem uma saída…