Як ігнорувати файли, що знаходяться у сховищі?


93

У мене є файл (config.php), який вже зафіксовано у сховищі Git, але я хочу ігнорувати локально, тобто хочу, щоб цей файл залишався у сховищі, але змусив Git ігнорувати будь-які зміни до нього.

Я поміщаю файл у .gitignore, але він все ще позначається як змінений, і Git все ще намагається внести зміни до нього, кожного разу, коли я щось роблю. Будь-яка ідея, чого я втрачаю чи роблю не так?


будь-ласка, додайте ваш .gitignore-файл - таким чином ми можемо побачити будь-які проблеми щодо нього.
Ларс,

Відповіді:


189

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

git rm --cached config.php

Якщо ви просто хочете ігнорувати його локально, ви також можете зробити його ігноруванням за допомогою git-статусу:

git update-index --assume-unchanged config.php

1
Добре, дякую ! Якщо я об'єднаю свою гілку з іншою, чи може цей файл мати деякі проблеми?
prcaen

1
@ Nimbus147: це не повинно бути проблемою, і будь-які зміни у цьому файлі все одно будуть ігноруватися (тобто не додаватися / фіксуватися).
VonC

якщо ви використовуєте SmartGit, для цього слід скористатися видаленням.
Omid-RH

1
Чи є спосіб примусити update-index --assume-unchangedвіддалену гілку? Я хотів би зберегти файл у репозиторії, але не міг би бути змінений іншими, але, крім того, недоступний для інсталяції.
p014k

1
@ p014k Не те, що я знаю. Для такого типу файлу я зберігаю його версію під іншою назвою, а потім використовую драйвер файлу вмісту, щоб автоматично генерувати потрібний файл (приватний), коли це потрібно. Наприклад, цей фільтр не буде активним на сцені. Див. Stackoverflow.com/a/54454356/6309 та пов’язане з ним посилання.
VonC

6

Ігнорувати зареєстрований файл:

git update-index --assume-unchanged file

Повернути

git update-index --no-assume-unchanged file

Повернути все

git update-index --really-refresh 

Корисно. Повернення одного файлу спрацьовувало, однак повернення всіх ні.
Адем Тепе

4

Якщо файл вже знаходиться у сховищі, а отже, і в області Індекс / Інтер'єр, то оновлення до .gitignore не змінить цю ситуацію - він буде продовжувати діяти.

Для видалення файлу з області Індекс / Інтерфейс використовуйте git rm <file>.


Що робити, якщо файл знаходиться у сховищі, але ще не індексовано? Я намагаюся ігнорувати файли * .log, але все одно бачу їх у розділі "Зміни". Я хочу ігнорувати всіх, що робити?
Сандра К

@SandraK, якщо в останньому коміті вже є репортаж цього файлу (шлях до файлу / ім'я), який вже був у репо, то він вважається відстеженим - "індекс" матиме цей файл у своїх записах, і тому statusбуде продовжувати повідомляти вам про ці зміни. Якщо ви хочете проігнорувати файли * .log, як для раніше позначених файлів, так і в даний час не відстежуваних файлів, тоді вам потрібно обидва git rm *.logфайли та оновити файл .gitignore. Спершу перевірте, чи насправді важливі деякі журнальні файли ... Легко забути той спеціальний ;-)
Філіп Оклі

-3

Після того, як файл перераховано у .gitignore, ви не зможете його змінити.

Таким чином, ви можете видалити файл зі списку в одному коміті, змінити наступний, а потім повторно додати файл до списку ігнорувань у 3-му коміті після цього.

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


1
" Коли файл перераховано у .gitignore, ви не можете його змінити " - можете пояснити, що ви маєте на увазі? У мене багато файлів у багатьох моїх .gitignore, і я постійно змінюю ці файли! Це перший раз, я чую, як хтось каже, що як тільки я додаю файл .gitignore, я не можу його змінити.
трейдер

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