2016-09-16 21 views
7

Tôi đang cắt bớt khoảng trắng từ các cam kết git sử dụng git diff-index --check --cached HEAD --. Tôi muốn thêm các bài kiểm tra Jest bằng cách sử dụng ảnh chụp nhanh, nhưng các tệp ảnh chụp nhanh bao gồm khoảng trắng và các kiểm tra của tôi sẽ luôn thất bại nếu tôi xóa nó. Vì vậy, tôi muốn loại trừ các tệp *.js.snap khỏi kiểm tra khoảng trắng. Làm thế nào để tôi yêu cầu git loại trừ *.js.snap (hoặc, cách khác, **/__snapshots/*) các tệp từ git diff-index? Tôi đang sử dụng bash trên OSX.loại trừ ảnh chụp nhanh Jest khỏi kiểm tra khoảng trống git

Trong khi đó, tôi đang làm việc xung quanh vấn đề bằng cách thay đổi cam kết nối của tôi có tính tương tác:

# If there are whitespace errors, print the offending file names and fail. 
git diff-index --check --cached HEAD -- 
if [ $? -ne 0 ]; then 
    # Allows us to read user input below, assigns stdin to keyboard 
    exec < /dev/tty 

    while true; do 
     echo "Your commit introduces trailing whitespace. Are you sure you want to commit? y/n" 
     read yn 
     case $yn in 
      y) exit 0;; 
      n) exit 1;; 
     esac 
    done 
fi 

Trả lời

1

Như mentioned here, lập luận của con đường git diff-index là của mẫu glob-phong cách, giải thích bằng vỏ .

Vì vậy, đây là vấn đề về trình bao hơn vấn đề về lệnh git.

Xem ví dụ "How can I use inverse or negative wildcards when pattern matching in a unix/linux shell?"

Bạn có thể thử và kích hoạt shopt extglob, hoặc (đơn giản), làm một bài bước để kịch bản của bạn, tìm kiếm (với git status) cho bất kỳ tập tin sửa đổi với **/__snapshots/* đầy đủ của họ pathname, và hủy bỏ sửa đổi của họ (git checkout).

+0

Cảm ơn bạn đã dành thời gian trả lời. Tôi đã dành khá nhiều thời gian chơi với các ký tự đại diện âm và GLOBIGNORE, nhưng cả hai đều không hoạt động. Cả hai dường như chỉ hoạt động với các mẫu không bao gồm nhiều ký tự đại diện ('**/*'). – undefined

+0

Tôi vẫn sẽ trao cho bạn tiền thưởng vì tôi không thể tự mình tặng cho mình, không phải là bạn quan tâm đến danh tiếng vào thời điểm này! – undefined

+0

@undefined Cảm ơn bạn đã gửi phản hồi này và +1 cho câu trả lời của bạn. Tôi đã đề cập pathspec trước đây: http://stackoverflow.com/a/38931091/6309 và http://stackoverflow.com/a/35622183/6309, với các ví dụ trong http://stackoverflow.com/a/33462321/6309 – VonC

3

Git không có cách xác định đường dẫn để loại trừ, mặc dù nó kém tài liệu và dường như không được biết đến nhiều. Nó được biết đến như pathspec, và trong trường hợp này có thể được sử dụng như sau: '!'

git diff-index --check --cached HEAD -- ':!*.js.snap' . 

nơi : là nhân vật đặc biệt mà xác định rằng pathspec không chỉ là một con đường thông thường, và chỉ định rằng các tệp phù hợp với phần còn lại của đường dẫn phải được loại trừ khỏi danh sách các kết quả phù hợp.

Không đơn giản như là -X hoặc --exclude của Mercurial, nhưng ở đó.

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