2014-12-15 18 views
17

Phong cách của dự án của tôi không nói để cắt khoảng trắng ở cuối, nhưng điều này làm cho sự khác biệt rất, rất lộn xộn. Tôi muốn hợp nhất chúng với một cam kết trước khi tôi thực hiện sửa chữa thực tế.Chỉ thêm các thay đổi khoảng trắng?

này liên quan chặt chẽ đến Add only non-whitespace changes, nhưng đó là yêu cầu hoàn toàn trái ngược:

Có cách nào để thêm chỉ thay đổi khoảng trắng vào vùng dàn?

Trả lời

23

Bạn có thể thử "lừa" như sau:

git add -A 
git diff --cached -w | git apply --cached -R 

này về cơ bản cho biết thêm tất cả mọi thứ để chỉ mục, sau đó unstages tất cả những thay đổi đó ảnh hưởng đến hơn khoảng trắng.

+1

Có liên quan, để tạo bí danh git: http://stackoverflow.com/a/19525426/1443496. Nó không xuất hiện có bất kỳ thủ thuật thông minh để cho phép đường ống trong một bí danh, vì vậy bạn phải trì hoãn một vỏ. –

+0

@SeanAllred cảm ơn tôi đã đọc sai câu hỏi –

+0

Điều này có hành vi hơi lạ khi tập tin chuẩn hóa trước có hai dòng mới ở đuôi (nơi bình thường hóa cắt tỉa này thành một). –

2

đây là một giải pháp bash mà làm việc cho tôi

for fname in $(git diff --name-only --diff-filter=ACMR --full-index HEAD) 
do 
    diff=$(git diff -w --ignore-blank-lines --exit-code $fname) 
    if [ $? -eq 0 ]; then 
     echo "only whitespace diff on $fname ! adding to git..." 
     git add $fname 
    else 
     echo "diff on $fname!" 
    fi 
done 
+0

Chào mừng bạn đến với SO! :) –

1

tôi phải kết hợp và sửa đổi Tobias' và câu trả lời nneonneo của cam kết các khoảng trắng của nhiều file với diffs lớn. Hãy chắc chắn để chạy điều này từ thư mục gốc của kho lưu trữ của bạn.

git add -A 
for FILE_NAME in $(git --no-pager diff --name-only --diff-filter=ACMR --full-index HEAD) 
do 
    git --no-pager diff --cached -w $FILE_NAME | git apply --cached -R 
done 

git --no-pager ngăn cuộn mặc định mà git sử dụng để hiển thị lượng lớn nội dung. Vòng lặp --name-only cho phép lệnh hoạt động trên nhiều tệp.

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