.gitignore виключає конкретний файл


94

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

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

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


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.


Дякую шановний, "git rm --cached FILENAME" спрацював як шарм :)
Камлеш

11

Якщо ви вже відстежуєте файл ( git addна ньому і git commit), .gitignoreце не допоможе.

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

git rm --cached <file>


не dv, але я думаю, що, можливо, вам слід краще добирати слова. зберігати його у сховищі трохи на відміну від зберігання у вашій локальній файловій системі . Сховище не відображає файлову систему ...
Віллем Ван Онсем

@CommuSoft Виправлений до певного задоволення, я не був надто обережним, оскільки інші люди відповіли на нього краще. Дякую за пропозицію.
Росс

7

У цьому випадку ви можете зупинити відстеження за templates.jsдопомогою

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

Як пояснили інші, .gitignoreлише доданий вміст ігнорується. Наприклад, якщо ви часто використовуєте git add .і маєте templates.jsу своєму .gitignore, то git не додасть його.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.