2010-07-21 15 views
5

Jestem nowym użytkownikiem Gita i używam go do tworzenia kopii zapasowej projektu iPhone, nad którym pracuję. Dodałem listę plików, które Git powinien zignorować (pliki xcode) podczas aktualizacji, ale ten plik .perspectivev3 (który jest w moim pliku .gitignore) pojawia się, kiedy idę zatwierdzić moje zmiany. Czy ktoś wie, dlaczego tak jest, lub co robię źle?Nie ignoruj ​​niektórych plików Xcode w .gitignore

Dzięki,

Zach

To jest to, co jest w moim pliku .gitignore:

# xcode noise 
*.mode1v3 
*.pbxuser 
*.perspective 
*.perspectivev3 
*.pyc 
*~.nib/ 
build/* 

# Textmate - if you build your xcode projects with it 
*.tm_build_errors 

# old skool 
.svn 

# osx noise 
.DS_Store 
profile 
+0

Co masz na myśli "idź, aby zatwierdzić moje zmiany"? Niezarejestrowane niezaindowane pliki pojawiają się tylko ze statusem "git" i takim –

+1

Może to być głupie pytanie, ale czy kiedykolwiek popełniłeś wcześniej .perspectivev3 lub dodałeś go do indeksu przed zaktualizowaniem pliku gitignore? –

Odpowiedz

9

Jeśli zachować wyświetlane w git status, musi zostały dodane lub popełnione przed .

Trzeba

  • git rm --cached tego pliku, aby dla git status nie wystawiaj go już (to jest właśnie dodane, ale jeszcze nie zatwierdzone).
  • git rm tego pliku, jeżeli został wcześniej popełnione (zob this question for instance)
+0

Porada dotycząca git rm --cached jest niepoprawna. Zobacz moją odpowiedź poniżej. – jpswain

+0

git rm --cached służy do usuwania pliku tylko z lokalnego repo. Dokładnie to chciałem zrobić –

3

.gitignore dotyczy tylko plików nieśledzonej. Jeśli masz pliki git-add'ed, które w przeciwnym razie są nieśledzone z powodu .gitignore, nadal będą częścią repozytorium.

Wystarczy usunąć pliki z repozytorium nie chcesz już:

git rm *.perspectivev3 
+1

Hej, dodałem ten nieznośny plik, zanim dodałem go do pliku ignorującego. Usunąłem plik, a kiedy próbowałem dokonać zmiany, plik już tam nie był, więc twoja rada zadziałała. Dzięki chłopaki. – agentbanks217

+0

@Zach Banki Zaznaczę jedną z tych odpowiedzi jako zaakceptowaną, więc otrzymają kredyt, a inni użytkownicy wiedzą, że pytanie zostało rozwiązane. – Edd

8

Można użyć

$ git rm --cached ./whatever1.txt

po coś jest już pod kontrolą wersji.

W rzeczywistości, jeśli masz „whatever1.txt” pod kontrolą wersji i chcesz go usunąć z git, ale pozostawić swoje drzewo roboczą niezakłócony, a potem po prostu to zrobić:

$ git rm --cached ./whatever1.txt 
$ echo /whatever1.txt >> ${PROJECT_ROOT}/.gitignore 
$ git status # this will now show ./whatever1 as "deleted" (from git, not your working tree, and will show gitignore as modified or created) 
$ git commit -a 

I to wszystko.

używać tylko

$ git rm

gdy chcemy usunąć plik zarówno z drzewa pracy I repo git.

CAVEAT: Prawdopodobny scenariusz, który można wykorzystać do usuwania plików specyficznych dla IDE z git. W tym przykładzie "whatever1" oznacza Twoje pliki IDE, które usuwasz. Jeśli pracujesz nad projektem z kilkoma osobami i przenosisz ten zestaw zmian do wspólnego repo, wtedy ich pliki "./whatever1" zostaną usunięte po pobraniu tego zestawu zmian. Łatwa rzecz do zrobienia stąd dla ludzi w miejscu docelowym jest:

$ git checkout 1215ef -- ./file-you-want-to-restore ./another-file ./another-etc 

(gdzie 1215ef reprezentuje ostatni popełnić przed usunięciem)

To ma wpływ na przywrócenie tych plików, które były obecne na ich ostatni commit przed ciągnięciem.Po wykonaniu tych czynności pliki te będą bezpieczne i nie będą wyświetlane jako niezajęte b/c, które będą objęte wyłączeniem gitignore.

Powodzenia!

Powiązane problemy