ignorowanie dowolnego katalogu „bin” w projekcie git


1236

Mam taką strukturę katalogów:

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

W katalogu głównym i narzędziach oraz w każdym innym katalogu, na dowolnym poziomie, może znajdować się katalog „bin”, który chcę zignorować (i chcę też zignorować wszystko pod nim). Próbowałem każdego z tych wzorów 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 wzorzec (ten, który moim zdaniem 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ę modyfikować .gitignore za każdym razem, gdy dodam nowy.

Jest to w systemie Windows przy użyciu najnowszej msysgit.

EDYCJA: jeszcze jedno, są pliki i katalogi, które mają w swoich nazwach podciąg „bin”, nie chcę, aby były ignorowane :)


14
Prawdopodobnie ktoś uzna za pomocny: jeśli masz kilka repozytoriów, a każdy ma ten sam plik .gitignore, możesz umieścić go w „wspólnej” lokalizacji i uruchomić> git config --global core.excludesfile ~ / .gitignore_global Ostatni parametr to ścieżka do wspólnej lokalizacji. PS Jestem nowy i nie jestem pewien, czy to zalecenie dotyczące najlepszych praktyk. Daj mi znać, jeśli nie chcesz tego robić. Dziękuję Ci.
Budda

**Składnia wydaje teraz (marzec 2013 git 1.8.2) oficjalnie udokumentowane zobacz moją odpowiedź poniżej
VonC

2
Jeśli ktoś chce przeczytać najnowszą wersję rzeczywistej strony podręcznika, zobacz gitignore (5) .

bardziej przyjazna opcja, jeśli masz dość czytania esejów o wartości jednej linii atlassian.com/git/tutorials/saving-changes/…
suazithustra

Odpowiedzi:


1834

Przed wersją 1.8.2 **nie miał żadnego specjalnego znaczenia w .gitignore. Począwszy od 1.8.2 git obsługuje **zero lub więcej podkatalogów (patrz informacje o wersji ).

Sposobem na zignorowanie wszystkich katalogów zwanych bin gdziekolwiek poniżej bieżącego poziomu w drzewie katalogów jest użycie .gitignorepliku ze wzorem:

bin/

Na manstronie znajduje się przykład ignorowania katalogu nazwanego fooza pomocą analogicznego wzorca.

Edycja: Jeśli masz już w katalogu git jakieś foldery bin, których nie chcesz już śledzić, musisz je jawnie usunąć. Git nie przestanie śledzić ścieżek, które są już śledzone tylko dlatego, że teraz pasują do nowego .gitignorewzorca. Wykonaj folder usuń ( rm ) tylko z indeksu ( --cached ) rekurencyjnie ( -r ). Przykład wiersza poleceń dla folderu głównego bin:

git rm -r --cached bin

72
Począwszy od git 1.8.2, będzie git przyjąć **w .gitignoreplikach (źródło: 1.8.2 changelog )
Carlos Campderrós

15
jest bintaki sam bin/?
Nisba,

29
@Nisba, są różne, binzignorują pliki o nazwie bin, natomiast bin/dotyczą katalogów o nazwie bin
Rani Kheir

8
odkąd się przewróciłem: nazwa folderu w git-command rozróżnia duże i małe litery :) „bin! = Bin” - może oszczędzę komuś kilka minut na tę wskazówkę :)
dba

1
W Windows 10 nie można utworzyć plik .gitignore, trzeba stworzyć gitignore.txt a następnie uruchomić ren gitignore.txt .gitignore w wiersza poleceń, aby utworzyć ten plik
shabby

463

.gitignoreO swoim śnie wydaje się być:

bin/

na najwyższym poziomie.


Dziękuję bardzo za pomoc, po prostu nie zapomnij wyrejestrować zignorowanego przykładu plików: git checkout bin *
Chris Sim

1
umieść to w gitignore_global
μολὼν.λαβέ

@Glexander, dlaczego miałoby być globalnym ignorowaniem bin / katalogów? Często mają wersjonowaną treść. Globalne ignorowanie nie wpłynie na innych użytkowników repozytorium.
Michael Krelin - haker

234

Myślę, że warto wspomnieć o początkujących gitach:

