O Git 2.8 (março de 2016) inclui uma confirmação muito detalhada que explica a importância do msys2 para o novo git-for-windows que substituiu o msysgit no início de 2015 .
Veja commit df5218b (13 de janeiro de 2016) por Johannes Schindelin ( dscho
) .
(Mesclado por Junio C Hamano - gitster
- na confirmação 116a866 , 29 de janeiro de 2016)
Por um longo tempo, o Git for Windows ficou para trás das versões 2.x do Git porque os desenvolvedores do Git for Windows queriam que esse grande salto coincidisse com um salto bem necessário do MSys para o MSys2.
Para entender por que esse é um problema tão grande, é preciso observar que muitas partes do Git não são escritas no C portátil, mas o Git depende de um shell POSIX e do Perl para estar disponível .
Para dar suporte aos scripts, o Git for Windows precisa fornecer uma camada mínima de emulação POSIX com Bash e Perl , e quando o esforço do Git for Windows começou em agosto de 2007, esse desenvolvedor decidiu usar o MSys, uma versão simplificada do Cygwin .
Conseqüentemente, o nome original do projeto era "msysGit" (o que, infelizmente, causou muita confusão porque poucos usuários do Windows conhecem o MSys e ainda menos cuidado).
Para compilar o código C do Git for Windows, o MSys também foi usado: possui duas versões do GNU C Compiler:
- um que vincula implicitamente à camada de emulação POSIX,
- e outro que tem como alvo a API simples do Win32 (com algumas funções de conveniência ativadas).
Os executáveis do Git for Windows são criados usando o último e, portanto, são realmente apenas programas Win32. Para discernir os executáveis que exigem a camada de emulação POSIX daqueles que não o fazem, os últimos são chamados MinGW (GNU mínimo para Windows) quando os primeiros são chamados de executáveis MSys .
Essa dependência no MSys também enfrentou desafios:
- algumas de nossas alterações no tempo de execução do MSys - necessárias para suportar melhor o Git for Windows - não foram aceitas no upstream, portanto tivemos que manter nosso próprio fork.
- Além disso, o tempo de execução do MSys não foi desenvolvido para suportar, por exemplo, UTF-8 ou 64 bits e, além de não ter um sistema de gerenciamento de pacotes até muito mais tarde (quando
mingw-get
foi introduzido), muitos pacotes fornecidos pelo projeto MSys / MinGW ficam para trás dos respectivos versões de código fonte, em particular Bash e OpenSSL.
Por um tempo, o projeto Git for Windows tentou remediar a situação tentando criar versões mais recentes desses pacotes, mas a situação rapidamente se tornou insustentável, especialmente com problemas como o bug do Heartbleed, que requer ação rápida que não tem nada a ver com o desenvolvimento do Git para Windows mais.
Felizmente, entretanto, o projeto MSys2 ( https://msys2.github.io/ ) surgiu e foi escolhido para ser a base do Git para Windows 2.x.
Assim como o MSys, o MSys2 é uma versão simplificada do Cygwin, mas é ativamente atualizada com o código-fonte do Cygwin .
Assim, ele já suporta internamente o Unicode e também oferece o suporte de 64 bits que ansiamos desde o início do projeto Git for Windows.
O MSys2 também portou o sistema de gerenciamento de pacotes Pacman do Arch Linux e o utiliza intensamente . Isso traz a mesma comodidade com a qual os usuários Linux estão acostumados a partir de yum
ou apt-get
, e com os quais usuários MacOSX estão acostumados com Homebrew ou MacPorts, ou usuários BSD do sistema Ports, para o MSys2: um simples pacman -Syu
atualizará todos os pacotes instalados para as versões mais recentes disponível atualmente.
O MSys2 também é muito ativo, geralmente fornecendo atualizações de pacotes várias vezes por semana.
Ainda foi necessário um esforço de dois meses para levar tudo a um estado em que a suíte de testes do Git passou, muitos mais meses até o lançamento do primeiro Git for Windows 2.x oficial e alguns patches ainda aguardam seu envio para os respectivos projetos upstream . No entanto, sem o MSys2, a modernização do Git for Windows simplesmente não teria acontecido .
Essa confirmação estabelece o trabalho básico para dar suporte às compilações do Git baseadas no MSys2.
Nos comentários , a pergunta foi feita em janeiro de 2016:
Como o Git for Windows já é baseado no MSYS2, os binários que não dependem da camada de emulação foram disponibilizados como um pacote MSYS2?
Ray Donnelly respondeu na época:
Ainda não nos fundimos completamente, não. Mas estamos trabalhando nisso.
Mas ... madz ressalta que, no início de 2017, esse esforço não deu certo.
Vejo:
O problema é que não posso contribuir com alterações que resultarão em um novo tempo de execução do msys2 em tempo hábil.
Porém, não é um grande problema: vou manter o fork do Git for Windows funcionando indefinidamente.
Portanto, o wiki menciona agora (2018):
O Git for Windows criou alguns patches para o tempo de execução msys2 que não foram enviados a montante. (Isso havia sido planejado, mas foi determinado no número 284 que provavelmente não estaria acontecendo.)
Isso significa que é necessário instalar o tempo de execução msys2-runtime personalizado do Git for Windows para ter um git totalmente funcional no MSYS2.
Observe que, desde o commit aeb582a9 (Git 2.22, Q2 2019), o projeto Git for Windows iniciou o processo de atualização para uma versão de tempo de execução do MSYS2 baseada no Cygwin v3.x.
mingw
: permitir a criação com um tempo de execução MSYS2 v3.x
Recentemente, o projeto Git for Windows iniciou o processo de atualização para uma versão de tempo de execução MSYS2 baseada no Cygwin v3.x.
Isso tem a consequência muito notável de que $(uname -r)
não relata mais uma versão iniciada com "2", mas uma versão com "3".
Isso interrompe nossa compilação, pois o df5218b ( config.mak.uname
: support MSys2, 2016-01-13, Git v2.8.0-rc0) simplesmente não esperava que a versão relatada uname -r
dependesse da versão subjacente do Cygwin: esperava que a versão relatada correspondesse ao " 2 "em" MSYS2 ".
Então, vamos inverter esse caso de teste para testar qualquer outra coisa que não seja uma versão iniciada com "1" (para MSys).
Isso deve nos proteger para o futuro, mesmo que o Cygwin acabe lançando versões como 314.272.65536.
O Git 2.22 (Q2 2019) fará um teste à prova do futuro contra uma atualização da série MSYS2 runtime v3.x.
Veja commit c871fbe (07 de maio de 2019) de Johannes Schindelin ( dscho
) .
(Incorporado por Junio C Hamano - gitster
- in commit b20b8fe , 19 de maio de 2019)
t6500(mingw)
: use o PID do Windows do shell
No Git for Windows, usamos o MSYS2 Bash, que herda um modelo PID não padrão da camada de emulação POSIX da Cygwin: todo processo MSYS2 possui um PID regular do Windows e, além disso, possui um PYS MSYS2 (que corresponde a um processo de sombra que emula Manipulação de sinal no estilo Unix).
Com a atualização para o tempo de execução MSYS2 v3.x, esse processo de sombra não pode mais ser acessado por OpenProcess()
mais tempo e, portanto, o t6500 pensou incorretamente que o processo mencionado gc.pid
(que não é realmente um gc
processo real nesse contexto, mas o shell atual) não é mais existe.
Vamos corrigir isso, certificando-se de que o PID do Windows esteja gravado
gc.pid
neste script de teste para que git.exe
seja possível entender que esse processo realmente existe.