В git объект фиксации ссылается на объект дерева . Этот объект дерева затем ссылается на объекты BLOB-объектов . Каждый BLOB-объект (обычно) представляет собой файл в вашей рабочей копии.
Идентификатор коммита - это хеш объекта коммита, который содержит хэш объекта дерева, который сам содержит хэш всех BLOB-объектов.
Итак, чтобы сделать коммит, вы должны знать состояние всех BLOB-объектов в коммите . Фактически, фиксация - это моментальный снимок всей рабочей копии (технически индекс). Это означает, что вы не можете просто «игнорировать изменения вне dir X», потому что если вы это сделаете, ваш коммит создаст рабочую копию либо без этих файлов (если вы не включили их в объект дерева), либо с устаревшими копиями ( если вы проверите один раз, а затем предположите, что они не изменились, поместите устаревшие хеши в объект дерева).
Вот почему вы не можете просто проверить поддерево в git и игнорировать изменения вне его. Вот почему то, что вы просите (сделать коммит, даже не глядя на состояние других файлов), невозможно.
Тем не менее, я думаю, что если бы вы попробовали «мерзкий способ» делать вещи - клонировать один раз, а затем совершать многократные действия с этим одним клоном - вы бы быстро обнаружили, что это очень простой способ делать вещи.
Если это не удастся, вы можете сделать свои «активы» отдельным репозиторием (возможно, подмодулем git, они не требуют значительного «изменения рабочего процесса разработчиков», на самом деле). Тогда вам нужно только клонировать репозиторий «assets», чтобы совершать там коммиты.
Вы также можете просто отправить исправления на уже обновленный сервер и сделать так, чтобы он выполнял коммиты локально. Это не потребует клонирования репозитория, поскольку, конечно, на сервере должны быть последние изменения в других файлах (это источник, из которого вы извлекаете данные!).