2012-01-20 17 views
21

Tôi có một ý tưởng thô rằng git.cmd chỉ là một wrapper (nhưng được thêm vào PATH theo mặc định), nhưng tôi phát hiện ra rằng git.exe hoạt động tốt và tôi dự định sử dụng nó như một giải pháp cho điều này issue (nhận xét nó đúng hơn, liên quan đến chcp trên XP64). Điều đó sẽ không được khuyến khích vì bất kỳ lý do gì? Ngoài ra, git.cmd có thực sự cần thiết ngay từ đầu không?git.cmd vs git.exe - sự khác biệt và cái nào nên được sử dụng?

Lưu ý: Vấn đề chcp tôi đề cập đến không phải là do thiếu thông tin nhập PATH như trong 'chcp' is not recognized as an internal or external command, operable program or batch file. on a Windows PC

Trả lời

23

git.cmd không còn tồn tại trong các phiên bản hiện tại của msysgit (ví dụ: 1.8.0). git.cmd là một wrapper đã được thay thế bằng một gói mới được gọi là git.exe. Điều này không bị nhầm lẫn với thực tế git.exe.

Nếu bạn có một cái nhìn tại thư mục Git trong %ProgramFiles(x86)% hoặc %ProgramFiles%, bạn sẽ thấy cấu trúc sau:

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

Các wrapper đã tồn tại trong msysgit trong một thời gian dài để thiết lập đúng môi trường để sử dụng git từ cmd.exe. Nếu bạn đang sử dụng shell bash, nó sẽ chạy git.exe trực tiếp.

Bạn có thể so sánh các phiên bản cmd cũ với wrapper thực thi mới tại đây:

  1. git.cmd
  2. git.exe wrapper

Bạn không thực sự cần phải lo lắng về bất kỳ ma thuật này, chỉ cần hiểu rằng bạn nên gọi trình bao bọc từ bất cứ thứ gì trừ môi trường msysgit bash.Khi bạn thêm git vào đường dẫn trong trình cài đặt, đó là thư mục Git \ cmd được thêm vào. Tôi không khuyên bạn nên bao giờ thêm tất cả các tiện ích đi kèm vào đường dẫn hệ thống của bạn, vì điều này có thể gây ra rất nhiều vấn đề, đặc biệt là nếu bạn có cài đặt msys hoặc Cygwin khác. Tôi chưa bao giờ thực sự thử nó trong bộ nhớ gần đây, nhưng tôi sẽ tưởng tượng nó đặt cả hai thư mục cmdbin trong đường dẫn của bạn, với ưu tiên là cmd.

Đối với tôi, có một lợi thế rất lớn đối với trình bao bọc git.exe mới: nó làm cho mã gọi git dễ dàng hơn. Trước đây, nếu tôi đã viết một kịch bản python gọi là git, tôi sẽ phải thực hiện lệnh bằng môi trường shell (subprocess.Popen() với shell=True) hoặc chạy tệp cmd một cách rõ ràng. Bây giờ, tôi chỉ có thể thực hiện một quá trình với 'git' như tên, bất kể hệ điều hành. Điều này là do CreateProcess() trên Windows sẽ không thực hiện một tập tin thực thi (.cmd là một bí danh cho .bat), bạn cần phải gọi cmd.exe để thực thi nó.

5

Theo git for windows installer bạn có tùy chọn thêm git.exe đến đường dẫn của bạn trong việc thiết lập. Bạn nên sử dụng tùy chọn đó.

Option screen to select git.exe

+0

vì vậy có đúng không khi sử dụng git.cmd ám chỉ tùy chọn đầu tiên? – prusswan

+0

AFAIK có, tôi sẽ chọn tùy chọn thứ hai nếu bạn muốn sử dụng git.exe từ dấu nhắc cmd thông thường. –

13

Có ba tùy chọn khi bạn cài đặt msysgit.

  1. Đầu tiên là không có gì được đưa vào PATH và bạn sử dụng Git Bash.

  2. Thứ hai là git.cmdgitk.cmd được thêm vào PATH để bạn có thể sử dụng nó trong cmd, Powershell, Cygwin vv mà không ảnh hưởng đến các công cụ khác mà bạn có trên Windows. (git.cmd là trình bao bọc cho phép bạn thực hiện việc này, để trả lời câu hỏi).

  3. Thứ ba (yêu thích của tôi) là thêm tất cả các công cụ và git.exe, vào PATH và sử dụng công cụ này. Điều này sẽ ảnh hưởng đến các công cụ Windows và bạn sẽ có thể sử dụng bộ công cụ đầy đủ mà MSYS đi kèm.

Tôi luôn sử dụng tùy chọn thứ ba. Tôi chưa bao giờ thấy nó ảnh hưởng đến tôi như thế nào (tôi sử dụng lệnh Powershell và powershell và không bao giờ là lệnh Windows chuẩn) Nếu bạn giống như vậy và bạn muốn Mingw xử lý, hãy chọn tùy chọn thứ ba và bạn sẽ tốt.

Các vấn đề liên quan