Хранить игнорируемые файлы вне статуса git

133

Я хотел бы, чтобы Git не отображал игнорируемые файлы git status, потому что в списке измененных, но не обновленных файлов есть масса документации и файлов конфигурации. файлов делает этот список наполовину бесполезным.

Git показывает эти файлы нормально?

Я помещаю информацию об игнорировании в .gitignoreфайл в корневом каталоге репозитория Git, и они не добавляются при использовании, git add .но кажется, что они также не полностью игнорируются, поскольку они отображаются в вышеупомянутом списке и не отображаются в списке напечатано git ls-files --others -i --exclude-standard. Только файлы, соответствующие шаблонам в~/.gitignore .

Может быть, потому, что на более раннем этапе я не игнорировал их, и они были совершены хотя бы один раз?

knuton
источник

Ответы:

232

Как я обнаружил в этом посте , .gitignoreработает только с неотслеживаемыми файлами. Если вы добавили файлы в репозиторий, вы можете:

git update-index --assume-unchanged <file>

или удалите их из репозитория

git rm --cached <file>

редактировать

Эта статья тоже объясняет это

MBO
источник
4
update-index работал у меня. Аналогичная проблема, когда статус git показывает игнорируемые файлы ... очень раздражает. +1
Эйб Петрилло
3
У меня все еще есть эта проблема. Ни одна из вышеперечисленных команд у меня не сработала. В обоих случаях git сообщает, что ничего не знает о файлах, о которых идет речь, но они все еще отображаются в статусе git :(
Cfreak
5
@Cfreak Показывает ли git status -- <file>для вашего файла «Изменения, не предназначенные для фиксации» или «Не отслеживаемые файлы»? Первый - если у вас уже есть файл в индексе, и мне понадобится дополнительная информация для решения вашей проблемы (лучше создать отдельный вопрос с отображаемыми сообщениями git и просто опубликовать ссылку на него в комментарии). Последний предназначен для файлов, которые не отслеживаются git (пока), но не находятся в .gitignoreфайле и могут быть свободно добавлены в индекс.
MBO
1
@MBO - да, это так. Спасибо! Ваш комментарий помог мне найти ответ: stackoverflow.com/questions/594757/…, который сработал для меня.
Cfreak
1
Первый вариант работает как шарм. Я уже пробовал второй вариант, и это привело к тому, что файлы были помечены как «удаленные», а я определенно не хотел этого.
Каррм
16

У меня тоже возникла эта проблема, вероятно, потому, что вы добавили игнорируемые каталог / файлы в .gitignore после того, как они были помечены GIT как «подлежащие отслеживанию» в начальном потоке фиксации.

Итак, вам нужно очистить кеш отслеживания git следующим образом:

git rm --cached -r [folder/file name]

Более подробное объяснение можно прочитать здесь: http://www.frontendjunkie.com/2014/12/stop-git-from-tracking-changes-to.html

Вышеупомянутая команда также удалила остатки папки / файлов из вашего удаленного источника GIT. Таким образом, ваши репозитории GIT станут чистыми.

newbreedofgeek
источник
12

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

Сбросить кеш git. Это удаляет все из индекса.

git rm -r --cached . 

Снова добавьте все файлы:

git add . 

Commit:

git commit -m ".gitignore was fixed." 
Рамис
источник
2

Это определенно работает,

git rm --cached -r [folder/file name]

Усман
источник
1

Я предполагаю, что вы не хотите добавлять каталог tmp (платформа Visual Studio)

1- добавьте строки ниже в ваш локальный файл .gitignore

## ignore tmp
/tmp/
./tmp/

3- резервное копирование и удаление папки tmp локально. (Резервное копирование где-нибудь еще, например, на рабочем столе?)

4- Зафиксируйте изменения на локальном, а не на удаленном (например, github).

После этих шагов ваш каталог tmp больше не будет загружен.

Курсат Туркай
источник
0

Из man git-lsfiles :

-i, --ignored
Show ignored files in the output. Note that this also reverses any exclude list present.

Лично я стараюсь хранить файлы doxygen в моем исходном дереве, поэтому я просто добавил это в свой .gitignore (который находится в самом верхнем каталоге моего исходного дерева):

docs/*

Надеюсь, это поможет.

BastiBen
источник
0

Следующие шаги работают только для неотслеживаемых файлов . Эта информация применима для следующей конфигурации:

Platform: linux

Git version: git version 1.8.3.1

Поместите список файлов, которые следует игнорировать, в файл "exclude", находящийся в следующем месте.

<path till .git directory>/.git/info/exclude

Исходное содержимое файла "исключить"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

Окончательное содержание файла "исключить"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~


*.tar
*.gch
харшул ар
источник
0

Согласно принятому ответу, вы можете считать, что файл не изменился , поэтому все, что вы делаете на своем локальном компьютере, не передается в удаленную ветку.

Что-то вроде git update-index --assume-unchanged src/main/resources/config.properties где src / main.resources / config.properties - это образец пути для поиска этого файла в вашем проекте.

Теперь, если вы хотите полностью удалить файл из своего репозитория, вы можете использовать remove cachedвместо `git rm --cached

Этот сценарий может быть применим в следующей ситуации:

Предположим, у меня есть файл, в котором я храню пароли. Изначально я зафиксировал этот файл с неверными данными, чтобы у моих коллег был тот же файл на своих машинах. Однако теперь я добавил правильные данные на свой локальный компьютер. Как мне предотвратить повторную случайную фиксацию этого файла с теперь правильными данными пароля?

Франсислейни Кампос
источник
-1

как это

git --ignored myfolder

И будет показывать статус только для моей папки

Alex
источник