Làm cách nào tôi có thể thiết lập trình chỉnh sửa để hoạt động với Git trên Windows?


561

Tôi đang dùng thử Git trên Windows . Tôi đã đến điểm thử "git commit" và tôi đã gặp lỗi này:

Terminal bị câm nhưng không xác định VISUAL hay EDITOR. Vui lòng cung cấp tin nhắn bằng tùy chọn -m hoặc -F.

Vì vậy, tôi đã tìm ra rằng tôi cần phải có một biến môi trường được gọi là EDITOR. Không vấn đề gì. Tôi đặt nó để trỏ đến Notepad. Điều đó đã làm việc, gần như. Thông báo cam kết mặc định mở trong Notepad. Nhưng Notepad không hỗ trợ nguồn cấp dữ liệu trần. Tôi đã đi ra ngoài và có Notepad ++ , nhưng tôi không thể tìm ra cách để thiết lập Notepad ++ %EDITOR%theo cách mà nó hoạt động với Git như mong đợi.

Tôi chưa kết hôn với Notepad ++. Tại thời điểm này tôi không quan tâm tôi sử dụng trình soạn thảo nào. Tôi chỉ muốn có thể nhập tin nhắn cam kết trong một trình soạn thảo chứ không phải là dòng lệnh (với -m).

Những người bạn sử dụng Git trên Windows: Bạn sử dụng công cụ nào để chỉnh sửa tin nhắn cam kết của mình và bạn phải làm gì để nó hoạt động?


7
TLDR: đặt các trích dẫn đơn xung quanh đường dẫn đến trình soạn thảo thực thi
yoyo

Có lẽ không hữu ích, nhưng FWIW, tôi chỉ sử dụng notepad thông thường. Tôi không làm gì để nó hoạt động. Nó chỉ hoạt động ngoài hộp theo mặc định ...
BrainSlugs83

11
Cập nhật tháng 9 năm 2015: một đơn giản git config core.editor notepadlà đủ. Xem câu trả lời cập nhật của tôi dưới đây .
VonC

Chỉ cần lưu ý nhanh rằng JEdit không phải là trình soạn thảo thích hợp cho git. JEdit chỉ mở một phiên bản ngay cả đối với nhiều tệp. Nếu nó đã được mở, git sẽ khiến nó mở một tệp mới, nhưng sau đó bạn phải đóng hoàn toàn JEdit trước khi git tiếp tục. Không có tùy chọn dòng lệnh để khiến JEdit mở một phiên bản riêng để chỉnh sửa thông điệp cam kết.
GrantRobertson

Trong trường hợp bất kỳ ai yêu thích Sublime Text 3, đây là hướng dẫn của tôi về cách tôi định cấu hình cho Windows ... và Linux: Cài đặt tốt nhất cho Sublime Text 3 làm trình chỉnh sửa git của bạn (hướng dẫn Windows & Linux) . @yoyo, TLDR để sử dụng bất kỳ trình soạn thảo văn bản nào: đặt các trích dẫn đơn xung quanh đường dẫn đến trình soạn thảo có thể thực thi VÀ sử dụng dấu gạch chéo (/) KHÔNG quay lại dấu gạch chéo (\) trong tên đường dẫn để thực thi Windows.
Gabriel Staples

Câu trả lời:


562

Cập nhật tháng 9 năm 2015 (6 năm sau)

Bản phát hành cuối cùng của git-for-Windows (2.5.3) hiện bao gồm:

Bằng cách định cấu hình git config core.editor notepad, giờ đâynotepad.exe người dùng có thể sử dụng làm trình chỉnh sửa mặc định .
Việc định cấu hình git config format.commitMessageColumns 72sẽ được chọn bởi trình bao bọc notepad và ngắt dòng thông báo cam kết sau khi người dùng chỉnh sửa nó.

Xem cam kết 69b301b của Johannes Schindelin ( dscho) .

Và Git 2.16 (Q1 2018) sẽ hiển thị một thông báo cho người dùng biết rằng họ đang đợi người dùng hoàn tất chỉnh sửa khi sinh ra một trình soạn thảo, trong trường hợp trình soạn thảo mở ra một cửa sổ ẩn hoặc một nơi nào đó bị che khuất và người dùng bị mất.

Xem cam kết abfb04d (07 tháng 12 năm 2017) và cam kết a64f213 (29 tháng 11 năm 2017) của Lars Schneider ( larsxschneider) .
Giúp đỡ: Junio ​​C Hamano ( gitster) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết 0c69a13 , ngày 19 tháng 12 năm 2017)

launch_editor(): chỉ ra rằng Git chờ đợi đầu vào của người dùng

Khi đồ họa GIT_EDITORđược sinh ra bởi lệnh Git mở và đợi đầu vào của người dùng (ví dụ: " git rebase -i"), thì cửa sổ soạn thảo có thể bị che khuất bởi các cửa sổ khác.
Người dùng có thể bị nhìn chằm chằm vào cửa sổ thiết bị đầu cuối Git ban đầu mà không nhận ra rằng họ cần phải tương tác với một cửa sổ khác trước khi Git có thể tiến hành. Để người dùng này Git xuất hiện treo.

