Czym w ogóle jest Git Bash dla Windows?

58

Z radością korzystam z Git i Git Bash z https://git-scm.com/ . Istnieje strona z dodatkowymi informacjami tutaj: https://git-for-windows.github.io/ .

Wczoraj napotkałem problem rsynci zacząłem głębiej zagłębiać się w Git Bash dla Windows. Uświadomiłem sobie, że nie jestem nawet pewien nazwy programu Bash, ponieważ jest on dołączony do pakietu git-scm. Nazywam to Git Bash dla Windows, co wydaje się rozsądne.

Przeglądając „What is Git Bash” przeczytałem o Cygwinie i innej rzeczy zwanej mysys2 , z którą wydaje się to być związane mysysGit, i zobaczyłem odniesienia do MinGW. Ale potem zobaczyłem w FAQ, że mintty jest domyślnym terminalem dla Git Bash.

Wygląda na to, że aplikacja Bash jest specjalnie wyselekcjonowanym pakietem innych rzeczy (najczęściej wymienionych powyżej), które są dostępne niezależnie.

Zasadniczo chciałbym wiedzieć, jaka jest podstawa, która sprawia, że ​​polecenia * nix ssh scp cat lsdziałają jak w Git Bash dla Windows?

(Myślę, że dobra odpowiedź pomogłaby komuś zrozumieć, w skrócie, jak te komponenty pasują do siebie i zrozumieć odpowiednie słowa dla komponentów, ale nie chcę łamać formatu pytania / odpowiedzi SO).

genorama
źródło
Znalazłem bardzo dobrą odpowiedź tutaj: Jakie jest dokładne znaczenie Git Bash?
genorama
1
Myślę, że oficjalną nazwą / rzeczą dla Google jest „git bash”. Pomaga mieć to w cudzysłowie, ponieważ oba słowa mają znaczenie niezależnie.
genorama
Dobra dyskusja na temat Reddit tu i tutaj (od 2017 roku). Odpowiadają nawet na moje oryginalne rsyncpytanie !!
genorama

Odpowiedzi:

68

streszczenie

Masz rację, Git Bash dla Windows to nie tylko bashkompilacja dla Windows. Jest to pakiet, który zawiera bash(co jest powłoka wiersza polecenia ) oraz zbiór innych, oddzielnych * narzędzi uniksowych takich jak ssh, scp, cat, findi innych (które pracuje z wykorzystaniem powłoki), opracowanych dla systemu Windows, a nowy terminal interfejs wiersza poleceń okno o nazwie mintty.

W skrócie

W systemie Windows możesz uruchamiać polecenia takie jak ipconfig /alllub format G:za pomocą cmd.exe. Te polecenia są rzeczywistymi plikami wykonywalnymi w C:\Windows\system32, przechowywanymi jako ipconfig.exei format.complikami. cmd.exejest oddzielny od i ładuje i uruchamia je na żądanie użytkownika.

ssh, scp, cat, findSą prowadzone przy użyciu bashdokładnie w ten sam sposób. Zazwyczaj są one przechowywane /usr/binw C:\Windows\system32systemach * nix, a nie w nich , ponieważ Windows i * nix mają inną strukturę plików systemowych.

W przypadku Git Bash dla Windows programy te znajdują się w folderze instalacyjnym Git:, C:\Program Files\Git\usr\binktóry można również znaleźć w emulowanym środowisku Linux pod /usr/bin.

Podobnie jak możliwość uruchomienia cmd.exena * Nixie nie pozwala ci wiele zrobić bez innych narzędzi systemowych, tak samo możliwość uruchamiania Bash na Windowsie również nie jest bardzo przydatna. Oznacza to, że wszystkie te dodatkowe polecenia muszą być połączone z Bash, aby stworzyć użyteczny pakiet oprogramowania.

Szczegóły: aplikacje POSIX w systemie Windows

Zwykle te dodatkowe polecenia można znaleźć w systemach * nix, a nie w systemie Windows, ponieważ zostały one zaprogramowane w interfejsie API programowania POSIX (który jest używany przez * nix), a nie w interfejsach API Win32 (który używa Windows). Dokumentacja API POSIX jest jawnie dostępna, więc niektóre osoby przeniosły ją na inne systemy, w tym Windows. Implementacja interfejsów API / bibliotek POSIX w systemie Windows jest zapewniana przez Cygwini MSYS.

Jest to trochę podobne do tego, co robi projekt Wine , ale konwertuje POSIX-> Windows zamiast Windows-> POSIX, podobnie jak Wine.

miętowy

minttyjest dołączony, ponieważ cmd.exew domyślnym oknie wiersza poleceń systemu Windows brakuje niektórych ważnych funkcji, które normalnie są dostępne w większości systemów * nix. W większości przypadków minttyjest lepszym wyborem do uruchamiania poleceń (z pewnością dla narzędzi dostarczanych z pakietem Git Bash dla Windows), ale czasami aplikacja systemowa Windows może działać lepiej cmd.exe.

