.gitignore исключить конкретный файл

Я пытаюсь использовать .gitignore файл, чтобы исключить templates.js, расположенный в папке public/app/. Мой файл .gitignore выглядит следующим образом:

/vendor
/node_modules
composer.phar
composer.lock
.DS_Store
templates.js

Но когда я проверяю Git Gui, в нем все еще отображается файл templates.js. Как я могу специально исключить файл с помощью .gitignore?

Ответы

Ответ 1

В отличие от того, что может указать название "игнорировать". .gitignore обрабатывается только при git add файлах: другими словами, файл, уже добавленный в репозиторий (index of the), не будет исключен на основе .gitignore.

Сначала вы лучше измените .gitignore так, чтобы файл больше не добавлялся. Добавьте следующую строку в файл .gitignore:

public/app/template.js

Затем вам нужно исключить файл из репозитория. Вероятно, вы не хотите удалять файл из вашей файловой системы, это можно сделать с помощью

git rm --cached public/app/template.js

Флаг --cached гарантирует, что файл не будет удален из вашей файловой системы. (Если это не важно, вы можете использовать git rm public/app/template.js, , но это приведет к удалению файла).

Фон

Причина .gitignore не используется проактивно, потому что иногда вы можете переопределить .gitignore. Скажем, например, вы не хотите отслеживать файлы *.log, вы можете указать *.log в .gitignore. Но если есть определенный, который вы хотите отслеживать, вы можете добавить git add -f some.log. Флаг -f заставляет git добавить файл.

Ответ 2

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

Я предполагаю, что вы ранее добавили файл template.js, и в этом случае он будет продолжать отслеживать изменения, пока вы не удалите его из репозитория. После удаления файла из репозитория он будет правильно проигнорирован с помощью файла .gitignore.

Способ удаления файла из репозитория git (командной строки) без его удаления

git rm --cached FILENAME

Затем, как только вы сделаете это и попытаетесь зафиксировать файл в своем gitignore, он этого не сделает.

Обратите внимание, что если вы специально добавили файл, который у вас есть в вашем gitignore, ваше ручное добавление файла переопределит gitignore.

Ответ 3

Если вы уже отслеживаете файл (git add на нем и git commit), .gitignore не поможет.

Я считаю, что вы хотите остановить отслеживание файла, а затем использовать .gitignore, чтобы исключить его. Чтобы остановить отслеживание файла, но сохраните файл, используйте:

git rm --cached <file>

Ответ 4

В этом случае вы можете остановить отслеживание templates.js с помощью

git rm --cached public/app/templates.js

Как объяснили другие, .gitignore игнорирует только добавляемый контент. Например, если вы часто используете git add . и имеете templates.js в своем .gitignore, то git не добавит его.