2014-05-17 13 views
35

Bez względu na to, co umieścić w .gitignore mogę nie get git ignorować plik UserInterfaceState.xcuserstate poniżej:gitignore nie ignorując plik

$ git status 
On branch master 
Your branch is up-to-date with 'origin/master'. 

Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    modified: .gitignore 
    modified: CalFoo.xcodeproj/project.xcworkspace/xcuserdata/wcochran.xcuserdatad/UserInterfaceState.xcuserstate 

Używam/edycję pliku .gitignore wymienione na this post. Próbowałem wszystko, aby dopasować wzór, w tym dokładną nazwę ścieżki: CalFoo.xcodeproj/project.xcworkspace/xcuserdata/wcochran.xcuserdatad/UserInterfaceState.xcuserstate bezskutecznie.

Ten szczególny problem wynika z przepływu pracy, w którym Xcode jest używane do utworzenia początkowego repozytorium git, a następnie dodawany jest plik .gitignore z here. Bardziej ogólną odpowiedź na ignorowanie wcześniej śledzonych plików w git można znaleźć pod numerem this question (Chyba nigdy nie znalazłem tego wpisu w moich poszukiwaniach, ponieważ w tytule nie było "gitignore").

+0

Prawdopodobny duplikat [Zatrzymaj śledzenie i zignoruj ​​zmiany w pliku w Git] (http://stackoverflow.com/questions/936249/stop-tracking-and-ignore-changes-to-a-file-in-git) – Unicornist

+0

@Unicornist nie jest duplikatem - chcę, aby określony plik został usunięty i zignorowany * wszędzie *, podczas gdy inne pytanie wymaga, aby pewne pliki nie były śledzone na całym świecie. – wcochran

Odpowiedz

60

Można ignorować tylko niewersjonowane pliki, ale ten plik jest już znany git.

Jeśli chcesz, żeby git śledził ten plik, nie musisz mówić git, aby go ignorował.

Jeśli nie chcesz, aby Git śledził użycie tego pliku, skorzystaj z git rm i zacznie działać reguła ignorowania.

Ostrzeżenie: git rm usunie plik. Użyj git rm --cached, aby usunąć z repozytorium, ale nie z dysku.

+16

Uwaga, 'git rm' usunie plik. Użyj 'git rm --cached', aby usunąć z repozytorium, ale nie z dysku. – Darkhogg

+0

Dzięki @michas i Darkhogg - nie jest teraz śledzony przez get i jest usuwany z repozytorium. – wcochran

+2

Ta odpowiedź odpowiada temu, w co kiedyś wierzyłem: ale dzisiaj mam plik, który jest w .gitignore, nie jest kontrolowany, i nadal wyświetla się w "statusie git" jako plik nieskrakowany (jego nazwa to "kompilacja")). Nie pomaga żadna ilość "git rm build" ani dotykanie .gitignore. Jakieś pomysły? – Stabledog

10

Miałem ten sam problem.

Pierwszy popełnić żadnych zaległych zmian w kodzie, a następnie uruchom polecenie:

git rm -r --cached . 

usuwa żadnych zmienionych plików z indeksu (poczekalnia), a następnie po prostu uruchomić:

git add . 

Commit to:

git commit -m ".gitignore working now" 

Aby cofnąć git rm --cached nazwa pliku, użyj git dodaj nazwę pliku.