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

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

.git/
.gitignore
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.

EDIT: еще одна вещь, есть файлы и каталоги, которые имеют подстроку "bin" в своих именах, я не хочу, чтобы те были проигнорированы:)

Ответ 1

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

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

bin/

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

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

git rm -r --cached bin

Ответ 2

.gitignore вашей мечты выглядит следующим образом:

bin/

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

Ответ 3

Я думаю, что стоит упомянуть новичков git:

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

git rm --cached

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

git rm --cached -r .
git add .

Он будет в основном "обновлять" локальные файлы репо и нечеткие игнорируемые файлы.

См:

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

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

Ответ 4

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

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

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

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

/main/**/bin/

Ответ 5

[Bb]in/

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

Ответ 6

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

Ответ 7

[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*/

Ответ 8

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

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

Ответ 9

Шаг 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/

Ответ 10

Как уведомление;

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

git checkout -- foo/*

Ответ 11

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

бен

Ответ 12

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

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

git version 2.18.0 

Ответ 13

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

Ответ 14

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

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


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

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