Не ігноруйте файли у статусі git


133

Я хотів би зупинити Git від показу проігнорованих файлів git status, оскільки наявність тонів документації та конфігураційних файлів у списку Змінених, але не оновлених файлів робить цей список наполовину марним.

Чи нормально Git показувати ці файли?

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

Чи може це бути тому, що на більш ранній стадії я їх не ігнорував, і вони були прихильні хоча б раз?

Відповіді:


231

Як я виявив у цій публікації , .gitignoreпрацює лише для файлів, що не відслідковуються. Якщо ви додали файли до сховища, ви можете:

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

або видалити їх із сховища

git rm --cached <file>

Редагувати

Ця стаття пояснює і це


4
update-index працював на мене. Подібна проблема, коли статус git показує ігноровані файли ... дуже дратує. +1
Abe Petrillo

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 стануть чистими.


11

Проблема може полягати в тому, що цей файл все ще знаходиться в кеш-пам'яті git. Для вирішення цієї проблеми потрібно скинути кеш-пам'ять git.

Скинути кеш-пам'ять git. Це видаляє все з індексу.

git rm -r --cached . 

Додайте всі файли знову:

git add . 

Виконати:

git commit -m ".gitignore was fixed." 


1

Я припускаю, що ви не хочете додавати каталог tmp (платформа Visual Studio)

1- додайте рядки нижче до вашого локального файлу .gitignore

## ignore tmp
/tmp/
./tmp/

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

4- Здійснення змін до локальних, ніж синхронізація з віддаленим (наприклад, github).

Після цих дій ваш каталог tmp не буде завантажений знову.


0

Від людини git-lsfiles :

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

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

docs/*

Сподіваюся, що це допомагає.


0

Наступні кроки працюють лише для файлів, що не відслідковуються . Ця інформація застосовується для наступної конфігурації:

Platform: linux

Git version: git version 1.8.3.1

Помістіть список файлів, які слід ігнорувати, у файл "виключити", присутній у наступному місці.

<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

І покаже статус лише для моєї папки

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