2010-05-07 25 views
14

Tôi đã có thiết lập vim như công cụ diff bên ngoài của tôi:Làm thế nào để bạn hủy bỏ một khác biệt git bên ngoài?

[diff] 
     external = git_diff_wrapper 

#!/bin/sh 

vimdiff "$2" "$5" 

Nói rằng tôi có 300 file đã được sửa đổi; thông qua bash, tôi gõ "git diff". Nó khởi động 300 vimdiffs tuần tự, làm thế nào để tôi hủy bỏ nó?

+0

Đây là vấn đề tuyệt vời để có :) – vfclists

Trả lời

4

Nếu dừng quy trình là không đủ, hãy tự hủy vỏ (trong đó bạn đã khởi chạy git diff) có thể hiệu quả hơn.

http://trick.vanstaveren.us/wp/wp-uploads/2009/06/close-this-window.png


Xem thêm Git Diff with Vimdiff

VimDiff

Không phải là sẵn sàng để đi tốc độ đầy đủ vào sử dụng vimdiff (Tôi chỉ mới đến nó), tôi đặt sau trong 'gitvimdiff'.
Kết quả là tôi có thể sử dụng vimdiff để xem git-diff bằng cách chạy ‘gitvimdiff‘, nhưng cách gọi bình thường ‘git diff’ hoạt động như tôi đã từng sử dụng.

#!/bin/sh 

if [ -n "${GIT_EXTERNAL_DIFF}" ]; then 
[ "${GIT_EXTERNAL_DIFF}" = "${0}" ] || 
{ echo “GIT_EXTERNAL_DIFF set to unexpected value” 1>&2; exit 1; } 
exec vimdiff “$2″ “$5″ 
else 
GIT_EXTERNAL_DIFF=”${0}” exec git –no-pager diff “[email protected]” 
fi 

Nhưng nếu bạn vẫn muốn sửa đổi git diff, một git status có thể giúp đỡ trước khi khởi chạy nó;)

Và bạn có thể thiết lập một chức năng để có được những git diff hành vi cũ nếu cần thiết:

Tôi vẫn có quyền truy cập vào hành vi git diff mặc định với cờ --no-ext-diff. Dưới đây là một chức năng tôi đặt trong file cấu hình bash của tôi:

function git_diff() { 
    git diff --no-ext-diff -w "[email protected]" | vim -R - 
} 
  • --no-ext-diff: để ngăn chặn sử dụng vimdiff
  • -w: bỏ qua khoảng trắng
  • -R: để bắt đầu vim trong read-only chế độ
  • -: để làm vim hoạt động như máy nhắn tin
+0

các gitvimdiff bí danh là một ý tưởng tốt đẹp. – v2k

+1

Ôi trời, tôi gần như đã trải qua hàng triệu 'ctrl + q' nếu tôi chưa đọc nó trước. Cảm ơn một tấn !! – shriek

2

Chỉ cần giết quy trình gốc. Mở một thiết bị đầu cuối, sử dụng pstree -p để tìm ID quá trình (PID) của quy trình git, sau đó là kill -9. Trên hệ thống của tôi, trông giống như sau:

$ pstree -p 
... 
     ├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332) 
... 
$ kill -9 10331 

Không chính xác thanh lịch nhưng hoạt động. Trên hệ thống của bạn, pager có thể sẽ khác, nhưng nó sẽ có git làm quy trình gốc.

17

Sử dụng: cquit để thoát khỏi vim bằng mã lỗi. Git sẽ phát hiện lỗi và ngừng mở các vimdiff mới.Có thể bạn sẽ muốn tạo một ánh xạ cho nó trong của bạn .vimrc:

if &diff 
    map Q :cquit<CR> 
endif 

Sau đó, chỉ cần nhấn Q để sớm hủy bỏ một lệnh git diff.

Để cho tiện làm việc bạn phải sửa gitconfig của bạn:

git config --global difftool.trustExitCode true 
git config --global mergetool.trustExitCode true 
+2

Đây phải là câu trả lời được chấp nhận vì nó trả lời trực tiếp câu hỏi thay vì cung cấp giải pháp thay thế. Ý tưởng tuyệt vời cho bản đồ 'if & diff' nữa. Cảm ơn tất cả xung quanh! – pabo

+1

nó không hoạt động đối với tôi, cách cấu hình? – songhir

+0

Điều này không hiệu quả đối với tôi. Tôi không đề cập đến việc lập bản đồ mà là: lệnh cquit. Vim thoát đúng nhưng Git vẫn tiếp tục với quá trình phân biệt. – kai

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