2009-03-17 3 views
152

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

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

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

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

(В качестве альтернативы, так как я использую Git-SVN, я мог совершить изменения в местном мерзавца и гарантировать, что они не передаются в SVN репо?)

+0

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

ответ

231

вне git-update-index man page и - без изменений; b это и связано.

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

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

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

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

Это отлично работает для измененных файлов. Однако, когда я удаляю dir (либо с 'rm', либо 'git rm'), файлы перечисляются как отсутствующие/удаленные в 'git status'. Я думаю, что я соглашусь с этим в качестве ответа и повторю вопрос, явно спрашивая об удаленных файлах. (Во-первых, я не знал, что была такая большая разница;) Спасибо! – 2009-04-24 14:32:08

+3

Можете ли вы перечислить все свои проигнорированные файлы? – Zitrax

+4

Zitrax, да, см. Http://stackoverflow.com/questions/2363197/ –

6

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

+0

Хм, я пробую это, но тогда у меня есть все файлы, перечисленные как удаленные. Должен ли я зафиксировать это, а файл -cached приведет к тому, что он не будет нажат на пульты? Или я получил sth. неправильно? Самое важное для меня - это не повреждение удаленного (svn) репо. – 2009-03-17 17:44:52

+1

Вы не можете совершить что-либо, что не начинается в вашем индексе. git rm - кэшировать все, что вы не хотите комментировать, а затем добавить файл .gitignore локально, в котором есть «*». Теперь, независимо от того, сколько вы добавите, вы больше никогда не увидите эти файлы в своем индексе. –

+0

А, я думаю, я понимаю - теперь кэш.Он удаляет только материал из индекса и оставляет только одно дерево. Я не уверен, что я что-то пропустил, но AFAIS. Я ищу противоположное, удалив его из рабочего дерева, не касаясь индекса. Или я могу использовать его для этого как-то? – 2009-03-18 14:43:50

4

То, что я обычно делаю

мерзавец копить

мерзавец независимо-то еще

мерзавец копить применять

мерзавец копить четкий контроль

+9

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

36

Свежим и лучше вариант git update-index --skip-worktree, которые не будут потеряны на жесткий сбросе или новое изменение от тяги.

Смотрите страницу человека в http://schacon.github.com/git/git-update-index.html

и сравнение на http://fallengamer.livejournal.com/93321.html

+8

Следует отметить, что если модификации файла были скрыты с помощью 'skip-worktree', поиск этих файлов немного громоздкий. Единственный способ, которым я знаю, это 'git ls-files -v | grep -v '^ H''. Кроме того, многие инструменты GUI не знают об этой функции и могут создавать смешные ошибки, если, например, «checkout» терпит неудачу из-за «скрытых» модифицированных файлов. – sleske

+0

+1 sleske, так как эта команда спасла меня после того, как я «случайно пропустил» файл! –

3

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

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

Действительно интересно. Я должен использовать passord в моем проекте maven, но я не хочу публиковать его в git-репозитории, поэтому я помещаю его заполнитель без значения в локальном, свойствах, я его фиксирую, затем вставляю пароль, но отмечаю файл без изменений с помощью предлагаемой вами команды. Таким образом, пароль не публикуется. –

Смежные вопросы