Git sob o windows: MSYS ou Cygwin?

Eu pretendo migrar meus projetos para o git, e atualmente estou me perguntando qual é a melhor e / ou a opção mais estável no Windows.

Pelo que entendi eu basicamente tenho 2,5 opções:

  1. MSYSgit
  2. git sob Cygwin
  3. (aka 2.5) MSYSgit de um prompt do Cygwin (dado que o Cygwin git já está instalado).

Nota: O IMO Cygwin por si só é uma grande vantagem, já que você pode ter access a praticamente todas as ferramentas de linha de comando * nix, como no MSYSgit bash, você só tem access a um subconjunto pequeno dessas ferramentas.

Dado isso, qual opção você sugeriria?

Editar (mais 2 anos depois: outubro de 2014)

Johannes Schindelin acaba de explicar (outubro de 2014) que o msysgit está extinto :

agora temos um Git leve para Windows SDK – que é essencialmente um sistema padrão MinGW / MSys gerenciado através do gerenciador de pacotes mingw-get.

Decidimos simplesmente descontinuar o nome “msysGit” (assim como o GitHub org com o mesmo nome ) e trabalhar no Git for Windows (com o GitHub org correspondente) , e usando o nome “Git for Windows” para o instalador apontado em “usuários finais” e “Git for Windows SDK” para o ambiente de desenvolvimento que visa o Git para desenvolvedores do Windows.


Editar (3 anos depois: abril de 2012)

O MsysGit (agora no GitHub ) é o caminho a percorrer se você quiser um início rápido e leve no mundo do Git: descompacte o arquivo, inicie o git-cmd.bat ou o git-bash.bat e pronto.
Seu último lançamento (1.7.10, abril de 2012) agora inclui suporte para UTF-8 , também incluído no GitExtension . Não se esqueça de definir seu autocrlf para falso embora.

Se você realmente está perdendo todos os outros comandos unix e não pacotes com msysgit, simplesmente baixe uma versão do GoW (Gnu no Windows) , apropriadamente chamada de “A alternativa leve ao Cygwin”.
Quero dizer: 130 comando unix s …

O Cygwin deve ser uma solução de backup apenas para determinados casos, como a velocidade de transferência de grandes repositorys Git, conforme mencionado abaixo por um incremento em sua resposta .


Junho de 2012: se você quiser interagir com o GitHub , agora você tem http://windows.github.com (veja também ” Criando o GitHub para Windows “).
Ele não apenas irá configurar as chaves ssh para você (e adicionar a chave pública gerada ao seu perfil do GitHub), mas também irá instalar, para todas as operações do git, um … MsysGit.


Resposta original (abril de 2009)

Eu não tenho nenhum problema com a última versão do MsysGit:
Eu uso a opção 2 , o que significa que apenas adiciono o diretório git \ bin à variável de ambiente PATH, mas sem sobrescrever algumas ferramentas internas do Windows.

Consegui definir ferramentas externas como Notepad ++ e WinMerge (ou DiffMerge)

Eu executei com sucesso scripts como o svn2git porque, a partir do MsysGit1.6.2 +, ele inclui o comando ‘ git svn ‘.

E finalmente estou ansioso para o MsysGit1.6.2.3 pois includeá finalmente o comando ‘ git filter-branch ‘ ! (uma versão lenta do ramo de filtros, mas ainda assim).

Para o comando Unix, eu prefiro instalar um pacote GutuWin32 coreutils , e usá-los somente quando eu precisar deles.

Então, apesar de tudo, eu não uso a camada Cygwin, e consegui rodar o Git muito bem em sua versão MsysGit baseada no Windows.

Sim. Velha pergunta. Nova resposta:

Estamos usando o MSYSgit há cerca de 2 anos em uma grande implantação. A velocidade de transferências de um servidor de repository git local foi limitada a menos de 5 MiB / s. Uma investigação anterior sobre o problema indicou que o problema era com o MSYS devs estar no Windows XP e no Windows 7 limitando as conexões de segurança do prompt de comando / bash shell. Isso não parece ser, de fato, o problema.

Eu descobri o blog de Darrell Mozingo e testei um clone de um repository grande (muitos GiB) usando apenas uma instalação do Cygwin. As velocidades de transferência estavam na faixa de 30 MiB / s. O problema é que o MSYSgit usa um antigo binário OpenSSH de 2007.

Para este fim, até que isso seja consertado, agora estou recomendando uma mudança para o Cygwin (mesmo que a versão do git esteja um pouco atrasada). Eu também achei o Cygwin mais estável e menos provável que o perl ficasse sem memory.

Eu me interessei usando as versões MSYS e Cygwin do git, e para ser realmente honesta, eu não achei a experiência especialmente boa. Eu não acho que o git esteja realmente pronto para o windows ainda.

Dito isso, um problema encontrado com a versão MSYS é que ele converteria os fins de linha em seus arquivos (não binários) do estilo UNIX (line-feed) para o estilo DOS (carriage-return / line-feed). Você pode considerar isso um bug ou um recurso, mas não há como alterar o comportamento que encontrei. (EDIT: Defina a variável de configuração core.autocrlf para false . Obrigado Brian.)

OTOH, a versão MSYS do git tem alguma funcionalidade de GUI que não está disponível na versão do cygwin, a menos que você queira instalar e rodar um servidor X inteiro. (Obrigado Joce por confirmar isso.)

Minha impressão é que a versão MSYS é mais popular, embora isso possa ser porque você não precisa instalar um ecossistema cygwin para usá-la. (E eu concordo, cygwin é extremamente útil.)

