Как исключить файл только из корневой папки в Git

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

Что я должен написать в .gitignore, чтобы это произошло?


person Pavel Karoukin    schedule 03.09.2010    source источник


Ответы (4)


Из документации:

Если шаблон не содержит косую черту /, git рассматривает его как шаблон глобуса оболочки и проверяет соответствие имени пути относительно местоположения файла .gitignore (относительно верхнего уровня рабочего дерева, если не из .gitignore файл).

Начальная косая черта соответствует началу пути. Например, /*.c соответствует cat-file.c, но не соответствует mozilla-sha1/sha1.c.

Таким образом, вы должны добавить следующую строку в свой корень .gitignore:

/config.php
person Manoj Govindan    schedule 03.09.2010
comment
Спасибо! Я пробовал так, но почему-то не получилось. Наверное, где-то опечатка =) - person Pavel Karoukin; 03.09.2010
comment
Что, если это не файл, а папка, и я хочу игнорировать эту папку в корне репозитория, содержащиеся в ней файлы и все дочерние подпапки и их файлы? /folder/? - person CodeManX; 23.08.2015
comment
Будет работать либо /folder/, либо /folder, но добавление косой черты на концах ограничивает соответствие только папкам. Если бы у вас был файл с именем 'foo' в корневом каталоге, /foo/ не проигнорировал бы его, а /foo проигнорировал бы. - person tehDorf; 20.06.2017
comment
Если вы уже зафиксировали файл, выполните команду git rm --cached <file>, иначе файл не будет проигнорирован. Из: stackoverflow.com/a/1274447 - person Bruno Polo; 26.05.2020

Используйте 1_.

person Richard Fearn    schedule 03.09.2010

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

/config.php
!/*/config.php

Для более поздних версий требуется только следующее [проверено на версии 2.2.1]

/config.php
person kenhowardpdx    schedule 17.01.2015

Если приведенное выше решение не работает для вас, попробуйте следующее:

#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
person drugan    schedule 18.09.2014
comment
Это действительно работает для меня, тогда как только /config.php не работает. Мне интересно, почему этого не произошло. У вас есть идея? - person iago-lito; 30.01.2019
comment
@iago-lito, если вы работаете над каким-то конкретным проектом и изо всех сил пытаетесь игнорировать какой-либо файл .ext в каком-то конкретном каталоге и в то же время НЕ игнорировать его где-либо еще, поместите это в файл /home/me/.gitignore: /home/me/path/to/my/project/some/folder/file.ext ИЛИ file.ext, чтобы игнорировать файл везде, а затем в /home/me/path/to/my/project/some/folder/ Файл .gitignore поместил этот !file.ext, чтобы НЕ игнорировать этот файл только в этом конкретном каталоге. Каждая папка может иметь свой собственный файл .gitignore, чтобы ОТМЕНИТЬ любые настройки родительского файла (файлов) .gitignore... - person drugan; 01.02.2019
comment
Хм. Это означает, что репозиторий может вести себя по-разному в зависимости от того, есть ли у других пользователей разные файлы ~/.gitignore на их собственных машинах, верно?.. Кроме того, моя точка зрения была: Вы написали, что если вышеуказанное решение не работает, то почему бы и нет? - person iago-lito; 01.02.2019
comment
да, если ваш проект может существовать в неизвестной среде, вам никогда не следует полагаться на файлы .gitignore, которые существуют над корневой папкой вашего проекта. Помните, что имя файла, такое как config.php, довольно распространено, поэтому переопределите любые возможные существующие настройки для этого файла в вашем корневом файле .gitignore. - person drugan; 02.02.2019
comment
@iago-lito'consideringleaving см. stackoverflow.com/a/28000594/362021 - person Malcolm; 28.02.2021