2011-09-30 10 views
6

Wiem, że istnieje wiele pytań na temat ignorowania katalogów i do tej pory zwykle nie miałem żadnych problemów, ale teraz utknąłem w czymś, czego nie rozumiem.Dlaczego git ignoruje wszystkie pliki w katalogu poza jednym?

Oto moja struktura katalogów:

/src 
/war 
    com.example.MyProject/ 
    WEB-INF/ 
    classes/ 
    deploy/ 
    lib/ 

chcę ignorować zawartość katalogów classes/, deploy/ i com.example.MyProject/, a tu jest mój plik .gitignore:

*.log 
war/WEB-INF/classes/ 
war/WEB-INF/deploy/ 
com.example.MyProject/ 

Pliki są automatycznie pod com.example.MyProject/ wygenerowany, a git ignoruje wszystkie z nich oprócz pliku o nazwie com.example.MyProject.nocache.js. W rzeczywistości, kiedy robię git status uzyskać:

# On branch myBranch 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# 
#  modified: .gitignore 
#  ...... 
#  modified: war/com.example.MyProject/com.example.MyProject.nocache.js 

Dlaczego git odmówić ignorować tego jednego pliku w tym katalogu? Co ja robię źle?

Odpowiedz

5

Jeśli plik jest już śledzony przez Git, dodanie go do .gitignore nie powstrzyma Git od śledzenia go. Będziesz musiał wykonać git rm --cached <file>, aby zachować plik w swoim drzewie, a następnie go zignorować.

+0

głupi ja! które zostały przypadkowo dodane w poprzednim commit: po prostu musiałem go usunąć. Dzięki! – MarcoS

+0

Dla egit użytkowników projektu> zespół> untrack, spowoduje to usunięcie wszystkich plików w tym folderze (usunięcie ich), a następnie zatwierdzenie zmiany –

5

Jeśli plik został już dodany do indeksu, pozostanie w nim, nawet jeśli dodasz go do pliku .gitignore.

Spróbuj usunąć plik z indeksu git:

git rm --cached war/com.example.MyProject/com.example.MyProject.nocache.js 

Opcja --cached zapewnia, że ​​plik pozostaje w folderze i tak zostanie usunięty z indeksu

+1

+1 dla dodatkowego wyjaśnienia: "Opcja --cached zapewnia, że ​​plik pozostaje w twoim folder i po prostu zostanie usunięty z indeksu ". –

Powiązane problemy