Як виключити файл тільки з кореневої папки в Git


399

Мені відомо про використання .gitignoreфайлу для виключення додавання деяких файлів, але у мене config.phpв дереві джерела є кілька файлів, і мені потрібно виключити лише один, який знаходиться в корені, а інші тримаються під контролем редагування.

Що я повинен написати, .gitignoreщоб це сталося?

Відповіді:


588

З документації :

Якщо шаблон не містить косу рису /, git розглядає його як зразок глобальної оболонки і перевіряє відповідність імені шляху відносно місця розташування файлу .gitignore (щодо вершини робочого дерева, якщо не з .gitignore файл).

Початкова косою рисою відповідає початок назви шляху. Наприклад, "/*.c" відповідає "cat-file.c", але не "mozilla-sha1 / sha1.c".

Тож слід додати наступний рядок до кореня .gitignore:

/config.php

1
Дякую! Я спробував це таким чином, але чомусь не вийшло. Напевно, неправильно десь щось
вводили

1
Що робити, якщо це не файл, а папка, і я хочу проігнорувати цю папку в кореневому репо, її вміщені файли та всі вкладені папки та їхні файли? /folder/?
CodeManX

11
Або працює, /folder/або /folderбуде працювати, але додавання косої риски в кінці обмежує збіг лише для папок. Якби у вас був файл з назвою 'foo' у кореневому каталозі, він /foo/би його не ігнорував, але /fooби.
tehDorf

Якщо ви вже скористалися файлом, запустіть команду git rm --cached <file>, інакше файл не буде проігнорований. Від: stackoverflow.com/a/1274447
Бруно Поло


29

Старіші версії git вимагають спершу визначити шаблон ігнорування та негайно (у наступному рядку) визначити виключення. [тестовано на версії 1.9.3 (Apple Git-50)]

/config.php
!/*/config.php

Більш пізні версії вимагають лише наступного [протестовано на версії 2.2.1]

/config.php

17

Якщо вищевказане рішення не працює для вас, спробуйте:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php

Це справді працює для мене, тоді як /config.phpодин цього не зробив. Мені цікаво, чому цього не сталося. У вас є ідея?
iago-lito 'розглядаючи можливість виходу

@ iago-lito, якщо ви працюєте над яким-небудь конкретним проектом і боретеся над тим, як ігнорувати якийсь файл.ext в якомусь конкретному каталозі і в той же час НЕ ігнорувати його скрізь, тоді покладіть це у /home/me/.gitignore файл: /home/me/path/to/my/project/some/folder/file.ext АБО файл file.xt ігнорувати файл скрізь, а потім у / home / me / path / to / my / project / some / folder / .gitignore файл поставив цей! file.ext, щоб НЕ ігнорував цей файл саме в цій конкретній директорії. У кожної папки може бути власний .gitignore-файл, щоб перекрити будь-яке з батьківських .gitignore-файлів, налаштувань ...
drugan

Гм. Це означає, що репо може поводитися по-різному залежно від того, чи мають інші користувачі різні ~/.gitignoreфайли на власних машинах, так?
iago-lito ', розглядаючи можливість виїзду

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