it-swarm.com.ru

игнорирование любого каталога 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» в своих именах, я не хочу, чтобы они игнорировались :)

1058
Ben Hymers

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

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

bin/

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

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

git rm -r --cached bin
1590
CB Bailey

.gitignore вашей мечты выглядит так:

bin/

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

428
Michael Krelin - hacker

Я думаю, что стоит упомянуть для начинающих 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/

192
plancys

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

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

Например. «foo/**/bar» соответствует «bar» в самой «foo» или в подкаталоге «foo».

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

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

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

45
wisbucky

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

31
Cory

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

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

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

17
Jochen van Wylick

Шаг 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 или Package Manager Console (см. скриншот ниже) для запуска следующих команд в корневой папке хранилища.

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

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

10
Bravo Yeung

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

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

git checkout -- foo/*

5
K-Gun

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

мусорное ведро

3
Nikhil Karanjkar

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

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

git version 2.18.0 
2
AnthonyC

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

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


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

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

0
prosti

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

0
Dhwaneel