Git: ігноруйте відслідковані файли


182

У мене є кілька відслідкованих файлів у сховищі, які автоматично змінюються при складанні коду. Я не хочу знімати їх, я просто не хочу, щоб вони відображалися як змінені, і я не хочу, щоб вони ставали поетапно, коли я додаю git.

Чи можливо це?



5
Якщо ці файли автоматично генеруються збіркою, їх не слід відслідковувати в git.
кодування

Ось короткий підручник з gitignore, який може бути вам корисним: learningpassion.wordpress.com/2016/06/17/…
жокер

Відповіді:


283

Звичайно.

git update-index --assume-unchanged [<file> ...]

Щоб скасувати та почати відстеження знову:

git update-index --no-assume-unchanged [<file> ...]

3
Що відбувається з файлами в такому стані, якщо я втягую в них модифікації?
haymansfield

2
На сторінці довідки для команди @haymansfield написано наступнеGit will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
Пархам

3
Будь-який спосіб подати заявку --assume-unchangedпісля клонування? Таким чином, щоб усі користувачі мали файли, але не бачили локальних змін у них у diff.
Готьє

10
@Tyler - ні, коли файл відслідковується за допомогою git, він завжди буде відслідковуватися, навіть якщо цей файл з’являється у .gitignore. Мій випадок використання - це щось на кшталт "ось базовий шаблон файлу, де ви зберігаєте свої облікові дані, тепер ніколи не вводите його"
Джон V

5
@watbywbarif У мене команда git update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel))встановлена ​​як псевдонім git. Кожного разу, коли я підозрюю, що це деякі з цих шенагіган, я просто роблю це.
Філіп Карфін

6

Інший підхід (з видаленої зараз відповіді Сет Робертсон, але я вважаю, що це корисно, тому що його відроджують) - це підтримувати "відстежений" файл шаблону, а потім мати локальну незавершену його версію, наприклад: "config.sample.ini" або " config.ini.template "див. https://gist.github.com/canton7/1423106 для повного прикладу.

Тоді не виникне жодних занепокоєнь, якщо файл буде змінено в межах git і т.д.


5

Ще одне рішення з використанням атрибутів git та% f у команді filter:

git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude

16
Чи можете ви детальніше розповісти про те, що це означає і що це робить випадково?
rogerdpack

до цього додається фільтр для файлу, який читає вміст з файлу ".orig", який має оригінальний текст
koct9i
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.