In một thông báo rằng Git đang đợi đầu vào của trình soạn thảo trong thiết bị đầu cuối ban đầu và loại bỏ nó khi trình soạn thảo trở lại, nếu thiết bị đầu cuối hỗ trợ xóa dòng cuối cùng


Câu trả lời gốc

Tôi vừa thử nghiệm nó với phiên bản git 1.6.2.msysgit.0.186.gf7512 và Notepad ++ 5.3.1

Tôi không muốn phải đặt biến EDITOR, vì vậy tôi đã thử:

git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\""
# or
git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\" %*"

Điều đó luôn mang lại:

C:\prog\git>git config --global --edit
"c:\Program Files\Notepad++\notepad++.exe" %*: c:\Program Files\Notepad++\notepad++.exe: command not found
error: There was a problem with the editor '"c:\Program Files\Notepad++\notepad++.exe" %*'.

Nếu tôi xác định một npp.bat bao gồm:

"c:\Program Files\Notepad++\notepad++.exe" %*

và tôi gõ:

C:\prog\git>git config --global core.editor C:\prog\git\npp.bat

Nó chỉ hoạt động từ phiên DOS, nhưng không phải từ vỏ git .
(không phải với cơ chế cấu hình core.editor, một tập lệnh có " start /WAIT..." trong đó sẽ không hoạt động, mà chỉ mở một cửa sổ DOS mới)


Câu trả lời của Bennett đề cập đến khả năng tránh thêm một tập lệnh, nhưng để tham chiếu trực tiếp chính chương trình giữa các trích dẫn đơn giản . Lưu ý hướng của dấu gạch chéo! Sử dụng /KHÔNG \để phân tách các thư mục trong tên đường dẫn!

git config --global core.editor \
"'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Hoặc nếu bạn đang ở trong hệ thống 64 bit:

git config --global core.editor \
"'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Nhưng tôi thích sử dụng một tập lệnh (xem bên dưới): theo cách đó tôi có thể chơi với các đường dẫn khác nhau hoặc các tùy chọn khác nhau mà không phải đăng ký lại a git config.


Giải pháp thực tế (có tập lệnh) là nhận ra rằng:
những gì bạn đề cập đến trong tệp cấu hình thực sự là /bin/shtập lệnh shell ( ) , không phải tập lệnh DOS.

Vì vậy, những gì làm việc là:

C:\prog\git>git config --global core.editor C:/prog/git/npp.bat

với C:/prog/git/npp.bat:

#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst "$*"

hoặc là

#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"

