ignorowanie katalogu 'bin' w projekcie git

Mam taką strukturę katalogów:

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

Wewnątrz katalogu main i tools i każdego innego, na dowolnym poziomie, może znajdować się Katalog' bin', który chcę zignorować (i chcę zignorować wszystko, co znajduje się pod nim). Wypróbowałem każdy z tych wzorów .gitignore ale żaden z nich nie działa:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too
Czy ktoś może mi pomóc? Pierwszy wzór (ten, który myślę, że powinien działać) działa dobrze, jeśli to zrobię: {]}
/main/**/bin/**/*

Ale nie chcę mieć wpisu dla każdego katalogu najwyższego poziomu i nie chcę musieć modyfikować .gitignore za każdym razem, gdy dodaję nowy.

To jest w systemie Windows przy użyciu najnowszego msysgit.

EDIT: Jeszcze jedno, są pliki i katalogi, które mają podciąg 'bin' w swoich nazwach, nie chcę, aby były ignorowane :)

 1295
Author: ivanleoncz, 2009-09-24

16 answers

Przed wersją 1.8.2, ** nie miało specjalnego znaczenia w .gitignore. Od wersji 1.8.2 git obsługuje **, co oznacza zero lub więcej podkatalogów(Zobacz uwagi do wydania ).

Sposób ignorowania wszystkich katalogów zwanych bin w dowolnym miejscu poniżej bieżącego poziomu w drzewie katalogów jest za pomocą pliku .gitignore o wzorze:

bin/

Na stronie man znajduje się przykład ignorowania katalogu o nazwie foo za pomocą analogicznego wzorca.

Edit: Jeśli już jeśli masz w swoim indeksie git jakieś foldery bin, których nie chcesz już śledzić, musisz je wyraźnie usunąć. Git nie zatrzyma śledzenia ścieżek, które są już śledzone tylko dlatego, że teraz pasują do nowego wzorca .gitignore. Wykonaj folder remove (rm) z indeksu only (--cached ) recursivelly (-R). Przykład wiersza poleceń dla folderu kosza głównego:

git rm -r --cached bin
 1921
Author: CB Bailey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-20 21:29:26

.gitignore twojego snu wydaje się być:

bin/
Na najwyższym poziomie.
 479
Author: Michael Krelin - hacker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-24 13:08:02

Myślę, że warto wspomnieć dla początkujących Gita:

Jeśli masz już sprawdzony plik i chcesz go zignorować, Git nie zignoruje pliku, jeśli dodasz regułę później . W takich przypadkach musi najpierw usunąć śledzenie pliku, uruchamiając następujące polecenie w swoim terminal:

git rm --cached

Więc jeśli chcesz dodać do ignorowania niektórych katalogów w lokalnym repozytorium (które już istnieją) po edycji .gitignore chcesz to uruchomić na swoim root dir

git rm --cached -r .
git add .

W zasadzie "odświeży" Twoje lokalne repo i usunie ignorowane pliki.

Zobacz:

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

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

 255
Author: plancys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-13 09:03:38

** nigdy wcześniej nie działał poprawnie, ale od git 1.8.2 (marzec, 8th 2013), wydaje się być wyraźnie wspomniany i wspierany:

Wzorce w plikach .gitignore i .gitattributes mogą mieć **/, jako wzorzec, który pasuje do 0 lub więcej poziomów podkatalogu.

Np. "foo/**/bar" dopasowuje "bar" w samym "foo" lub w podkatalogu "foo".

W Twoim przypadku oznacza to, że ta linia może być teraz obsługiwana:

/main/**/bin/
 73
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
[Bb]in/

Pasuje zarówno do wielkich, jak i małych liter

 47
Author: wisbucky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-30 05:32:42

Nie widziałem tego tutaj, ale wygląda na to, że rozróżnia się wielkość liter. Po zmianie na / Bin pliki były ignorowane zgodnie z oczekiwaniami.

 37
Author: Cory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-08 22:00:31

