git не игнорирует файлы, которые следует исключить - PullRequest
0 голосов
/ 25 мая 2020

Ситуация

Использование gedit 3.18.3 с Ubuntu 16.04 LTS.

Мой файл .git / info / exclude:

# git ls- файлы --others --exclude-from = .git / info / exclude # Строки, начинающиеся с символа "#", являются комментариями. # Для проекта в основном на C следующий набор будет хорошим # исключить шаблоны (раскомментируйте их, если хотите их использовать): # ФАЙЛОВ *. [oa] * ~ *.журнал Makefile *

Поэтому я ожидаю, что файлы, соответствующие шаблону *~, не будут учитываться.

Проблема

Тем не менее, они хранятся в счетчике

git status 

On branch v2
Your branch is up-to-date with 'origin/v2'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified:   README.md
modified:   README.md~

no changes added to commit (use "git add" and/or "git commit -a")

Это поведение подтверждается

git ls-files --cached --ignored --exclude-standard

, как предлагается в Git: Список файлов, которые следует игнорировать, но не

Вопрос

Я бы не хотел, чтобы этот README.md~ или любой другой *~ файл отображался в списке. Раньше это работало как ветер, но я не могу определить момент, когда что-то пошло не так. Какие-нибудь советы и обходные пути, пожалуйста?

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Многие люди, кажется, неправильно представляют, что делает файл gitignore .

  • Это не мешает вам добавить файл.

  • И это не останавливает отслеживание отслеживаемого файла.

Он просто останавливает git от предположения, что файл нуждается в для отслеживания, если его еще нет в индексе. Например, если вы никогда ничего не добавляли в это репо и говорите git add ., этот файл не добавляется.

Но как только вы добавили , это конец, git теперь отслеживает этот файл. Это все, что есть в указателе.

1 голос
/ 25 мая 2020

Поскольку

modified:   README.md

появляется в вашем git status, я вижу, что вы уже зафиксировали файл раньше. Он будет проигнорирован только в том случае, если он еще не версирован, поэтому сначала вам нужно удалить его.

Почему файл изначально был версирован? Может быть:

  • Файл был добавлен до того, как существовал файл исключения (или был добавлен исключающий шаблон)
  • Он был добавлен принудительно (git add -f)
  • другой участник добавил файл (см. замечание о .git/info/exclude ниже)

EDIT: см. пример того, как удалить файл из системы управления версиями, но сохранить локальную копию: { ссылка }

также см. Разницу между .gitignore (версионная) и .git/info/exclude (только локальная). Последний не проигнорирует файлы для других клонов репозитория: { ссылка }

...