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

94

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

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

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

user1995781
источник
2
Означает ли это, что файл уже был добавлен в репозиторий раньше? .gitignoreигнорирует только добавляемый контент.
Виллем Ван Онсем
2
@CommuSoft Да, он был добавлен в репозиторий раньше. Итак, как я могу это исключить прямо сейчас? Правильно ли я .gitignoreпоступаю?
user1995781

Ответы:

152

В отличие от того, что может предполагать название «игнорировать». .gitignoreиспользуется только при работе с git addфайлами: другими словами, файл, уже добавленный в репозиторий (индекс), не будет исключен на основе расширения .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чтобы добавить файл.

Виллем Ван Онсем
источник
спасатель жизни, мои верительные грамоты были открыты для публики
mLstudent33
21

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

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

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

git rm --cached FILENAME

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

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

BTownTKD
источник
Спасибо, дорогой, "git rm --cached FILENAME" отлично сработал :)
Камлеш
11

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

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

git rm --cached <file>

Росс
источник
не дв, но я думаю, тебе стоит лучше подбирать слова. Хранение его в репозитории немного отличается от хранения его в локальной файловой системе . Репозиторий не отображается в файловой системе ...
Виллем Ван Онсем,
@CommuSoft Исправлено к некоторому удовлетворению, я не был слишком осторожен, потому что другие люди ответили на него лучше. Спасибо за предложение.
Росс
7

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

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

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

Томас Хьюз
источник