[Bb]in rozwiąże problem, ale... Oto bardziej obszerna lista rzeczy, które powinieneś zignorować (przykładowa lista przez 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*/
 26
Author: Jaider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-03 00:23:22

Krok 1: dodaj następującą zawartość do pliku .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/

Krok 2: Upewnij się, że działają

Jeśli problem nadal istnieje, to dlatego, że ustawienia w .gitignore może ignorować tylko pliki, które były pierwotnienie śledzone . Jeśli niektóre pliki zostały już włączone do systemu kontroli wersji, należy zmodyfikować .gitignore {[4] } jest niepoprawne. Aby całkowicie rozwiązać ten problem, musisz otworzyć Git Bash lub Package Manager Console (zobacz zrzut ekranu poniżej), aby uruchomić następujące polecenia w folderze głównym repozytorium.

git rm -r --cached .
git add .
git commit -m "Update .gitignore"

Konsola PM Wtedy problem zostanie całkowicie rozwiązany.

 25
Author: Bravo Yeung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-04 14:16:34

Jeśli szukasz świetnego pliku globalnego .gitignore do dowolnego rozwiązania Visual Studio (. NET) - polecam skorzystać z tego: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

AFAIK ma najbardziej wszechstronne .gitignore dla projektów. NET.

 19
Author: Jochen van Wylick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-30 14:33:38

Dosłownie żadna z odpowiedzi nie zadziałała na mnie; jedyną, która zadziałała na mnie była (na Linuksie):

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

git version 2.18.0 
 10
Author: AnthonyC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 17:28:24

Jako zawiadomienie;

Jeśli myślisz o .gitignore nie działa w sposób (tak dodany foo/* folder w nim, ale git status nadal pokazując zawartość folderu(ów) jako zmodyfikowaną lub coś w tym stylu), możesz użyć tego polecenia;

git checkout -- foo/*

 5
Author: K-Gun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-17 09:33:27

Dla 2.13.3 i nowszych, pisząc po prostu bin w swoim .plik gitignore powinien ignorować bin oraz wszystkie jego podkatalogi i pliki

Bin

 4
Author: Nikhil Karanjkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-03 16:41:16

Dodanie * * / bin / do .plik gitignore zrobił to za mnie (uwaga: folder bin nie został dodany do indeksu).

 2
Author: Dhwaneel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-14 12:58:39

Jeśli wzorzec wewnątrz .gitignore kończy się ukośnikiem /, znajdzie on tylko dopasowanie do katalogu.

Innymi słowy, bin/ będzie pasował do katalogu bin i ścieżek pod nim, ale nie będzie pasował do zwykłego pliku lub dowiązania symbolicznego bin.


Jeśli wzorzec nie zawiera ukośnika , tak jak w bin Git traktuje go jako wzorzec Shell glob (greedy). Najlepiej więc użyć simple /bin.

bin nie byłoby najlepszym rozwiązaniem dla tego konkretnego problem.

 1
Author: prosti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-29 19:34:20

W moim przypadku kodowanie pliku gitignore było problematyczne, sprawdź czy jest to UTF-8

 0
Author: Jacek Plesnar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-25 20:18:26

Oprócz odpowiedzi @CB Bailey:

Próbowałem usunąć wiele folderów (w podfolderach) o nazwie et-cache (folder buforowania z WordPress divi theme) z indeksu i z śledzonego.

Dodałem

et-cache/

Do pliku .gitignore. Ale

git rm -r --cached et-cache

Spowodowało błąd:

Fatal: pathspec 'et-cache' nie pasował do żadnych plików

Tak więc rozwiązaniem było użycie powershell:
Get-ChildItem et-cache -Recurse |% {git rm -r --cached $_.FullName}

Przeszukuje wszystkie podfoldery o nazwie et-cache. Każdy ścieżka folderów (pełna nazwa) jest następnie używana do usunięcia go ze śledzenia w git.

 0
Author: Norman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-14 11:09:25