Как сказал Натан , очистка этих файлов (отслеживание их) - разумный шаг.
Но если вы должны игнорировать отслеживаемые файлы (что не является родным способом Git, когда дело доходит до игнорирования файлов: Git игнорирует только неотслеживаемые файлы), вы можете настроить процесс, копирующий содержимое файлов вы хотите игнорировать и восстанавливать при коммите.
Первоначально я полагал, что нечеткий / чистый процесс , то есть драйвер фильтра gitattributes мог бы добиться цели:
, где:
- процесс smudge создаст копию этих файлов (при обновлении рабочего дерева)
- некоторые модификации происходят во время сборки
- шаг очистки (во время фиксации) сотрет содержимое файлов с копией, сделанной на шаге 1.
НО, как указано в этом посте , это означало бы злоупотребление этим без сохранения файлом содержимого путем добавления контекста с состоянием (то есть полного пути к имени файл размазан / очищен).
И это явно запрещено Дж. К. Хамано:
Хотя я изначально думал об интерполяции "%P
" с путем, в итоге я решил отказаться от него, чтобы отговорить людей от использования фильтра для преобразования с отслеживанием состояния, который меняет результаты в зависимости от времени, пути, коммита, ветви и прочего.
и даже Линус Торвальдс в то время имел некоторые оговорки по поводу всего механизма:
Я должен сказать, что я, очевидно, не большой поклонник игр, но различия очень чистые.
Они на самом деле полезны? Я не знаю. Я немного волнуюсь по поводу того, что это значит для любого реального пользователя этой функции, но я должен признать, что был очарован чистой реализацией.
Я подозреваю, что это вызывает некоторые жалобы с нашей спины, но я также подозреваю, что люди на самом деле в конечном итоге напортачат себе на что-то подобное, а затем обвинят нас и причинят огромную боль, когда мы поддержали это, и людям нужна «расширенная семантика», которая больше не является чистой.
Но я не уверен, насколько правдивым является аргумент, который на самом деле. Я действительно верю в философию «дай им веревку». Я думаю, что вы, вероятно, можете по-королевски ввернуть себя в это, но эй, любой, кто делает это, только сам виноват
Таким образом, правильное место для добавления какого-либо механизма сохранения / восстановления (и эффективного игнорирования любых изменений в наборе отслеживаемых файлов в Git) было бы в хуках
post-checkout
: вызывается при запуске git checkout после обновления рабочего дерева. Там вы можете запустить скрипт, который собирает все файлы, чтобы их игнорировать, и сохраняет их где-то.
pre-commit
: вы можете запустить второй сценарий, который восстановит содержимое этих файлов, прежде чем получить предлагаемое сообщение журнала фиксации и выполнить фиксацию.