2011-11-06 12 views
50

Istnieje już kilka pytań podobnych do tego, ale żadna z odpowiedzi nie działa dla mnie..gitignore zignorować wszystkie pliki następnie rekursywnie zezwalaj * .foo

chcę ignorować wszystko w folderach poniżej mojego repozytorium plików z wyjątkiem * .foo

(Jeśli ktoś zastanawia się w jaki sposób może to być uzasadnione - Jestem rzeczywiście czyni repozytorium git dla wszystkich moich „logiki” projekty - oprogramowanie muzyczne na komputerze Mac - ale chcę tylko przechowywać rzeczywiste pliki projektu * .logic)

Zamierzam przeliterować, więc wszyscy jesteśmy na tym samym talerzu. Oto co zrobić, zaczynając od podstaw:

Setup:

mkdir temp 
cd temp 
mkdir testdir 
cd testdir 
touch include.foo 
touch dontinclude.bad 
cd.. 
git init 
touch .gitignore 

Wklej to na celu .gitignore

# Ignore all 
/* 

# But not these files... 
!.gitignore 
!*.foo 

git status

a jedynym untracked plik to .gitignore

jeśli wpisałem "git add." - brak zmian, tylko .gitignore jest widoczne, a moje 2 pliki są ignorowane.

Dlaczego to nie działa i jak zmienić powyższą procedurę, aby działała?

Oto niezwykle podobne pytanie, z którego otrzymałem plik .gitignore. Używam git --version 1.7.7 (próbował również 1.7.3) - .gitignore to ignore all files, then recursively allows files of a certain type

+0

Czekaj, czy "git dodać .gitignore' i" git commit -m "dodano gitignore" '? – Nic

Odpowiedz

96

Twój problem jest, że wzór na początku /* jest dopasowanie wszystkich plików i katalogów na najwyższym poziomie - w tym testdir, więc wszystko wewnątrz testdir jest ignorowane.

To jest to, co chcesz:

# Ignore everything 
* 
# Don't ignore directories, so we can recurse into them 
!*/ 
# Don't ignore .gitignore and *.foo files 
!.gitignore 
!*.foo 

Po wykonaniu git add . z tej konfiguracji, należy znaleźć masz tylko .gitignore i *.foo pliki wymienione jako zmiany zostały popełnione.

+0

jednak, na marginesie, w mojej prawdziwej wersji świata z plikami .logic, to w tajemniczy sposób nie działa. Odtworzyłem repozytorium git, sprawdziłem milion razy, dokładnie skopiowałem .gitignore, zmieniłem na .logic, find. -name "* .logic" zwraca mnóstwo plików, ale to .gitignore ignoruje wszystkie pliki * .logic ... coś głupiego na pewno się dzieje ... prawdopodobnie warto dodać komentarz, kiedy w końcu go złamam – PandaWood

+0

@PandaWood: Upewnij się, że nie masz 'core.excludesfile' ustawionego w' ~/.gitconfig' wskazującego na plik, który ma wzorzec, który wykluczyłby twoje pliki '* .logic'. – camh

+0

Nie dostałem tego, ale dano mi podpowiedź, kiedy próbowałem załadować te pliki .logic do Dropbox na drugi dzień, to się nie udało. Kolejną wskazówką jest, że dodałem! *. Txt do .gitignore, ponieważ mam kilka plików tekstowych i zaczęły pojawiać się na liście śledzonej, bez obaw. Tak więc "pliki" Logic (np. Bla.logic) są w rzeczywistości "pakietami" - tymi, które klikasz w Mac Finder i wybierają "Pokaż zawartość pakietu" - stąd * .logic w git nie działa ...jak mogę przechowywać te "pliki" w git, to może być moje następne pytanie ;-) – PandaWood

Powiązane problemy