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

399

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

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

Павел Карукин
источник

Ответы:

589

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

Если шаблон не содержит косую черту /, 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
Бруно Поло
83

Использование /config.php.

Ричард Ферн
источник
29

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

/config.php
!/*/config.php

Более поздние версии требуют только следующего [проверено на версии 2.2.1]

/config.php
kenhowardpdx
источник
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, если вы работаете над каким-то конкретным проектом и боретесь с тем, как игнорировать файл file.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 ...
drugan
Гектометр Это означает, что репо может вести себя по-разному, в зависимости от того, есть ли у других пользователей разные ~/.gitignoreфайлы на их собственных машинах, верно? .. Кроме того, моя точка зрения была такой: вы написали «Если вышеупомянутое решение не работает», почему бы и нет?
Яго-Лито 'рассматривает возможность отъезда
да, если ваш проект может существовать в неизвестной среде, вам никогда не следует полагаться на файлы .gitignore, которые существуют над корневой папкой вашего проекта. Помните, что имя файла, такое как config.php, встречается довольно часто, поэтому переопределите все возможные настройки этого файла в вашем корневом .gitignore файле.
Друган