O que é o Git Bash for Windows?

61

Felizmente, tenho usado o Git e o Git Bash em https://git-scm.com/ . Há uma página com mais informações aqui: https://git-for-windows.github.io/ .

Ontem, tive um problema rsynce comecei a me aprofundar no Git Bash para Windows. Percebi que nem tenho certeza do nome do programa Bash, porque ele está incluído no download do git-scm. Estou chamando-o de Git Bash para Windows, o que parece razoável.

Ao examinar "O que é Git Bash", li sobre Cygwin e uma coisa diferente chamada mysys2 , que parece estar relacionada mysysGit, e vi referências a MinGW. Mas, então eu vi no FAQ que mintty é o terminal padrão do Git Bash.

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

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

(Acho que uma boa resposta ajudaria alguém a entender, em termos gerais, como esses componentes se encaixam e entender as palavras certas para os componentes, mas não quero interromper o formato de pergunta / resposta do SO).

geneorama
fonte
Encontrei uma resposta muito boa aqui: Qual é o significado exato do Git Bash?
geneorama 12/09
1
Eu acho que o nome oficial / coisa para o google é "git bash". Ajuda a colocá-lo entre aspas, pois as duas palavras são significativas independentemente.
geneorama 12/09
Algumas boas discussões sobre o Reddit aqui e aqui (a partir de 2017). Eles até abordam minha rsyncpergunta original !!
geneorama 12/09

Respostas:

72

Sumário

Você está correto, o Git Bash para Windows não é apenas bashcompilado para Windows. Empacotá-lo de que contém bash(que é um shell de linha de comando ) e uma coleção de outros, utilitários separados * nix como ssh, scp, cat, finde outros (que você executar usando o shell), compilado para Windows, e um novo terminal de interface de linha de comando janela chamada mintty.

Em poucas palavras

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

ssh, scp, cat, findSão executados usando bashexatamente da mesma maneira. Eles geralmente são armazenados em sistemas * nix, /usr/bine não em C:\Windows\system32sistemas * nix, porque o Windows e o * nix têm sua estrutura de arquivos do sistema organizada de maneira diferente.

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

Assim como poder rodar cmd.exeno * nix não permite muito sem os outros utilitários do sistema, apenas rodar o Bash no Windows também não é muito útil. Isso significa que todos esses comandos extras precisam ser agrupados 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 na API de programação POSIX (que é o que o * nix usa) e não nas APIs do Win32 (que é o Windows que usa). A documentação da API POSIX está disponível abertamente, portanto, algumas pessoas a portaram para outros sistemas, incluindo o Windows. A implementação do Windows de APIs / bibliotecas POSIX é fornecida por Cygwine MSYS.

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

hortelã

minttyestá incluído porque cmd.exe, na janela de linha de comando padrão do Windows, faltam 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 que acompanham o pacote Git Bash for Windows), mas ocasionalmente um aplicativo de sistema Windows pode funcionar melhor cmd.exe.

Pabru
fonte
1
Acontece que a maioria das minhas perguntas é respondida nas Perguntas frequentes do projeto: github.com/git-for-windows/git/wiki/FAQ e posso encontrar informações mais específicas nos grupos de grupos do google.google.com/forum/#! forum / git-for-windows .
geneorama
@geneorama Não deveria ser um problema aceitar esta resposta se ela fosse realmente correta, informativa e útil.
walen
1
@geneorama Preencher esse espaço em branco pode ter sido sua intenção, mas essa não foi a pergunta que você fez. Sua postagem é intitulada "O que é o Git Bash para Windows, afinal?" , e a única pergunta presente em seu corpo é "Gostaria de saber qual é a base que faz com que os comandos * nix ssh scp cat lsfuncionem no Git Bash for Windows?" . A publicação de Pabru responde bem às duas perguntas e é uma resposta correta para qualquer pessoa que possa ter a mesma pergunta (conforme indicado); portanto, ao aceitá-la, você está ajudando outros usuários. Você tentou postar uma nova pergunta para o rsyncproblema?
walen
4
@walen postar perguntas em SO e sites relacionados é tão desagradável que duvido que algum dia postarei mais perguntas.Este foi realmente um teste e confirmou meus sentimentos. Em meu esforço para manter a pergunta concisa e documentar minha pesquisa (e passei um dia inteiro pesquisando), acho que deixei de fora a questão real. Quando edito com cuidado, as pessoas parecem considerar a brevidade como uma falta de pesquisa. Se eu fizer a pergunta muito detalhada, ela será ignorada. Não importa o quê, a pergunta é criticada (vários comentários rudes foram excluídos). Até minhas perguntas "famosas" foram fortemente votadas inicialmente.
geneorama
1
@geneorama Se isso lhe serve de consolo, sua pergunta me ajudou a aprender mais sobre o git bash, antes mesmo de ler a resposta. Mas eu entendo o que você quer dizer.
22717 walen
4

fundo

Eu sou o OP. Originalmente, eu queria apenas saber o nome formal dessa coisa que estava usando.

Agora acho que o nome é "Git Bash for Windows". Infelizmente, a resposta completa é complicada porque essa coisa é realmente muitas coisas.

A resposta principal de 2016 originalmente não foi útil para mim, mas foi muito editada e foi ficando cada vez mais útil. Ainda assim, ele perde parte da minha pergunta original.

O início: msysgit

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

O README ( https://github.com/msysgit/msysgit ) no projeto msysgit explica o relacionamento entre os componentes:

O relacionamento entre msysGit e Git para Windows

O Git for Windows é o pacote de software que instala um ambiente mínimo para executar o Git no Windows. Ele vem com um Bash (um shell do tipo Unix), com um interpretador Perl e com o executável Git e suas dependências.

Por outro lado, o msysGit é o pacote de software que instala o ambiente de compilação que pode compilar o Git para Windows. A maneira mais fácil é instalá-lo através do instalador da rede .

A diferença entre MSYS e MinGW

O objetivo do projeto MinGW é fornecer uma maneira de compilar binários nativos do Windows sem camada POSIX usando o GNU C Compiler.

No entanto, pelo menos o Bash precisa de uma camada POSIX (principalmente devido à ausência da fork()chamada no Windows). Portanto, o MSYS (o sistema mínimo ) é ativado, oferecendo o sistema mínimo necessário para oferecer a funcionalidade Bash (e Perl) no Windows.

Consequentemente, o MSYS é fornecido com uma camada POSIX (baseada em uma versão antiga do Cygwin) que é usada apenas pelo Bash e Perl, mas não por nada compilado nesse ambiente.

BTW, apenas no caso de o README completo ser excluído, copiei-o para uma essência .

A janela do terminal: mintty

A outra parte do Git Bash para Windows é a linha de comando real do Windows, mintty. Ainda bem que existe, mas não é algo que eu precise pesquisar no Google.

Referências para MSYS2

O wiki deles é um verdadeiro tesouro de detalhes sobre o ambiente MSYS2: https://github.com/msys2/msys2/wiki

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

MSYS2 é constituído por três subsistemas e os seus correspondentes repositórios de pacotes, msys2, mingw32, e mingw64.

Esta discussão também é muito útil: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e

geneorama
fonte
1
"Consequentemente, o MSys é enviado com uma camada POSIX ( baseada em uma versão antiga do Cygwin ) ..." - isso me ajudou a concluir que instalar o git no Cygwin torna o 'Git Bash for Windows' redundante, para que eu possa desinstalá-lo.
Daniel Sokolowski 28/01