2012-01-20 7 views
21

Mam przybliżony pomysł, że git.cmd to tylko opakowanie (ale domyślnie dodane do PATH), ale dowiedziałem się, że działa również git.exe i zamierzam użyć go jako obejścia tego issue (komentarze do raczej w odniesieniu do chcp na XP64). Czy nie byłoby to zalecane z jakiegokolwiek powodu? Czy git.cmd naprawdę jest potrzebny w pierwszej kolejności?git.cmd vs git.exe - na czym polega różnica i który z nich należy zastosować?

Uwaga: chcp problem mam na myśli nie jest spowodowany przez brakujących wpisów ścieżkę w 'chcp' is not recognized as an internal or external command, operable program or batch file. on a Windows PC

Odpowiedz

23

git.cmd nie istnieje już w aktualnych wersjach programu msysgit (np. 1.8.0). git.cmd to opakowanie, które zostało zastąpione nowym opakowaniem o nazwie git.exe. Nie należy mylić tego z rzeczywistym git.exe.

Jeśli przyjrzeć katalogu Git w %ProgramFiles(x86)% lub %ProgramFiles%, zobaczysz następującą strukturę:

Git 
|-- bin 
| |-- git.exe 
|-- cmd 
    |-- git.exe 

Owijka istnieje w msysGit przez długi czas, aby odpowiednio skonfigurować środowisko do używania git z cmd.exe. Jeśli używasz dołączonej powłoki bash, uruchomi ona bezpośrednio git.exe.

Możesz porównać starą wersję cmd z nowym wykonywalnego owijki tutaj:

  1. git.cmd
  2. git.exe wrapper

Tak naprawdę nie trzeba się martwić o każdy z tej magii, po prostu zrozum, że powinieneś wywołać opakowanie z dowolnego miejsca, ale nie z środowiska bash msysgit.Kiedy dodajesz git do ścieżki w instalatorze, jest dodawany katalog Git \ cmd. Nie polecam dodawania wszystkich dołączonych narzędzi do twojej ścieżki systemowej, ponieważ może to powodować wiele problemów, szczególnie jeśli masz inne instalacje msys lub cygwin. Nigdy nie próbowałem go wypróbować w niedawnej pamięci, ale wyobrażam sobie, że umieszcza on zarówno katalogi cmd i bin na twojej ścieżce, z priorytetem cmd.

Dla mnie jest jedna wielka zaleta nowego opakowania git.exe: sprawia, że ​​kod wywołujący git jest bardziej przenośny. Poprzednio, jeśli napisałem skrypt w języku Pythona, który nazywa się git, musiałbym wykonać komendę w środowisku powłoki (subprocess.Popen() z shell=True) lub jawnie uruchomić plik cmd. Teraz mogę po prostu wykonać proces z "git" jako nazwą, niezależnie od systemu operacyjnego. Dzieje się tak, ponieważ CreateProcess() w systemie Windows nie wykonuje pliku wsadowego (.cmd to alias dla .bat), należy wywołać cmd.exe, aby go wykonać.

5

Według git for windows installer masz możliwość dodania git.exe na swojej drodze podczas instalacji. Powinieneś dobrze używać tej opcji.

Option screen to select git.exe

+0

więc czy słusznie jest powiedzieć, że użycie git.cmd odwołuje się do pierwszej opcji? – prusswan

+0

AFAIK tak, wybrałbym drugą opcję, jeśli chcesz użyć git.exe ze zwykłego polecenia cmd. –

13

Istnieją trzy opcje podczas instalacji msysgit.

  1. Pierwszym jest to, że nic nie jest umieszczany na PATH i masz używać Git Bash.

  2. Drugim jest to, że git.cmd i gitk.cmd są dodawane do PATH tak, że można go używać w cmd, PowerShell, cygwin itd. Bez wpływu na inne narzędzia, które masz w systemie Windows. (Ta git.cmd jest otoką, która pozwala ci to zrobić, aby odpowiedzieć na pytanie).

  3. Trzecim (moim ulubionym) jest dodanie wszystkich narzędzi i git.exe, w PATH i użyj tego. Wpłynie to na narzędzia systemu Windows i będziesz mógł korzystać z pełnego zestawu narzędzi, z których korzysta MSYS.

Zawsze korzystałem z trzeciej opcji. Nigdy nie widziałem, jak to wpływa na mnie (używam poleceń cmdlet Powershell i powershell, a nigdy standardowych poleceń Windows) Jeśli tak jest i chcesz mieć Mingw exes do swojej dyspozycji, przejdź do trzeciej opcji, a będziesz dobry.