Pessoalmente, eu iria com Bazaar ou Mercurial , qualquer um dos quais tem melhor suporte para janelas IMO.

Tanto o Cygwin quanto o Msys Git funcionam razoavelmente bem para casos de uso normais. Se você quiser usar scripts como o git-svn, o Cygwin é uma aposta melhor. Como usuários antigos do Windows que finalmente pularam para o Linux, posso dizer com certeza que o Cygwin é um grande benefício e vale a pena ter por si só.

Contexto é importante embora; que projetos são esses? Com quem eles são usados? Etc.

Eu também testei os dois mundos (CygWin e MSysgit), minha experiência também é que existem algumas falhas no MSysgit bash. Não é possível executar o git stash com sucesso enquanto o Cygwin lidou com ele graciosamente no mesmo repository do git.

Nenhuma análise profunda feita ainda, embora …

Eu atualmente uso o Msysgit junto com o TortoiseGit.

A interface do usuário do MsysGit não é do meu agrado, então eu uso uma ferramenta familiar como o TortoiseGit e quando estou trabalhando na linha de comando (na maior parte do tempo), eu uso o binário git do Msysgit

Eu recomment msgsgit. Especialmente se for usado com o Git Extensions : ele fornece uma maneira fácil de configurar o ambiente: editor / diff / merge, e permite fazer operações avançadas do git a partir da interface do usuário.

Eu me deparei com sérios bugs na implementação do cygwin do MSys: alguns comandos, especialmente o rebase, eram bastante propensos a falhas. O Cygwin’s era muito mais estável para mim.

Dito isto, há um mês, poderia ter melhorado desde então.

Eu usei o Cygwin Git e o Msysgit com o Windows. Eu sugeriria usar o Cygwin + Git. O Cygwin 1.7 (atualmente em beta) aborda uma grande nuance (pelo menos para mim) ao usar git gui e gitk. Versões anteriores do Cygwin costumavam abrir 10s de janelas cmd toda vez que eu faço algo em git-gui ou gitk. Isso foi abordado em 1.7. O poderoso shell do Cygwin também traz muitas das vantagens do terminal Linux.

Dito isso, o Msysgit evoluiu bastante e é realmente útil no Windows. Eu enfrentei um par de questões embora.

Problema de permissão: alguns arquivos criados originalmente no Windows tinham o modo 755 que foi convertido em 644 durante o uso do Msysgit. Isso apareceria como arquivos modificados. Um check-in deve corrigir esse problema.

CRLF: O CRLF todo indescritível, como de costume, cria problemas no Windows. O Msysgit pode reportar arquivos modificados. Isso pode ser corrigido selecionando “Manter os términos de linha inalterados” (esqueceu o texto exato) ao instalar o Msysgit.

Daemon: E sim, eu ainda estou achando difícil configurar o daemon git no Msysgit.

Nova resposta para uma pergunta antiga …

Eu estou usando o git 1.7.3 de um shell do Windows 7 cmd, e funciona muito bem. Eu uso uma mistura de linha de comando git e git gui, e ambos têm funcionado bem por meses. Tivemos problemas de retorno de carro / avanço de linha, exacerbados quando adicionamos desenvolvedores Mac à equipe, mas eles foram resolvidos com …

 core.autocrlf=true core.safecrlf=false 

Não estou dizendo que você não deveria usar um shell * nix-y, apenas que não é necessário.

Eu tenho reservas em relação ao CygWin porque eu quero apenas o git e não qualquer outra ferramenta que o Cygwin quer inserir. Normalmente você quer que o seu computador Windows funcione como um computador Windows e o CygWin quer dar uma ideia completamente diferente. Tapa na funcionalidade * nix apenas para os chutes não é ir.

A coisa é, se eu quiser trabalhar com o * nix como linha de comando, eu vou para a minha máquina Linux e trabalho no computador. Computadores virtuais e desktops remotos funcionam como um charme hoje em dia e são acessíveis o suficiente para os desenvolvedores.

É preciso ter uma razão legítima para você usar o CygWin. Se é apenas para usar o git eu sugiro que você use MSysGit em vez disso, qual é a minha preferência. Funciona muito bem com as ferramentas gitk e git-gui que são empacotadas. Eu tenho trabalhado no Eclipse e Visual Studio usando msysgit e funciona como um encanto.

A única coisa que eu estou esperando agora é um clone do Tortoise totalmente funcional para o git .

Existe um cenário no Windows onde você simplesmente tem que usar o Git via Cygwin: Isto é quando você quer usar o Git em um servidor SVN, que espera versões do cliente SVN maiores que 1.5. Existem ganchos de pré-consolidação do SVN que bloqueiam confirmações quando não há argumento ‘mergeinfo’ – e o argumento ‘mergeinfo’ é padrão no SVN somente desde a versão 1.5. O problema com o msysGit é que ele é construído contra uma versão mais antiga do SVN (1.4.6), então você não pode cometer com sucesso neste caso. Mas é possível com o Git do Cygwin, já que ele é construído contra versões mais recentes do SVN.

Se você quer apenas fazer ações simples como push / pull / branching você pode experimentar o SourceTree da Atlasian. Uma interface do usuário muito simples e clara para o comando do Git. No entanto, tem curta vinda.

Se você precisar usar a ferramenta git da linha de comando, é só pegar a ferramenta Git for windows. Deve ser o suficiente, a menos que você comece a procurar no bash scripting.