O que é o Git Bash for Windows?

41

Eu tenho felizmente usando o Git e o Git Bash do link . Há uma página com mais informações aqui: link .

Ontem encontrei um problema com rsync e comecei a investigar mais profundamente o Git Bash para Windows. Percebi que não tenho certeza do nome do programa Bash, porque ele é apenas um pacote com o download do git-scm. Estou chamando de Git Bash para Windows, o que parece razoável.

Ao olhar para "O que é o Git Bash" eu li sobre o Cygwin e um different coisa chamada mysys2 , que parece estar relacionado a mysysGit , e vi referências a MinGW . Porém, vi nas Perguntas frequentes que mintty é o terminal padrão do Git Bash.

Parece que o aplicativo Bash é na verdade um pacote especialmente curado de outras coisas (principalmente listadas acima) que estão disponíveis de forma independente.

Fundamentalmente, gostaria de saber qual é a base que faz com que os comandos * nix como ssh scp cat ls funcionem no Git Bash for Windows?

(Eu acho que uma boa resposta ajudaria alguém a entender, em linhas gerais, como esses componentes se encaixam e entendem as palavras certas para os componentes, mas eu não quero quebrar o formato de pergunta / resposta SO.)

    
por geneorama 16.03.2016 / 15:27

2 respostas

46

Resumo

Você está correto, Git Bash para Windows não é apenas bash compilado para Windows. É um pacote que contém bash (que é um shell de linha de comando ) e uma coleção de outros utilitários * nix separados, como ssh , scp , cat , find e outros (que você executa usando o shell), compilados para o Windows e uma nova janela de terminal de linha de comandos chamada mintty .

Em poucas palavras

No Windows, você pode executar comandos como ipconfig /all ou format G: usando cmd.exe . Esses comandos são arquivos executáveis reais em C:\Windows\system32 , armazenados como ipconfig.exe e format.com files. cmd.exe é separado de ambos e carrega e os executa a pedido do usuário.

ssh , scp , cat , find são executados usando bash exatamente da mesma maneira. Eles geralmente são armazenados em /usr/bin em vez de C:\Windows\system32 em sistemas nix, porque o Windows e o * nix têm sua estrutura de arquivos de sistema organizada de maneira diferente.

No caso do Git Bash para Windows, esses programas estão localizados na pasta de instalação do Git: C:\Program Files\Git\usr\bin , que também pode ser encontrado no ambiente Linux emulado em /usr/bin .

Assim como ser capaz de rodar cmd.exe no * nix não permite que você faça muito sem os outros utilitários do sistema, apenas ser capaz de executar o Bash no Windows também não é muito útil. Isso significa que todos esses comandos extras precisam ser empacotados junto com o Bash para criar um pacote de software utilizável.

Detalhes: aplicativos POSIX no Windows

Normalmente, esses comandos extras seriam encontrados nos sistemas * nix e não no Windows, porque foram programados contra a API de programação POSIX (que é o que * nix usa) e não as APIs do Win32 (que é o que o Windows usa) . A documentação da API do POSIX está disponível abertamente, então algumas pessoas a transportaram para outros sistemas, incluindo o Windows. A implementação do Windows de APIs / bibliotecas POSIX é fornecida por Cygwin e MSYS .

Isso é semelhante ao que o projeto Wine faz, mas converte o POSIX- > Windows em vez do Windows- > POSIX como o Wine faz.

menta

mintty está incluído porque cmd.exe , a janela padrão da linha de comando do Windows, está faltando alguns recursos importantes que normalmente estão disponíveis na maioria dos sistemas * nix. Na maioria dos casos, mintty é uma opção melhor para executar comandos (certamente para os utilitários fornecidos com o pacote Git Bash for Windows), mas ocasionalmente um aplicativo do sistema Windows pode funcionar melhor com cmd.exe .

    
por 16.03.2016 / 16:37
1

Antecedentes

Eu sou o OP. Eu originalmente queria apenas saber o nome formal para essa coisa que eu estava usando.

Agora eu acho que o nome é "git bash for windows". Infelizmente a resposta completa é complicada porque essa coisa é na verdade um monte de coisas.

A resposta principal de 2016 não foi originalmente útil para mim, mas foi bastante editada e ficou cada vez mais útil. Ainda assim, sinto falta de algumas das minhas perguntas originais.

O começo: msysgit

Na verdade, o começo é provavelmente msys , mas realmente msys2 . O termo "msysgit" é um bom termo para colocar em uma pesquisa para descobrir o que está acontecendo quando o XYZ dá errado; coisas como "onde no @ * #! todas as configurações de autocrlf estão armazenadas?!?!?!?"

O README ( link ) no projeto msysgit explica a relação entre os componentes:

The relationship between msysGit and Git for Windows

Git for Windows is the software package that installs a minimal environment to run Git on Windows. It comes with a Bash (a Unix-type shell), with a Perl interpreter and with the Git executable and its dependencies.

On the other hand, msysGit is the software package installing the build environment that can build Git for Windows. The easiest way is to install it via the net installer.

The difference between MSys and MinGW

The MinGW project's goal is to provide a way to compile native Windows binaries with no POSIX layer using the GNU C Compiler.

However, at least the Bash needs a POSIX layer (most notably due to the absence of the fork() call on Windows). Therefore, MSys (the minimal system) is thrown in, offering the minimal system necessary to offer Bash (and Perl) functionality on Windows.

Consequently, MSys ships with a POSIX layer (based on an old version of Cygwin) that is only used by the Bash and Perl, but not by anything compiled within that environment.

BTW, caso o README completo seja excluído, copiei-o em um gist .

A janela do terminal: mintty

A outra parte do git bash for windows é a linha de comando da janela, mintty. Graças a Deus existe, mas não é algo que eu preciso para o google.

Referências para MSYS2

O wiki deles é um verdadeiro tesouro de detalhes sobre o ambiente MSYS2: link

Na introdução, essa parte é mais relevante para minha pergunta original:

MSYS2 consists of three subsystems and their corresponding package repositories, msys2, mingw32, and mingw64.

Esta discussão é muito útil também: link

    
por 28.09.2018 / 20:04