Jeśli plik jest już zalogowany i chcesz go zignorować, Git nie zignoruje pliku, jeśli dodasz regułę później . W takich przypadkach należy najpierw wyśledzić plik, uruchamiając w terminalu następującą komendę:

git rm --cached

Więc jeśli chcesz, aby add zignorował niektóre katalogi w lokalnym repozytorium (które już istnieją) po edycji .gitignore, chcesz uruchomić to w katalogu głównym

git rm --cached -r .
git add .

Zasadniczo „odświeży” twoje lokalne repozytorium i rozpuści ignorowane pliki.

Widzieć:

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

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


jeśli zwykle robię a git add -Adla moich zatwierdzeń, czy mogę tego użyć? i czy mogę również zamienić kropkę na -A w pierwszym wierszu?
ajax333221

69

**Nigdy właściwie pracował wcześniej, ale ponieważ git 1.8.2 (marzec, 8 2013) , wydaje się być wyraźnie wymienione i obsługiwane:

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

Np. „foo/**/bar ” Pasuje do „ bar” w „ foo” samej lub w podkatalogu „ foo”.

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

/main/**/bin/

46
[Bb]in/

dopasowuje zarówno duże, jak i małe litery


2
[B]in/być jedyną wielką literą
Gank

Jak pozwolić Binignorować tylko folder i zezwolić binna git? [B]in/popełni zarówno Bini bin.
Gank

4
Powinno to zrobić, @Gank: Bin/ !bin/
Marco G

34

Nie widziałem tego tutaj wymienionego, ale wydaje się, że wielkość liter ma znaczenie. Po zmianie na / Bin pliki zostały zignorowane zgodnie z oczekiwaniami.


3
To nie jest odpowiedź na pierwotne pytanie, o którym wprost binnie było Bin.
CB Bailey,

49
Choć nie jest odpowiedzią, przyczynia się do kompletności dla innych osób szukających tego samego problemu (ja, właśnie teraz).
Jay

25

[Bb]in rozwiąże problem, ale ... Oto obszerniejsza lista rzeczy, które należy zignorować (przykładowa lista 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*/

3
Uwaga: takie rzeczy powinny znajdować się w GLOBALNYM gitignore (zwykle w twoim katalogu domowym). Projekt gitignore powinien ignorować tylko rzeczy specyficzne dla twojego projektu (tj. Pliki .o dla aplikacji C.)
BraveNewCurrency


18

Krok 1: Dodaj następującą treść 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 zadziałają

Jeśli problem nadal występuje, to dlatego, że ustawienia .gitignore mogą ignorować tylko pliki, które nie były pierwotnie śledzone . Jeśli niektóre pliki zostały już uwzględnione w systemie kontroli wersji, modyfikacja .gitignore jest nieprawidłowa. Aby całkowicie rozwiązać ten problem, musisz otworzyć Git Bash lub konsolę Menedżera pakietów (patrz 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.


8

Dosłownie żadna z odpowiedzi nie działała dla mnie; jedynym, który działał dla mnie był (w systemie Linux):

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

git version 2.18.0 

Czy to zignorowało również wszystkie foldery wymienione binw podkatalogach?
vineeshvs

5

Jako zawiadomienie;

Jeśli uważasz, że .gitignorenie działa w żaden sposób (więc dodałeś do niego foo/*folder, ale git statusnadal wyświetla zawartość zmodyfikowanych folderów lub coś w tym stylu), możesz użyć tego polecenia;

git checkout -- foo/*


3

w wersji 2.13.3 i nowszych zapisywanie tylko bin w pliku .gitignore powinno zignorować bin oraz wszystkie jego podkatalogi i pliki

kosz


2

Dodanie ** / bin / do pliku .gitignore pomogło mi (uwaga: folder bin nie został dodany do indeksu).


1

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

Innymi słowy, bin/dopasuje katalog bini ścieżki pod nim, ale nie będzie pasował do zwykłego pliku ani dowiązania symbolicznego bin.


Jeśli wzór nie zawiera ukośnika , tak jak w binGit traktuje go jako wzór globu powłoki (zachłanny). Więc najlepiej byłoby użyć prostego /bin.

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


Miałeś na myśli „zacząć od” a /?
vineeshvs

0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.