Ігнорувати модифіковані (але не вчинені) файли в git?


182

Чи можу я сказати git ігнорувати файли, які модифікуються (видаляються), але їх не слід виконувати?

Ситуація полягає в тому, що у мене є підкаталог у репо, який містить речі, які мене зовсім не цікавлять, тому я видалив його, щоб запобігти його появі в автоматичних доповненнях тощо (в IDE).

Але тепер, якщо я додаю цю папку до .gitignore, просто нічого не змінюється, усі речі відображаються як видалені статусом git.

Чи є спосіб змусити git ігнорувати це будь-яким способом?

(Крім того, коли я використовую git-svn, чи можу я здійснити зміни до локального git і переконатися, що вони не передаються до repo svn?)


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

Відповіді:


274

ознайомтеся з довідковою сторінкою git-update-index-індексу та бітом --assume-unhange and related.

коли у мене є ваша проблема, я це роблю

git update-index --assume-unchanged dir-im-removing/

або певний файл

git update-index --assume-unchanged config/database.yml

3
Чи можете ви якось перерахувати всі свої ігноровані файли?
Zitrax

21
Ви можете отримати файли назадgit update-index --no-assume-unchanged config/database.yml
Денис Княжев

1
Дивіться відповідь Дейва Л нижче за новим рішенням без деяких недоліків --assume-unchanged.
Ben Challenor

2
Чи можна додати це до файлу конфігурації сховища, замість того, щоб виконувати цю команду вручну кожен раз?
Тім Боланд

1
Чи відображатиметься він як змінений для наступного вчинення? Я не хочу, щоб це вічно вважалося незмінним.
Пранів Нандан

41

Новіший і кращий варіант - це те, git update-index --skip-worktreeщо не буде втрачено під час жорсткого скидання або нової зміни в результаті потягу.

Перегляньте сторінку людини на веб-сторінці http://schacon.github.com/git/git-update-index.html

І порівняння на http://fallengamer.livejournal.com/93321.html


9
Одним недоліком слід зазначити, що після того, як модифікації файлу були приховані skip-worktree, пошук цих файлів стає дещо громіздким. Єдиний спосіб, про який я знаю, - це git ls-files -v |grep -v '^H'. Крім того, багато інструментів графічного інтерфейсу не знають про цю функцію і можуть спричинити смішні помилки, якщо, наприклад, checkoutне вдалося отримати "приховані" модифіковані файли.
sleske

Я ніколи не зміг зрозуміти жодного з файлів git doc. Тож це не дуже допоможе. (Кожен файл doc передбачає, що ви розумієте тонкощі всіх інших файлів doc!)
Скотт Біггс,

7

Використовуйте цей код

git update-index --assume-unchanged file-name

1
Дійсно цікаво. Мені потрібно використовувати паспорт у своєму проекті Maven, але я не хочу публікувати його у сховищі git, тому я розміщую його заповнювач без значення у локальних, властивостях, я ввожу його, потім вставляю пароль, але позначаю файл без змін із запропонованою командою. Тож пароль не публікується.
Стефано Скарпанті

6

Відстежені файли не можна ігнорувати, тому спочатку їх потрібно буде видалити з індексу. Додайте .gitignoreте, що ігнорує не потрібні каталоги, а потім видаліть їх та видаліть будь-які непотрібні git rm --cached.


1
Гм, я спробую це, але потім у мене всі файли перераховані як видалені. Чи повинен я зробити це, і кеш - призведе до того, що він не буде висунутий на пульт? Або я дістав що-небудь. неправильно? Найголовніше для мене - не пошкодження віддаленого (svn) репо.

1
Ви не можете вчинити нічого, що не починається у вашому індексі. git rm - кеширує все, що ви не хочете робити, потім додайте .gitignore файл локально, який має "*" у ньому. Тепер, скільки б ви не додавали, ви ніколи більше не побачите цих файлів у своєму індексі.
Джон Фемінелла

Ах, я думаю, я розумію - кешировано зараз .. Це лише видаляє речі з індексу, а робоче дерево залишає в спокої .. Я не впевнений, чи щось мені не вистачає, але AFAIS шукаю навпаки , видаляючи його з робочого дерева, не торкаючись покажчика .. Або я можу його якось використовувати для цього?

6

Я зазвичай роблю

git скринька

git що-небудь ще

застосувати git stash

git stash clear


10
fwiw ви також можете "git stash pop", щоб зробити ці останні два одразу (хоча "git stash clear" очистить усі записи сховища, якщо ви цього хочете).
Groxx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.