Игнорировать измененные (но не зафиксированные) файлы в git?

182

Могу ли я сказать git игнорировать файлы, которые были изменены (удалены), но не должны быть зафиксированы?

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

Но теперь, если я добавлю эту папку в .gitignore, просто ничего не изменится, все содержимое будет показано как удаленное по состоянию git.

Есть ли способ заставить git игнорировать это в любом случае?

(В качестве альтернативы, поскольку я использую git-svn, могу ли я зафиксировать изменения в локальном git и убедиться, что они не переданы в репозиторий svn?)

Сэм
источник
вместо того, чтобы просто пометить их как неизмененные в индексе репо, вы можете полностью удалить их из индекса. Таким образом, хотя у вас все еще будет файл в вашем рабочем каталоге, индекс репо может быть полностью удален, и git даже не увидит, что он вообще существует. Пожалуйста, смотрите ссылку в моем ответе ниже.
MaurerPower

Ответы:

274

проверьте страницу руководства git-update-index и бит --assume-неизмененный и связанный с ним.

когда у меня есть твоя проблема, я делаю это

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

или конкретный файл

git update-index --assume-unchanged config/database.yml
csmosx
источник
3
Можете ли вы перечислить все ваши игнорируемые файлы как-нибудь?
Цитракс
21
Вы можете получить файлы обратноgit update-index --no-assume-unchanged config/database.yml
Денис Княжев
1
Смотрите ответ Дэйва Л. ниже для более нового решения без некоторых недостатков --assume-unchanged.
Бен Чалленор
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'. Кроме того, многие инструменты GUI не знают об этой функции и могут выдавать забавные ошибки, например, checkoutиз-за «скрытых» измененных файлов.
слеске
Я никогда не мог понять ЛЮБОЙ из файлов git doc. Так что это не сильно поможет. (Каждый файл документа предполагает, что вы понимаете тонкости каждого другого файла документа!)
Скотт Биггс
7

Используйте этот код

git update-index --assume-unchanged file-name
Суджирадж Р
источник
1
Очень интересно. Я должен использовать пароль в своем проекте maven, но я не хочу публиковать его в репозитории git, поэтому я помещаю для него местозаполнитель без значения в свойствах local, свойства, я фиксирую его, затем вставляю пароль, но отмечаю файл без изменений с вашей предложенной командой. Так что пароль не опубликован.
Стефано Скарпанти
6

Отслеживаемые файлы нельзя игнорировать, поэтому вам придется сначала удалить их из индекса. Добавьте, .gitignoreкоторый игнорирует ненужные каталоги, затем удалите их и удалите все отставшие git rm --cached.

Джон Феминелла
источник
1
Хм, я пытаюсь это, но тогда у меня есть все файлы, перечисленные как удаленные. Должен ли я зафиксировать это, и --cached приведет к тому, что он не будет передан на удаленные устройства? Или я получил что-то неправильно? Самым важным для меня не является повреждение удаленного репозитория (SVN).
1
Вы не можете зафиксировать ничего, что не начинается в вашем индексе. git rm - кэширует все, что вы не хотите фиксировать, затем локально добавьте файл .gitignore, в котором есть «*». Теперь, независимо от того, сколько вы добавляете git, вы больше никогда не увидите эти файлы в своем индексе.
Джон Феминелла
Ах, я думаю, я понимаю - кешируется сейчас .. Он только удаляет материал из индекса и оставляет рабочее дерево в покое .. Я не уверен, что я что-то упустил, но, К сожалению, я ищу противоположное , удаляя его из рабочего дерева, не касаясь индекса. Или я могу как-то использовать это для этого?
6

Что я обычно делаю, так это

заначка

мерзавец все остальное

Git Stash применить

git stash clear

Вальтер
источник
10
Кроме того, вы можете также использовать git stash pop для выполнения последних двух операций одновременно (хотя git stash clear очистит ВСЕ записи stash, если вы этого захотите).
Groxx