Git -add только изменения пробелов?

Стиль моего проекта говорит, чтобы обрезать конечные пробелы, но это делает различия очень и очень грязными. Мне нравится консолидировать их до одного фиксации до того, как я зафиксирую фактическое исправление.

Это тесно связано с добавлять только изменения без пробелов, но он задает абсолютно противоположное:

Есть ли способ добавить только изменения пробелов в промежуточную область?

Ответы

Ответ 1

Вы можете попробовать следующий "трюк":

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

Это в основном добавляет все к индексу, а затем отменяет все изменения, которые затрагивают больше, чем пробелы.

Ответ 2

вот решение bash, которое сработало для меня

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

Ответ 3

Мне пришлось объединить и изменить ответ Тобиаса и nneonneo, чтобы зафиксировать пробел в нескольких файлах с большими различиями. Обязательно запустите это из корня вашего репозитория.

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 предотвращает прокрутку по умолчанию, используемую git для отображения большого количества содержимого. Цикл --name-only позволяет команде работать с несколькими файлами.