Với cài đặt đó, tôi có thể thực hiện ' git config --global --edit' từ DOS hoặc Git Shell hoặc tôi có thể làm ' git rebase -i ...' từ DOS hoặc Git Shell.
Các lệnh Bot sẽ kích hoạt một phiên bản mới của notepad ++ (do đó là -multiInsttùy chọn ') và đợi cho trường hợp đó được đóng trước khi tiếp tục.

Lưu ý rằng tôi chỉ sử dụng '/', không phải \'. Và tôi đã cài đặt msysgit bằng tùy chọn 2. (Thêm git\binthư mục vào PATHbiến môi trường, nhưng không ghi đè một số công cụ windows tích hợp)

Thực tế là trình bao bọc notepad ++ được gọi là .bat không quan trọng.
Sẽ tốt hơn nếu đặt tên nó là 'npp.sh' và đặt nó trong [git]\cmdthư mục mặc dù (hoặc trong bất kỳ thư mục nào được tham chiếu bởi biến môi trường PATH của bạn).


Xem thêm:


lightfire228 thêm vào trong các ý kiến :

Đối với bất kỳ ai gặp sự cố trong đó N ++ chỉ mở một tệp trống và git không nhận thông điệp cam kết của bạn, hãy xem " Hủy bỏ cam kết do tin nhắn trống ": thay đổi tệp .bathoặc .shtệp của bạn để nói:

"<path-to-n++" .git/COMMIT_EDITMSG -<arguments>. 

Điều đó sẽ nói với notepad ++ để mở tệp cam kết tạm thời, thay vì một tệp mới trống.


Trong tập lệnh shell của bạn, bạn cần dấu ngoặc kép khoảng $ *, nếu không, nó sẽ không hoạt động chính xác cho các đường dẫn có khoảng trắng trong chúng. Cảm ơn bạn đã giải thích cặn kẽ - Tôi đang cài đặt git (và một loạt các thứ khác) trên Windows để bắt đầu lập trình viên và dòng lệnh đủ khó để mò mẫm mà không khiến họ học các lệnh vi.
Sarah Mei

Một ví dụ cụ thể khác: stackoverflow.com/questions/1634161/ trên
VonC

1
Theo câu trả lời của Bennett, bạn không cần tạo kịch bản, bạn chỉ có thể sử dụng dấu nháy đơn 'bên trong dấu ngoặc kép ".
Tobias Kienzler

@Tobias: đúng, tôi đã bao gồm câu trả lời của anh ấy trong tôi, cũng như lý do tại sao tôi vẫn thích tham khảo một tập lệnh trong git configcài đặt của mình .
VonC

6
@NateGlenn Sử dụng dir /Xtương đương rút gọn : " PROGRA~2" cho " Program Files (x86)", đây là một thói quen tốt để sử dụng khi sử dụng các công cụ tương thích đa nền tảng trên Windows, cho phép bạn xóa sạch khoảng trắng.
JJ Zabkar

300

Dựa trên câu trả lời của Darren , để sử dụng Notepad ++, bạn chỉ cần thực hiện việc này (tất cả trên một dòng):

git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Rõ ràng, C:/Program Files/Notepad++/notepad++.exephần nên là đường dẫn đến thực thi Notepad ++ trên hệ thống của bạn. Ví dụ, nó có thể là C:/Program Files (x86)/Notepad++/notepad++.exe.

Nó hoạt động như một cơ duyên đối với tôi.


10
Tôi cũng vậy! BTW, các công tắc đó được giải thích tại C: / Tệp chương trình / Notepad ++ / user.manual / Tài liệu / notepad-user-hướng dẫn / lệnh-line.html
Andrew Swan

23
Theo dõi Notepad ++ được đặt trong `C: \ Program Files (x86)`
mindless.panda

8
Đối với x64 Windows thay đổi thành: git config --global core.editor "'C: / Chương trình tập tin (x86) / Notepad ++ / notepad ++. Exe' -multiInst -notabbar -nosession -noPlugin"
Dariusz

4
Tôi nhận ra rằng tôi đến bữa tiệc muộn này, nhưng vì tò mò, có ai biết (hoặc thậm chí nhớ, sau tất cả những năm này) tại sao người ta lại chỉ định "-notabbar" không? Tôi hiểu lý do đằng sau các tham số khác (tốt, không chắc tại sao "-noPlugin", thực tế), nhưng không phải là thông số này.
Wilson F

11
@WilsonF Lý do là vì bạn PHẢI thoát notepad ++ để git ngừng chờ đợi đầu vào của bạn và tiếp tục. Bạn không muốn mở các tab khác trong trường hợp này của Notepad ++ vì sau đó phiên git của bạn sẽ bị đóng băng! Các cài đặt đó thực hiện đúng chính xác: nếu bạn đã mở Notepad ++, bạn sẽ có một phiên bản mới, điều đó không cho phép bạn mở các tệp khác và bạn phải đóng khi thực hiện để git biết bạn đã chỉnh sửa xong . Hoạt động tương tự cho các thông điệp cam kết.
ErikE

50

Dù sao, tôi vừa mới chơi với cái này và thấy những thứ sau đây hoạt động tốt với tôi:

git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m"

Tôi không nghĩ rằng CMD thích dấu ngoặc đơn vì vậy bạn phải sử dụng dấu ngoặc kép "để chỉ định đối số chuỗi được nhúng không gian".

Cygwin (mà tôi tin là nền tảng cơ bản cho Git's Bash), mặt khác thích cả hai '"; bạn có thể chỉ định một đường dẫn giống như CMD, sử dụng /thay vì \, miễn là chuỗi được trích dẫn tức là trong trường hợp này, sử dụng dấu ngoặc đơn.

Các -mghi đè / chỉ ra việc sử dụng nhiều trình soạn thảo và không cần phải xử lý %*ở cuối.


Cảm ơn lời giải thích trích dẫn đơn / đôi, có ý nghĩa ngay bây giờ!
Patrick McDonald

3
git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe' -m"làm việc như một cơ duyên đối với tôi
Vlad Holubiev

Tôi đã sử dụng `git config --global code.editor" 'C: \\ Chương trình tập tin \ Sublime Text 3 \\ sublimeSphere.exe' -n -w -m "`, tuy nhiên khi tôi chạy "git commit", nó sẽ mở ra một trình soạn thảo Notepad. Bất kỳ suy nghĩ về lý do tại sao điều này sẽ là trường hợp? Cảm ơn trước.
Ryan Chase

@RyanChase Xóa mục nhập cấu hình cục bộ khỏi ./git/config, vdeditor = notepad
Ricky Boyce

1
Git Bash chạy dưới MingW64, không phải Cygwin. Cygwin có nhị phân Git riêng.
Hans Deragon

27

Chỉnh sửa: Sau khi cập nhật lên Vim 7.3, tôi đã đi đến kết luận rằng cách sạch nhất và dễ nhất để làm điều này là:

  1. Thêm thư mục chính của Vim vào đường dẫn của bạn (nhấp chuột phải vào Máy tính của tôiThuộc tínhNâng caoBiến môi trường )

  2. Chạy cái này:

    git config --global core.editor "gvim --nofork '%*'"
    

Nếu bạn làm theo cách này, thì tôi khá chắc chắn rằng nó cũng sẽ hoạt động với Cygwin.

Câu trả lời gốc:

Ngay cả với một vài câu trả lời liên quan đến Vim, tôi vẫn gặp khó khăn khi làm việc này với gVim trong Windows (trong khi không sử dụng tệp bó hoặc% EDITOR% hoặc Cygwin).

Những gì tôi cuối cùng đã đến là tốt đẹp và sạch sẽ, và rút ra từ một số giải pháp ở đây:

git config --global core.editor \
"'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'"

Một điều khiến tôi mất một thời gian là đây không phải là dấu gạch chéo ngược kiểu Windows. Họ là những nhát chém về phía trước bình thường.


1
Nếu vim được cài đặt Program Files(x86), thì bạn cần thay đổi đường dẫn rõ ràng.
Swapnil

15

Notepad ++ chỉ hoạt động tốt, mặc dù tôi chọn gắn bó với Notepad, -m hoặc thậm chí đôi khi là "chỉnh sửa" tích hợp.

Vấn đề bạn gặp phải khi sử dụng Notepad ++ có liên quan đến cách Git khởi chạy trình soạn thảo thực thi. Giải pháp của tôi cho vấn đề này là đặt biến môi trường EDITORthành một tệp bó, thay vì thực thi trình soạn thảo thực tế, thực hiện như sau:

start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %*

/WAITthông báo phiên dòng lệnh tạm dừng cho đến khi ứng dụng thoát, do đó bạn sẽ có thể chỉnh sửa nội dung trái tim của mình trong khi Git vui vẻ chờ bạn. % * chuyển tất cả các đối số cho tệp bó qua Notepad ++.

C:\src> echo %EDITOR%
C:\tools\runeditor.bat

Tôi gặp khó khăn khi làm việc này dưới quyền hạn. Phương thức này ( stackoverflow.com/questions/10564/ ) đã hoạt động tốt.
Peter Stephens

11

Solitairead !

Tôi rất vui khi sử dụng Vim, nhưng vì tôi đang cố gắng giới thiệu Git cho công ty nên tôi muốn một thứ gì đó mà tất cả chúng ta đều có, và thấy rằng Wadad dường như hoạt động tốt (nghĩa là Git đợi cho đến khi bạn chỉnh sửa xong và đóng cửa sổ).

git config core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'

Đó là sử dụng Git Bash trên msysgit; Tôi đã không thử từ dấu nhắc lệnh của Windows (nếu điều đó tạo ra sự khác biệt).


Tôi thích sự đơn giản của việc này, nhưng nó không có tác dụng với tôi. Đây là những gì tôi đã cố gắng. Tôi nhận được thông báo lỗi sau: lỗi: Đã xảy ra sự cố với trình chỉnh sửa 'C: \ Chương trình tệp \ Windows NT \ Phụ kiện \ wordpad.exe'.
Shaun Luttin

3
Các trích dẫn không chính xác. Bạn phải đặt dấu ngoặc kép bên ngoài dấu ngoặc đơn . Đó là, sử dụng "'C: \ Chương trình tập tin \ Windows NT \ Phụ kiện \ wordpad.exe'" và sau đó nó sẽ hoạt động.
Shaun Luttin

Bạn cũng có thể hưởng lợi từ dấu gạch chéo (/) thay vì dấu gạch chéo ngược (\).
Chris Jones

1
Ngoài ra, có lẽ tốt nhất là sử dụng "git config --global" thay vì chỉ "git config" cho việc này. Bạn rất có thể muốn cài đặt áp dụng cho tất cả các kho git trên máy trạm của bạn, không chỉ là nơi bạn đang ở ngay bây giờ.
Chris Jones

@ChrisJones, Không có điểm nào trong trường hợp này vì "tệp chương trình" có khoảng cách giữa nó.
Pacerier

9

Tôi cũng sử dụng Cygwin trên Windows, nhưng với gVim (trái ngược với Vim dựa trên thiết bị đầu cuối ).

Để thực hiện công việc này, tôi đã làm như sau:

  1. Tạo một tệp bó một dòng (có tên git_editor.bat) chứa các mục sau: "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
  2. Đặt git_editor.battrong của tôi PATH.
  3. Bộ GIT_EDITOR=git_editor.bat

Với điều này được thực hiện, git commitvv sẽ gọi chính xác thực thi gVim.

CHÚ THÍCH 1: --noforkTùy chọn gVim đảm bảo rằng nó chặn cho đến khi thông điệp cam kết được viết.

CHÚ THÍCH 2: Các trích dẫn xung quanh đường dẫn đến gVim là bắt buộc nếu bạn có khoảng trắng trong đường dẫn.

CHÚ THÍCH 3: Các trích dẫn xung quanh "% *" là cần thiết chỉ trong trường hợp Git vượt qua đường dẫn tệp có khoảng trắng.


Đối với những người đang sử dụng msysgit (không phải gg của Cygwin) tôi đã có thể đơn giản hóa điều này một chút. stackoverflow.com/questions/10564/
trộm

Ngày thứ hai nghĩ rằng nó cũng có thể hoạt động với cygwin, tôi không hoàn toàn chắc chắn
Nick knowlson

8

Nhờ cộng đồng Stack Overflow ... và một nghiên cứu nhỏ, tôi đã có thể có được trình soạn thảo yêu thích của mình, EditPad Pro , để làm trình soạn thảo cốt lõi với msysgit 1.7.5.GIT và TortoiseGit v1.7.3.0 trên Windows XP SP3. ..

Theo lời khuyên ở trên, tôi đã thêm đường dẫn đến tập lệnh Bash cho trình soạn thảo mã ...

git config --global core.editor c:/msysgit/cmd/epp.sh

Tuy nhiên, sau nhiều lần thử thất bại ở các giải pháp đã đề cập ở trên ... cuối cùng tôi cũng có thể làm việc này. Theo tài liệu của EditPad Pro, việc thêm cờ '/ newinstance' sẽ cho phép trình bao chờ đợi đầu vào của trình soạn thảo ...

Cờ ' / newinstance ' là chìa khóa trong trường hợp của tôi ...

#!/bin/sh
"C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*"

Vâng, dấu gạch chéo kép đó cho tham số newinstance phải có trong tài liệu của Editpad. Cảm ơn bạn đã lưu ý nó ở đây!
gwideman

EditPad Pro yêu cầu chuyển đổi dòng lệnh như muốn /newinstancecó chính xác một dấu gạch chéo về phía trước. Điều này là khá bình thường đối với các ứng dụng Windows. Nếu bạn đang gọi EditPad từ shell UNIX thì bạn sẽ cần sử dụng bất kỳ cơ chế nào mà shell của bạn cung cấp để thoát khỏi dấu gạch chéo về phía trước để nó không xem công tắc là một đường dẫn tuyệt đối và chuyển một dấu gạch chéo về phía trước cho dòng lệnh của EditPad.
Jan Goyvaerts

2
Nếu bạn có EditPad Pro 7 và bạn muốn gọi EditPad Pro từ một quy trình muốn chờ trong quy trình của EditPad, thì bạn nên /waitchuyển công tắc trên dòng lệnh của EditPad. Bạn có thể sử dụng /waitcó hoặc không /newinstanceđể kiểm soát xem cửa sổ EditPad mới sẽ được mở hay liệu cửa sổ hiện có có nên được sử dụng lại hay không. Quá trình được khởi chạy bởi tập lệnh của bạn sẽ đợi tệp được đóng bất kể cửa sổ được tạo hay sử dụng lại. EditPad Pro 6 và trước đó không hỗ trợ /wait.
Jan Goyvaerts

@JanGoyvaerts ~ Cảm ơn vì /waitmũi cờ thưa ngài ... :)
Eddie B

Tôi không thể để EditPad Lite hoạt động cho tôi bằng cách sử dụng các hướng dẫn ở trên. Có lẽ đó là vì tôi đã cố gắng gọi EditPad (thông qua Git) bằng cách sử dụng thiết bị đầu cuối Windows chứ không phải Git Bash hoặc một số shell UNIX khác. Điều làm việc cho tôi là trực tiếp chỉnh sửa [core]phần .gitconfig để bao gồm dòng editor = "'C:/Program Files/Just Great Software/EditPad Lite 7/EditPadLite7.exe' //wait //newinstance".
dùng697473

8

Đối với nguyên tử bạn có thể làm

git config --global core.editor "atom --wait"

và tương tự cho Visual Studio Code

git config --global core.editor "code --wait"

sẽ mở ra một mã nguyên tử hoặc Visual Studio cửa sổ để bạn cam kết thông qua,

hoặc cho văn bản cao siêu :

git config --global core.editor "subl -n -w"

Đơn giản và hiệu quả hơn nhiều. Cảm ơn bạn.
rom5jp

6

Chỉnh sửa tệp .gitconfig trong thư mục c: \ Users \ YourUser và thêm:

[core]
editor = 'C:\\Program files\\path\\to\\editor.exe'

6

Đây là một triệu chứng của các vấn đề lớn hơn. Đáng chú ý là bạn có một cái gì đó thiết lập TERM=dumb. Những thứ khác không hoạt động đúng là lesslệnh cho biết bạn không có thiết bị đầu cuối đầy đủ chức năng.

Có vẻ như điều này thường xảy ra nhất do TATE được đặt thành một cái gì đó trong các biến môi trường Windows toàn cầu của bạn. Đối với tôi, vấn đề xuất hiện khi tôi cài đặt Strawberry Perl một số thông tin về vấn đề này là do lỗi msysgit cho vấn đề này cũng như một số giải pháp.

Giải pháp đầu tiên là sửa nó trong ~ / .bashrc của bạn bằng cách thêm:

export TERM=msys

Bạn có thể làm điều này từ lời nhắc Git Bash như vậy:

echo "export TERM=msys" >> ~/.bashrc

Các giải pháp khác, mà cuối cùng là những gì tôi đã làm vì tôi không quan tâm đến lý do dâu Perl cho thêm TERM=dumbđể thiết lập môi trường của tôi, là để đi và loại bỏ các TERM=dumbnhư đạo trong nhận xét này trên báo cáo msysgit lỗi .

Bảng điều khiển / Hệ thống / Nâng cao / Biến môi trường ... (hoặc tương tự, tùy thuộc vào phiên bản Windows của bạn) là nơi các biến môi trường dính được đặt trên Windows. Theo mặc định, TATE không được đặt. Nếu TERM được đặt ở đó, thì bạn (hoặc một trong những chương trình bạn đã cài đặt - ví dụ: Strawberry Perl) đã đặt nó. Xóa cài đặt đó và bạn sẽ ổn.

Tương tự như vậy nếu bạn sử dụng Strawberry Perl và quan tâm đến ứng dụng khách CPAN hoặc một cái gì đó tương tự, bạn có thể để TERM=dumbyên và sử dụng unset TERMtrong tệp ~ / .bashrc của mình, điều này sẽ có tác dụng tương tự như đặt một thuật ngữ rõ ràng như trên.

Tất nhiên, tất cả các giải pháp khác đều chính xác ở chỗ bạn có thể sử dụng git config --global core.editor $MYFAVORITEEDITORđể đảm bảo rằng Git sử dụng trình chỉnh sửa yêu thích của bạn khi cần khởi chạy một trình chỉnh sửa cho bạn.


rất nhiều Tôi đã có vấn đề này vì Dâu perl và nó đang khiến tôi phát điên! thx đã chỉ ra điều này
Dmitry Avtonomov


4

Tôi đã có PortableGit 1.6 hoạt động tốt, nhưng sau khi nâng cấp lên phiên bản Windows PortableGit 1.7, tôi gặp vấn đề. Một số lệnh Git mở ra Notepad ++. Exe fine, nhưng một số thì không, đặc biệt là Git rebase hoạt động khác đi.

Vấn đề là một số lệnh chạy quy trình cmd của Windows và một số sử dụng quy trình cmd Unix. Tôi muốn cung cấp các thuộc tính khởi động cho trình soạn thảo Notepad ++, vì vậy tôi cần phải có một tập lệnh tùy chỉnh. Giải pháp của tôi là thế này.

  1. Tạo một kịch bản để chạy một trình soạn thảo văn bản thích hợp. Kịch bản có vẻ lạ, nhưng nó xử lý cả biến thể Windows và Unix.

    c: /PortableGit/cmd/git-editor.bat

    #!/bin/sh
    # Open a new instance
    
    function doUnix() {
      "c:\program files\notepad++\notepad++.exe" -multiInst -nosession -notabbar $*
      exit
    }
    
    doUnix $*
    
    :WINCALL
    "c:\program files\notepad++\notepad++.exe" -multiInst -nosession -notabbar %*
    
  2. Đặt biến core.editor toàn cầu

    Tập lệnh đã được lưu vào thư mục git / cmd, vì vậy nó đã nằm trong đường dẫn gitconsole. Điều này là bắt buộc vì một đường dẫn đầy đủ có thể không hoạt động đúng.

    git config --global core.editor "git-editor.bat"
    

Bây giờ tôi có thể chạy các lệnh git commit -agit rebase -i . Hãy dùng thử nếu bạn gặp vấn đề trong công cụ Git Windows.


4

Tôi sử dụng Git trên nhiều nền tảng và tôi thích sử dụng cùng một cài đặt Git trên tất cả chúng. (Trên thực tế, tôi có tất cả các tệp cấu hình của mình dưới sự kiểm soát phát hành với Git và đặt một kho lưu trữ Git trên mỗi máy.) Giải pháp tôi đưa ra là:

Tôi đặt trình soạn thảo của mình thành giteditor

git config --global core.editor giteditor

Sau đó, tôi tạo ra một liên kết tượng trưng được gọi là giteditor trong PATH của tôi . (Tôi có một thư mục bin cá nhân , nhưng bất cứ nơi nào trong PATH đều hoạt động.) Liên kết đó trỏ đến trình soạn thảo lựa chọn hiện tại của tôi. Trên các máy khác nhau và các nền tảng khác nhau, tôi sử dụng các trình soạn thảo khác nhau, vì vậy điều này có nghĩa là tôi không phải thay đổi cấu hình Git phổ quát của mình ( .gitconfig ), chỉ liên kết mà giteditor trỏ tới.

Các liên kết tượng trưng được xử lý bởi mọi hệ điều hành mà tôi biết, mặc dù chúng có thể sử dụng các lệnh khác nhau. Đối với Linux, bạn sử dụng ln -s . Đối với Windows, bạn sử dụng mklink tích hợp cmd . Chúng có các cú pháp khác nhau (mà bạn nên tra cứu), nhưng tất cả đều hoạt động theo cùng một cách, thực sự.


Trên thực tế, tôi đã thử điều này trên Windows7 và nó không hoạt động từ msys git. Nó nóierror: cannot spawn giteditor: No such file or directory
DanielSank

4

Dựa trên đề xuất của VonC , điều này hiệu quả với tôi (khiến tôi phát điên):

git config --global core.editor "'C:/Program Files (x86)/Sublime Text 3/subl.exe' -wait"

Việc bỏ qua -waitcó thể gây ra sự cố, đặc biệt nếu bạn đang làm việc với Gerrit và thay đổi id phải được sao chép thủ công vào cuối thư cam kết của bạn.


4

Tôi cần phải thực hiện cả hai điều sau đây để Git khởi chạy Notepad ++ trong Windows:

  • Thêm phần sau vào .gitconfig:

    editor = 'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin
    
  • Sửa đổi lối tắt để khởi chạy trình vỏ Git Bash để chạy với tư cách quản trị viên, sau đó sử dụng phím đó để khởi chạy trình bao Git Bash. Tôi đã đoán rằng mục trình đơn ngữ cảnh "Git Bash here" không khởi chạy Notepad ++ với các quyền cần thiết.

Sau khi làm cả hai điều trên, nó đã làm việc.


3

Tôi sử dụng Cygwin trên Windows, vì vậy tôi sử dụng:

export EDITOR="emacs -nw"

Cái -nwnày là cho no-windows, tức là bảo Emacs đừng thử và sử dụng X Window .

Các tổ hợp phím Emacs không hoạt động đối với tôi từ trình bao Windows, vì vậy tôi chỉ sử dụng phần này từ trình bao Cygwin ... ( khuyên dùng rxvt .)


3

Đây là thiết lập của tôi để sử dụng Geany làm trình chỉnh sửa cho Git:

git config --global core.editor C:/path/to/geany.bat

với nội dung sau trong geany.bat:

#!/bin/sh
"C:\Program Files\Geany\bin\Geany.exe" --new-instance "$*"

Nó hoạt động trong cả bảng điều khiển DOS và msysgit.


2
VonC đã trả lời về notepad ++, câu trả lời của tôi là dành cho Geany?
CharlesB

2

Có vẻ như Git sẽ không tìm thấy trình soạn thảo nếu có khoảng trống trong đường dẫn. Vì vậy, bạn sẽ phải đặt tệp bó được đề cập trong câu trả lời của Patrick vào một đường dẫn không phải khoảng trắng.


3
Định dạng này hoạt động tốt đối với các đường dẫn có khoảng trắng: git config --global core.editor "\" c: \ Program Files \ textpad 5 \ textpad.exe \ "" vì vậy có thể là thực tế đối với bạn để tránh tạo tệp bó
Carl

2

Tôi đã gặp khó khăn khi Git hợp tác với Wordman , Komodo Chỉnh sửa và khá nhiều trình soạn thảo khác tôi cung cấp. Hầu hết mở để chỉnh sửa, nhưng rõ ràng Git không chờ lưu / đóng xảy ra.

Như một cái nạng, tôi vừa mới làm

git commit -m "Fixed the LoadAll method"

để giữ cho mọi thứ di chuyển. Nó có xu hướng giữ các thông điệp cam kết của tôi ngắn hơn một chút so với lẽ ra, nhưng rõ ràng có một số việc phải làm trên phiên bản Windows của Git.

GitGUI cũng không tệ. Nó cần một chút định hướng, nhưng sau đó, nó hoạt động khá tốt.


2

Tôi thích sử dụng Emacs. Bắt nó thiết lập có thể là một chút khó khăn.

  1. Tải xuống Emacs và giải nén nó ở đâu đó như thế nào c:\emacs.
  2. Chạy đi c:\emacs\bin\addpm.exe. Bạn cần nhấp chuột phải và "Chạy với tư cách Quản trị viên" nếu bạn đang sử dụng Windows Vista trở lên. Điều này sẽ đặt các thực thi trong đường dẫn của bạn.
  3. Thêm (server-start)một nơi nào đó trong .emacstập tin của bạn . Xem Câu hỏi thường gặp về Emacs Windows để được tư vấn về nơi đặt .emacstệp của bạn .
  4. git config --global core.editor emacsclientw

Git hiện sẽ mở các tệp trong quy trình Emacs hiện có. Bạn sẽ phải chạy quy trình hiện có bằng tay từ c:\emacs\bin\runemacs.exe.


1

Tôi đã quản lý để làm cho phiên bản môi trường hoạt động bằng cách đặt biến EDITOR bằng dấu ngoặc kép và /:

EDITOR="c:/Program Files (x86)/Notepad++/notepad++.exe"

1

Tôi đã có cùng một vấn đề và tìm thấy một giải pháp khác nhau. Tôi đã nhận được

error: There was a problem with the editor 'ec'

Tôi đã có VISUAL=ecvà một tệp bó được gọi ec.battrên đường dẫn chứa một dòng:

c:\emacs\emacs-23.1\bin\emacsclient.exe %*

Điều này cho phép tôi chỉnh sửa các tệp từ dòng lệnh ec <filename>và có VISUALbộ có nghĩa là hầu hết các chương trình unixy cũng chọn nó. Git dường như để tìm kiếm con đường khác nhau để các lệnh khác của tôi mặc dù - khi tôi nhìn vào một git committrong Process Monitor tôi thấy nó trông trong mỗi thư mục trên con đường cho ecvà cho ec.exe, nhưng không phải cho ec.bat. Tôi đã thêm một biến môi trường khác ( GIT_EDITOR=ec.bat) và tất cả đều ổn.


1

Tôi đang sử dụng GitHub cho Windows, đây là một tùy chọn hình ảnh đẹp. Nhưng tôi cũng thích dòng lệnh hơn, vì vậy để làm cho nó hoạt động khi tôi mở một kho lưu trữ trong trình bao Git, tôi chỉ cần đặt như sau:

git config --global core.editor vim

mà hoạt động tuyệt vời.



1

Tôi tìm thấy một giải pháp đẹp đơn giản được đăng ở đây - mặc dù có thể có một lỗi trong đường dẫn mà bạn phải sao chép qua tệp "subl" do tác giả đưa ra.

Tôi đang chạy Windows 7 x64 và tôi phải đặt tệp "subl" vào /Git/cmd/ thư mục để làm cho nó hoạt động.

Nó hoạt động như một sự quyến rũ, mặc dù.


1

Nguyên tử và Windows 10

  1. Tôi nhấp chuột phải vào biểu tượng Atom ở màn hình nền và nhấp vào thuộc tính.
  2. Sao chép đường dẫn vị trí "Bắt đầu trong"
  3. Nhìn qua đó với Windows Explorer và tìm thấy "atom.exe".
  4. Tôi đã gõ cái này trong Git Bash:

    git config --global core.editor C:/Users/YOURNAMEUSER/AppData/Local/atom/app-1.7.4/atom.exe"
    

Lưu ý: Tôi đã thay đổi tất cả \cho /. Tôi đã tạo một .bashrc tại thư mục chính của mình và sử dụng /để đặt thư mục chính của tôi và nó hoạt động, vì vậy tôi giả sử /sẽ là cách để đi.


vui lòng kiểm tra URL này sẽ hữu ích để nâng cao chất lượng nội dung của bạn
Willie Cheng

@willie Cảm ơn bạn, tôi đã định dạng văn bản và thêm một số thẻ. Hy vọng rằng sẽ cải thiện nó một chút.
Jonathan Ramos

0

Đây là một giải pháp với Cygwin:

#!/bin/dash -e
if [ "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=
fi
Notepad2 ${k+"$k"}
  1. Nếu không có con đường, không có con đường

  2. Nếu đường dẫn trống, hãy chuyển đường dẫn trống

  3. Nếu đường dẫn không trống, chuyển đổi sang định dạng Windows.

Sau đó, tôi đặt các biến này:

export EDITOR=notepad2.sh
export GIT_EDITOR='dash /usr/local/bin/notepad2.sh'
  1. EDITOR cho phép tập lệnh hoạt động với Git

  2. GIT_EDITOR cho phép tập lệnh hoạt động với các lệnh Hub

Nguồn


0

Điều này làm việc với tôi bằng Cygwin và TextPad 6 (EDIT: nó cũng hoạt động với TextPad 5 miễn là bạn thực hiện thay đổi rõ ràng cho tập lệnh) và có lẽ mô hình cũng có thể được sử dụng cho các trình soạn thảo khác:

Tập tin ~/.gitconfig:

[core]
    editor = ~/script/textpad.sh

Tập tin ~/script/textpad.sh:

#!/bin/bash

APP_PATH=`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`
FILE_PATH=`cygpath -w $1`

"$APP_PATH" -m "$FILE_PATH"

Điều này một lót cũng hoạt động:

Tệp ~/script/textpad.sh(tùy chọn 2):

"`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`" -m "`cygpath -w $1`"

0

Điều này làm việc cho tôi:

  1. Thêm thư mục chứa tệp thực thi của trình soạn thảo vào biến PATH của bạn . (Ví dụ: "C: \ Chương trình tập tin \ Văn bản tuyệt vời 3 \" )
  2. Khởi động lại máy tính của bạn.
  3. Thay đổi biến Git toàn cầu core.editor thành tên của trình soạn thảo thực thi mà không cần phần mở rộng '.exe' (ví dụ: git config --global core.editor sublime lòng)

Đó là nó!

LƯU Ý: Sublime Text 3 là trình soạn thảo tôi sử dụng cho ví dụ này.


Khi được cấu hình theo cách này, Sublime Text 3 có mở nhiều phiên bản hay xử lý thực tế là git cần nó để đóng để báo hiệu kết thúc chỉnh sửa không?
Thế giới James

1
Tôi nghĩ rằng nó sẽ mở một cửa sổ mới. Bạn có thể thêm công tắc --wait ( sublimetext.com/forum/viewtopic.php?f=3&t=3257 )
nikoskip
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.