Pabru
źródło
1
Okazuje się, że odpowiedzi na większość moich pytań znajdują się w często zadawanych pytaniach dotyczących projektu: github.com/git-for-windows/git/wiki/FAQ, a bardziej szczegółowe informacje mogę znaleźć w grupie dyskusyjnej google.com.google.com/forum/# ! forum / git-for-windows .
genorama
@geneorama Nie powinno być problemu z zaakceptowaniem tej odpowiedzi, jeśli jest ona rzeczywiście poprawna, pouczająca i przydatna.
walen
1
@geneorama Wypełnienie tego pustego miejsca mogło być Twoją intencją, ale nie było to pytanie, które zadałeś. Twój post zatytułowany jest „Co to jest Git Bash dla Windows?” , a jedynym pytaniem w jego ciele jest: „Chciałbym wiedzieć, na jakiej podstawie komendy * nix ssh scp cat lsdziałają jak Git Bash dla Windows?” . Post Pabru dość ładnie odpowiada na oba pytania i jest poprawną odpowiedzią dla każdego, kto może mieć to samo pytanie (jak podano), więc akceptując to, pomagasz innym użytkownikom. Czy próbowałeś opublikować nowe pytanie dotyczące rsyncproblemu?
walen
4
@walen zamieszczanie pytań na stronie SO i powiązanych stronach jest tak nieprzyjemne, że wątpię, czy kiedykolwiek opublikuję więcej pytań. To był test, który potwierdził moje uczucia. Starając się zachować zwięzłość pytania i udokumentować moje badania (i spędziłem cały dzień na badaniu), myślę, że pominąłem właściwe pytanie. Kiedy starannie edytuję, ludzie wydają się traktować zwięzłość jako brak badań. Jeśli sprawię, że pytanie będzie zbyt szczegółowe, zostanie zignorowane. Bez względu na to pytanie jest krytykowane (usunięto kilka wręcz niegrzecznych komentarzy). Nawet moje „słynne” pytania były początkowo mocno zaniżone.
genorama
1
@geneorama Jeśli jest to dla ciebie pociecha, twoje pytanie pomogło mi dowiedzieć się więcej o git bash, zanim jeszcze przeczytałem odpowiedź. Ale rozumiem, co masz na myśli.
walen
4

tło

Jestem OP. Początkowo chciałem po prostu poznać formalną nazwę tego, czego używałem.

Teraz myślę, że nazywa się „Git Bash dla Windows”. Niestety pełna odpowiedź jest skomplikowana, ponieważ tak naprawdę jest wiele rzeczy.

Najlepsza odpowiedź z 2016 roku początkowo nie była dla mnie pomocna, ale została mocno zredagowana i stała się coraz bardziej pomocna. Mimo to brakuje niektórych moich pierwotnych pytań.

Początek: msysgit

Właściwie początek jest prawdopodobnie MSYS, ale naprawdę MSYS2. Termin „msysgit” jest dobrym terminem do wyszukiwania, aby dowiedzieć się, co się dzieje, gdy XYZ nie działa; rzeczy takie jak „gdzie w @ * #! są zapisane wszystkie ustawienia autocrlf?!?!?!?”

Plik README ( https://github.com/msysgit/msysgit ) w projekcie msysgit wyjaśnia związek między komponentami:

Związek między msysGit i Git dla Windows

Git dla systemu Windows to pakiet oprogramowania, który instaluje minimalne środowisko do uruchamiania Git w systemie Windows. Zawiera Bash (powłokę typu Unix), interpreter Perla oraz plik wykonywalny Git i jego zależności.

Z drugiej strony msysGit to pakiet oprogramowania instalujący środowisko kompilacji, które może budować Git dla Windows. Najprostszym sposobem jest zainstalowanie go za pomocą instalatora sieciowego .

Różnica między MSYS a MinGW

Celem projektu MinGW jest zapewnienie sposobu kompilacji natywnych plików binarnych Windows bez warstwy POSIX przy użyciu kompilatora GNU C.

Jednak przynajmniej Bash potrzebuje warstwy POSIX (przede wszystkim z powodu braku fork()wywołania w systemie Windows). Dlatego wprowadzono MSYS ( system minimalny ), oferujący minimalny system niezbędny do oferowania funkcjonalności Bash (i Perl) w systemie Windows.

W związku z tym MSYS jest dostarczany z warstwą POSIX (opartą na starej wersji Cygwin), która jest używana tylko przez Bash i Perl, ale nie przez nic skompilowanego w tym środowisku.

BTW, na wypadek, gdyby cały plik README został usunięty, skopiowałem go do maniery .

Okno terminala: mintty

Inną częścią Git Bash dla systemu Windows jest wiersz poleceń systemu Windows, miętowy. Dzięki Bogu istnieje, ale nie potrzebuję google.

Referencje dla MSYS2

Ich wiki to prawdziwy skarb informacji o środowisku MSYS2: https://github.com/msys2/msys2/wiki

We wstępie ta część jest najbardziej adekwatna do mojego pierwotnego pytania:

MSYS2 składa się z trzech podzespołów i odpowiednie repozytorium pakietów, msys2, mingw32i mingw64.

Ta dyskusja jest również bardzo pomocna: https://sourceforge.net/p/msys2/discussion/general/thread/dcf8f4d3/#8473/588e

genorama
źródło
1
„W związku z tym MSys jest dostarczany z warstwą POSIX ( opartą na starej wersji Cygwin ) ...” - pomogło mi to po prostu stwierdzić, że zainstalowanie git na Cygwin powoduje, że „Git Bash dla Windows” jest zbędny, więc mogę go po prostu odinstalować.
Daniel Sokołowski