Начал изучать Git и пока что не нашел для себя инфу, которая ответит мне на мой вопрос. Я сделал репозиторий на GitLab и запушил туда (git push) проект, но перед этим я не создал файл .gitignore.
Теперь же я додумался создать его, но добавив туда строку чтобы он игнорировал *.DS_Store, вижу что он почему-то не игнорирует его.
Как в репозитории удалить этот файл, чтобы потом он не ругался, что на компьютере и в репозитории на гитлабе разные версии?
сначала удали файл у себя (перемести в другое место) -> сделай commit с этим удалением -> после этого уже добавь их в gitignore и верни удаленные файлы. теперь они уже не будут уходить в git
iBird Rose, никакие файлы сами не уйдут в репозиторий если ты специально не попросишь Git об этом, например сказав «добавь всё» git add .
Но это плохая практика. Лучше таки предварительно смотреть что добавляешь в отслеживание.
Вот несколько фактов, которые помогут понять как работает Git.
Файл .gitignore действует только на ещё не отслеживаемые файлы.
Файл .gitignore предназначен для описания того, что мы не хотим СЛУЧАЙНО добавить в репозиторий. Либо не хотим случайно удалить переключив ветку.
Мы можем ПРИНУДИТЕЛЬНО добавить в репозиторий ЛЮБОЙ файл, даже если он описан в .gitignore.
Добавление файла в .gitignore не удалит сам файл из репозитория. Если файл УЖЕ в репозитории, то он продолжит отслеживаться, независимо от наличия .gitignore.
Если больше не хотим отслеживать какой-то файл, то просто удаляем его из репозитория. Ключ --cached позволит оставить файл в рабочем каталоге текущего репозитория если он нужен.
git rm --cached -- '.DS_Store'
git commit
Но последний рецепт сработает только на одном компьютере. Если коллеги переключатся на этот коммит, то файл удалится у них из рабочего каталога.
Леонид, да. Потому что в гите невозможно изменить коммиты, можно только как бы создать их заново.
Например пересобрать весь репозиторий через git filter-repo, и тогда вообще в истории не останется следов от ненужного файла. Но это получится фактически НОВЫЙ локальный репозиторий и его придётся удалить во всех внешних серверах и заливать заново.
Ничего страшного не будет если файл останется в старых коммитах. Такие радикальные методы чистки используют только если файлы содержат пароли (но даже тут проще поменять пароль, чем вычищать репо), либо по ошибке закоммитили огромные двоичные файлы, которые теперь лежат мёртвым балластом. Но DS_Store обычно маленькие и не мешают.
Сергей Кузнецов, это стоило отметить. Тут о "DS_Store", но кто-то может воспользоваться ответом для удаления файла с паролем, не понимаю, что он сохранён в старых коммитах.
Леонид, если улетело на гитхаб, то считай что пароль скомпрометирован и всё равно менять. Говорят что иногда уже через несколько минут кто-то пытается использовать утекший пароль.