Игнорирование любого каталога bin в проекте git

У меня есть структура каталогов, как это:

.git/
.gitignore
main/
  ...
tools/
  ...
...

Внутри main и tools, и любого другого каталога, на любом уровне, может быть каталог 'bin', который я хочу игнорировать (и я хочу игнорировать все, что находится под ним). Я пробовал каждый из этих шаблонов в.gitignore, но ни один из них не работает:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

Может кто-нибудь мне помочь? Первый шаблон (тот, который, я думаю, должен работать) прекрасно работает, если я сделаю это:

/main/**/bin/**/*

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

Это на Windows, используя последнюю версию msysgit.

РЕДАКТИРОВАТЬ: еще одна вещь, есть файлы и каталоги, которые имеют подстроку "bin" в своих именах, я не хочу, чтобы они игнорировались:)

16 ответов

Решение

До версии 1.8.2, ** не было никакого особого значения в .gitignore, По состоянию на 1.8.2 поддерживает git ** означать ноль или более подкаталогов (см. примечания к выпуску).

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

bin/

в man страница, есть пример игнорирования каталога с именем foo используя аналогичный шаблон.

Редактировать: Если у вас уже есть какие-либо папки bin в вашем git index, которые вы больше не хотите отслеживать, то вам нужно явно удалить их. Git не остановит отслеживание путей, которые уже отслеживаются только потому, что теперь они соответствуют новому .gitignore шаблон. Выполнить удаление папки (rm) только из индекса (--cached) рекурсивно (-r). Пример командной строки для корневой папки bin:

git rm -r --cached bin

.gitignore вашей мечты кажется:

bin/

на верхнем уровне.

Я думаю, что стоит упомянуть для начинающих git:

Если у вас уже есть зарегистрированный файл, и вы хотите его игнорировать, Git не будет игнорировать файл, если вы добавите правило позже. В этих случаях вы должны сначала распаковать файл, выполнив следующую команду в вашем терминале:

git rm --cached

Поэтому, если вы хотите, чтобы add игнорировал некоторые каталоги в вашем локальном репозитории (которые уже существуют) после редактирования.gitignore, вы хотите запустить это в своем корневом каталоге.

git rm --cached -r .
git add .

Это в основном "освежит" ваше локальное хранилище и нестандартные игнорируемые файлы.

Увидеть:

http://git-scm.com/docs/git-rm,

https://help.github.com/articles/ignoring-files/

** никогда не работал должным образом раньше, но начиная с git 1.8.2 (8 марта 2013 г.), он явно упоминается и поддерживается:

Шаблоны в .gitignore а также .gitattributes файлы могут иметь **/ , как шаблон, который соответствует 0 или более уровней подкаталога.

Например foo/**/bar " Матчи " bar " в " foo "сам или в подкаталоге" foo ".

В вашем случае это означает, что эта строка теперь может поддерживаться:

/main/**/bin/
[Bb]in/

соответствует верхнему и нижнему регистру

Шаг 1: Добавьте следующее содержимое в файл.gitignore.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

Шаг 2: Убедитесь, что вступили в силу

Если проблема все еще существует, то это потому, что настройки в .gitignore могут игнорировать только те файлы, которые изначально не отслеживались. Если некоторые файлы уже включены в систему контроля версий, изменение .gitignore недопустимо. Чтобы полностью решить эту проблему, вам нужно открыть Git Bash или Консоль диспетчера пакетов (см. Скриншот ниже), чтобы запустить следующие команды в корневой папке хранилища.

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

Консоль PM Тогда вопрос будет полностью решен.

Я не видел, чтобы это упоминалось здесь, но это, кажется, чувствительно к регистру. Как только я перешел на /Bin, файлы были проигнорированы, как и ожидалось.

[Bb]in решит проблему, но... Вот более обширный список вещей, которые вы должны игнорировать (пример списка от GitExtension):

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/

Если вы ищете большой глобальный .gitignore файл для любого решения Visual Studio ( .NET) - я рекомендую вам использовать это: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

AFAIK это имеет самый полный .gitignore для.NET проектов.

Буквально ни один из ответов на самом деле не работал для меня; единственный, который работал для меня, был (на Linux):

**/bin
(yes without the / in the end)

git version 2.18.0 

Для 2.13.3 и выше, запись только bin в ваш файл.gitignore должна игнорировать bin и все его подкаталоги и файлы

бункер

В качестве уведомления;

Если вы думаете о .gitignore не работает в пути (так добавлено foo/* папка в нем, но git status по-прежнему показывая содержимое этой папки как измененное или что-то подобное), вы можете использовать эту команду;

git checkout -- foo/*

Добавление **/bin/ в файл.gitignore помогло мне (Примечание: папка bin не была добавлена ​​в индекс).

В дополнение к ответу @CB Bailey:

Я попытался удалить несколько папок (в подпапках) с именем et-cache(папка кэширования из темы Wordpress divi ) из индекса и от отслеживания.

я добавил

      et-cache/

к .gitignoreфайл. Но

      git rm -r --cached et-cache

привел к ошибке:

фатально: pathspec 'et-cache' не соответствует ни одному файлу

Итак, решение состояло в том, чтобы использовать powershell:

      Get-ChildItem et-cache -Recurse |% {git rm -r --cached $_.FullName}

Это ищет все подпапки с именем et-cache. Каждый из путей к папкам (полное имя) затем используется для удаления его из отслеживания в git.

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

Другими словами, bin/ будет соответствовать каталогу bin и пути под ним, но не будут совпадать с обычным файлом или символической ссылкой bin,


Если шаблон не содержит косую черту, как в bin Git рассматривает это как шаблон оболочки (жадный). Так что лучше всего будет использовать простой /bin,

bin не будет лучшим решением для этой конкретной проблемы.

В моем случае кодирование файла gitignore было проблематичным, проверьте, является ли он UTF-8

Другие вопросы по тегам