как мне сделать коммит без влияния на мерзавца
Можно чертовски близко, я думаю, что компенсация за изменения руки не будет стоить боли, но игнорировать автоматическое переформатирование изменений очень просто: git blame
применяет любые преобразования текста, которые вы укажете, к содержимому файла, поэтому попросите его выполнить предварительный анализ с вашим линтером в полностью автоматическом режиме, прежде чем он проверит результаты на предмет достоверных изменений.
Вот тестовый пример, в котором «стиль линтер» просто добавляет «REFORMATTED» в качестве первого слова второй строки.и git получает указание считать его невиновным, запустив (идемпотентную версию) его как преобразование текста.
cd в каталог для мусора и скопировать его в файл temp
внутри,
find ! -name temp -delete; git init
doit() { eval "$@"; shift $(($#-1)); git add .; git commit -m "$*"; }
(
doit '>file'
doit echo '>>file' line1
doit echo '>>file' line2
doit '>B'
doit sed -i "'s/line2/REFORMATTED line2/'" file '#' 'REFORMATTED line2'
doit echo '>>file' line3
) >/dev/null
set -x
git log --oneline --graph --decorate
git blame file
git config diff.REF.textconv 'awk '\''NR==2 && $1!="REFORMATTED" {$1="REFORMATTED "$1 }1'\'
mkdir .git/info
echo file diff=REF >.git/info/attributes
git blame file
затем сделайте sh temp
.Ваши метаданные изменятся из-за временных меток и идентификаторов, но в противном случае вы должны увидеть
$ sh temp
Initialized empty Git repository in /home/jthill/src/snips/test/.git/
+ git log --oneline --graph --decorate
* 282c142 (HEAD -> master) line3
* ee58923 REFORMATTED line2
* d8558d2 >B
* 6801a1d line2
* 030e551 line1
* f912c83 >file
+ git blame file
030e5517 (jthill 2019-02-23 18:41:36 -0800 1) line1
ee589239 (jthill 2019-02-23 18:41:36 -0800 2) REFORMATTED line2
282c142d (jthill 2019-02-23 18:41:36 -0800 3) line3
+ git config diff.REF.textconv 'awk '\''NR==2 && $1!="REFORMATTED" {$1="REFORMATTED "$1 }1'\'''
+ mkdir .git/info
+ echo file diff=REF
+ git blame file
030e5517 (jthill 2019-02-23 18:41:36 -0800 1) line1
6801a1d6 (jthill 2019-02-23 18:41:36 -0800 2) REFORMATTED line2
282c142d (jthill 2019-02-23 18:41:36 -0800 3) line3
... в частности, обратите внимание на изменение вины за строку 2.