Есть ли способ заставить git commit --verbose показывать обновленную разницу при использовании хуков перед фиксацией?

Итак, в настоящее время я настраиваю привязку git pre-commit для линтинга моих файлов python с помощью iSort и python Black, проблема, с которой я сталкиваюсь, заключается в том, что когда я использую git commit --verbose, разница, которая отображается в редакторе фиксации, не Фактически учтены изменения в постановочных файлах.

Например, допустим, у меня есть файл Python, который выглядит так:

import re

from os import path

def x():
    v = re.compile(r"1")
    print(3, v)

def y(v=3):
    z = path.join("a", "b")
    thing = "a string"
    print(thing, z)

Основываясь на настроенных мною настройках iSort и black, мой сценарий предварительной фиксации изменит файл, чтобы он выглядел так:

import re
from os import path


def x():
    v = re.compile(r"1")
    print(3, v)


def y(v=3):
    z = path.join("a", "b")
    thing = "a string"
    print(thing, z)

К сожалению, в редакторе коммитов git все еще отображается неизмененный файл diff. Есть ли способ заставить редактор работать правильно?

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


person DJ SymBiotiX    schedule 07.02.2019    source источник
comment
Изменены ли файлы на этапе обработки перед фиксацией (git add)?   -  person phd    schedule 08.02.2019
comment
Да. После фиксации и просмотра файла изменения были внесены и зафиксированы.   -  person DJ SymBiotiX    schedule 08.02.2019


Ответы (1)


Вместо перехвата перед фиксацией попробуйте драйвер фильтра содержимого со сценарием smudge / clean, который может:

  • при оформлении заказа сделайте свой сценарий односторонним
  • при фиксации (или git diff) сделайте ваш скрипт другим способом

См. Пример здесь или ( для чистых) здесь

https://i.stack.imgur.com/tumAc.png
(изображение из " Настройка Git - атрибуты Git " из" Pro Git book"))

person VonC    schedule 08.02.2019
comment
Хм, хорошая идея. Сегодня утром я попытался реализовать решение для очистки / размазывания, но у меня все еще есть небольшая проблема. Теперь изменения и коммиты выглядят великолепно, потому что они делают то, что я хочу. Странно то, что локальный файл, похоже, вообще не изменен, но я ожидал, что он будет выглядеть так же, как то, что было зафиксировано. Я делаю что-то неправильно? Вот копия моего скрипта очистки / размазывания, который я использую pastebin.com/mCPg7rbE - person DJ SymBiotiX; 08.02.2019
comment
@DJSymBiotiX Цель состоит в том, чтобы сгенерировать частный локальный файл, а не изменять существующий файл. - person VonC; 08.02.2019
comment
хм, я думаю, это не совсем то, что я ищу, исходя из моего первоначального вопроса / проблемы. - person DJ SymBiotiX; 08.02.2019
comment
@DJSymBiotiX Вы можете изменить существующий файл, но вы должны убедиться, что ваши скрипты smudge / clean являются симметричными: изменения, добавленные одним, удаляются другим. Затем touch yourFile и git checkout -- ., чтобы повторно применить скрипт smudge. - person VonC; 08.02.2019
comment
Что ж, это кажется нелогичным. Вы не можете отменить функцию линтинга. - person DJ SymBiotiX; 08.02.2019
comment
Правильно, в вашем случае будет достаточно мазка. Нет необходимости отменять модификацию - person VonC; 08.02.2019