Пользовательский фильтр для различения, когда два файла равны - PullRequest
0 голосов
/ 10 апреля 2020

В моем репозитории есть несколько json файлов, которые я хочу добавить к git. Эти json сделаны: некоторыми полями, которые меняются каждый день, например, самой последней отметкой времени, и полем 'content', которое является истинным содержанием json.

Я хочу сказать git что если json обновлено в поле содержимого, оно должно рассматриваться как «измененное», в противном случае, даже если другие поля изменяются, оно должно рассматриваться как «обновленное».

Я читал о gitattributes и я создали программу-фильтр textconv, которая выводит только поле содержимого для сравнения. Это хорошо работает для команды "diff", однако "git status" по-прежнему видит его как "модифицированный".

Как это можно сделать?

1 Ответ

0 голосов
/ 11 апреля 2020

git status увидит файл как измененный, если он вообще изменится, даже если эти изменения не имеют отношения к вам. Это потому, что этот алгоритм дешев и его легко вычислить из метаданных файловой системы, в то время как предлагаемый вами алгоритм будет требовать прочтения всего файла каждый раз, что очень дорого, если файлы большие или их много.

Вы можете использовать фильтр smudge / clean (см. Страницу руководства gitattributes(5)), который удалит все, кроме поля content из JSON на clean, и добавит эти дополнительные поля обратно на smudge , Однако, если вы сделаете это, git status все равно увидит файлы как измененные, если они вообще изменятся, даже таким образом, что они будут очищены от одного и того же. Вам нужно будет сделать git add, чтобы файл больше не казался измененным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...