Звичайно, я роблю саме це час від часу, використовуючи
git update-index --assume-unchanged [<file> ...]
Щоб скасувати та почати відстеження ще раз (якщо ви забули, які файли не було вилучено, див. Це питання ):
git update-index --no-assume-unchanged [<file> ...]
Відповідна документація :
- [no-] припустити-не
змінити Коли вказаний цей прапор, імена об'єктів, записані для шляхів, не оновлюються. Натомість ця опція встановлює / знімає біт "припустити незмінний" для шляхів. Коли біт "припустити незмінний" увімкнено, користувач обіцяє не змінювати файл і дозволяє Git припускати, що робочий файл дерева відповідає тому, що записано в індексі. Якщо ви хочете змінити файл робочого дерева, вам потрібно зняти біт, щоб повідомити Git. Іноді це корисно при роботі з великим проектом у файловій системі, що має дуже повільний lstat(2)
системний виклик (наприклад, cifs).
Git не вдасться (витончено) у випадку, якщо йому потрібно змінити цей файл в індексі, наприклад, при об'єднанні у коміт; таким чином, у випадку, якщо припущений-не відслідкований файл буде змінений вище, потрібно буде обробити ситуацію вручну.
Якщо в цьому випадку вийти з ладу, це означає, що якщо ви зробите якісь зміни до цього файлу (законні зміни тощо), коли ви здійснюєте витягнення, воно скаже:
$ git pull
…
From https://github.com/x/y
72a914a..106a261 master -> origin/master
Updating 72a914a..106a261
error: Your local changes to the following files would be overwritten by merge:
filename.ext
і відмовиться від злиття.
Після цього ви можете подолати це, скасувавши місцеві зміни, ось один із способів:
$ git checkout filename.ext
потім знову потягніть і повторно модифікуйте свій локальний файл, або його можна встановити, –no-assume-unchanged
і ви можете зробити звичайний приховування та злиття тощо у цьому пункті.