Как я могу настроить Git, чтобы игнорировать тривиальные изменения (например, метку времени) в автоматически сгенерированном коде? - PullRequest
0 голосов
/ 15 февраля 2019

Я работаю с инструментом, который автоматически генерирует большое количество кода C.Инструмент генерирует код для пакета файлов .c и .h при каждом запуске.По какой-то причине инструмент недостаточно умен, чтобы распознавать, когда в файлах нет существенных изменений, поэтому во многих случаях он просто обновляет отметку времени в комментариях вверху каждого файла.В противном случае файл остается неизменным.

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

Есть ли способ настроить Git так, чтобы он мог игнорировать несущественные изменения, такие как отметка времени взаголовок комментария?Или как я мог бы иначе справиться с этой ситуацией?

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Я нашел способ решения проблемы тривиальных изменений с помощью Beyond Compare .Я опишу этот процесс, поскольку он касается игнорирования обновлений меток времени в автоматически сгенерированных файлах C, но его можно легко адаптировать к другим ситуациям и языкам:

  1. Сконфигурировать Beyond Compare в качестве Git difftool.См. здесь для получения подробной информации о том, как это сделать.
  2. (Необязательно, но полезно) Добавьте псевдоним Git для команды git difftool --dir-diff --no-symlinks (например, dtd).
  3. Сделайте некоторые изменения (например, автоматически сгенерируйте ваши файлы) и запустите git dtd, чтобы сделать каталог diff.Beyond Compare откроет и покажет вам сравнение папок до / после ваших изменений.
  4. Откройте окно сеанса Text Compare для одного из ваших измененных файлов.Откройте меню Инструменты и выберите Форматы файлов .
  5. Откройте вкладку Грамматика , удалите элемент грамматики "Комментарии".
  6. Добавьте новый элемент грамматики и дайте ему осмысленное имя, например «Комментарий времени генерации».
  7. Для категории выберите элемент грамматики «С разделителями».В поле «Текст из» введите текст, который вы хотите игнорировать.Например, если отметка времени в автоматически сгенерированном коде начинается со строки * Generation Time:, введите ее в поле «Текст из».Установите флажок «Остановить в конце строки».
  8. Нажмите кнопку «Сохранить» и вернитесь в окно сеанса сравнения текста.
  9. Откройте меню Сессия ивыберите Настройки сеанса .Откройте вкладку Importance .
  10. Найдите новый элемент грамматики (например, «Комментарий времени генерации») и снимите его.Это скажет Beyond Compare рассматривать его как несущественное изменение.
  11. Откройте вкладку Сравнение , выберите Сравнение на основе правил .
  12. ИзменитеВ раскрывающемся списке внизу диалогового окна введите Обновить значения по умолчанию для сеанса .
  13. Закройте Beyond Compare, а затем снова откройте его, введя команду git dtd.
  14. Всефайлы в сеансе сравнения папок, которые не содержат ничего, кроме обновления метки времени, будут показаны с незначительными различиями.Если вы хотите полностью скрыть файлы с незначительными различиями, отключите Игнорировать незначительные различия в меню Просмотр .

Ссылка: https://www.scootersoftware.com/support.php?zz=kb_unimportantv3

0 голосов
/ 15 февраля 2019

Есть ли способ настроить Git так, чтобы он мог игнорировать несущественные изменения, такие как отметка времени в комментариях заголовка?Или как я мог бы иначе справиться с этой ситуацией?

Да;это цель фильтра .

Возможно, вы уже знакомы с понятием git о "чистых" и "грязных" фильтрах, вот как он обрабатывает преобразование конца строки.Когда вы работаете на компьютере с Windows и в вашем рабочем каталоге есть окончания строк в стиле Windows, вы можете установить .gitattribute подобно * text=auto, указывающее, что вы хотите, чтобы файлы были добавлены в хранилище с «нормализованными» окончаниями строк в стиле Unix.В этом случае файлы будут иметь «чистый» фильтр, применяемый для преобразования концов строк \r\n в окончания строк в стиле \n.Точно так же файлы будут «смазаны» при оформлении заказа для преобразования с \n в \r\n на диске.

Вы можете создать свои собственные фильтры очистки и удаления, чтобы удалять (или добавлять) данные при переводе междурабочий каталог и репозиторий.Для этих файлов вы можете добавить атрибут:

*.c filter=autogen

А затем вы можете настроить свой автогенный фильтр, с командами для запуска в «чистый» (в хранилище) и «smudge» (в рабочий каталог) направления.

git config --global filter.autogen.clean remove_metadata
git config --global filter.autogen.smudge cat

(Использование фильтров является «шлейфом» в отношении фильтров).

Книга Pro Git содержит более подробные примеры созданияваши собственные фильтры.

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