Читаю книгу Test-Driven Development with Python, во второй главе описывается создание git-репозитория. Я следую всем инструкциям, но мой файл .gitignore не игнорирует записанное в нём. В чём проблема?

Читаю книгу Test-Driven Development with Python, во второй главе описывается создание git-репозитория. Я следую всем инструкциям, но мой файл .gitignore не игнорирует записанное в нём. В чём проблема?

Подозреваю, что вы добавили файлы в индекс раньше, чем начали игнорировать. То есть до той git add ., который на скриншоте, была еще одна такая команда. Чтобы узнать точно, не хватает git status перед добавлением.
Если файл уже был добавлен, то изменение в .gitignore не вызывает удаления из текущего индекса (что логично и безопасно).
В данном конкретном случае именно так и есть. При этом достаточно удалить их из индекса. Данная команда возвращает индекс к HEAD, то есть состоянию последнего коммита.
git reset <file-name>
Вы можете заметить, что сам Git предлагает использовать другую команду:
git rm --cached <file-name>
В данном случае эти команды эквивалентны. Такое дублирование появилось в результате эволюционного развития функционала Git. Это в том числе отражено в документации и в сообщениях Git: где-то рекомендуется reset, где-то rm --cached.
Возможна и такая ситуация, на всякий случай я опишу и ее. Здесь reset не сработает, нужен rm. Аргумент --cached заставляет Git удалить файл из индекса, но не трогать рабочую область. То есть он буквально индексирует удаление файла, хотя этого удаления не было. Если сделать это с файлом, который не игнорируется, то после коммита он будет в категории неотслеживаемых (untracked).
git rm --cached <file-name>
Если нужно убрать целую игнорируемую папку, добавляем ключ -r:
git rm -r --cached <path>
Эта удобная команда применяет rm ко всем файлам, указанным в .gitignore:
git rm --cached `git ls-files -i --exclude-from=.gitignore`
Вариант того же для windows powershell:
foreach ($i in iex 'git ls-files -i --exclude-from=.gitignore') { git rm --cached $i }
Теперь результат команды git rm нужно зафиксировать коммитом.
git commit -m'removed gitignored files'
Команда
git rm --cached `git ls-files -i --exclude-from=.gitignore`
имеет проблемы с пробелами в названиях.
Самый простой путь - удалить из кэша ВСЕ файлы, и добавить заново с учетом gitignore. на все про все 2 команды.
git rm -rf --cached .
git add .
потом закоммитить:
git commit -m "fix gitignore"
На ваш вопрос ответ простой. Наименование файлов и директорий которые игнорируются гитом должны быть записаны в .gitignore без кавычек ("). Пример в книге добавляет в .gitignore имена файлов обрамленные кавычками, в результате гит не может их идентифицировать. У берите кавычки и все будет работать.
git filter-branch --force (чтобы не удалился каталог с жесткого диска)
git filter-branch --tree-filter "rm -rf PATH" HEAD
где PATH - путь к файлу/папке
https://help.github.com/en/articles/removing-sensitive-data-from-a-repository
Судя по скриншоту, не похоже, что файлы уже попали в репозиторий, поскольку git status отмечает их как новые.
– Jenyay Jun 28 '15 at 13:37