Jak dokładnie dodałeś go do .gitignore? Powinien działać we wszystkich katalogach (działa dla mnie).
Thilo,
To też działa dla mnie. Próbowałem także, gdy jest na końcu pliku, jeśli musisz mieć znak nowej linii (specyficzny dla platformy), ale to nie zmieniło tego, że katalogi .DS_Store w dowolnej części hierarchii były nadal ignorowane.
enorl76,
Pytanie, jakie rozumiem, brzmiało: jak łatwo zignorować wszystkie wystąpienia .DS_Store we wszystkich podkatalogach bez ręcznego wykonywania tego w każdym podkatalogu. Miałem ten sam problem. Poniższa odpowiedź pokazuje, jak ją rozwiązać (ostatnie 2 akapity).
petrsyn
Odpowiedzi:
645
Myślę, że masz problem z tym, że w niektórych wcześniejszych zmianach przypadkowo dodałeś pliki .DS_Store do repozytorium. Oczywiście, gdy plik zostanie wyśledzony w repozytorium, będzie nadal śledzony, nawet jeśli pasuje do wpisu w odpowiednim pliku .gitignore.
Musisz ręcznie usunąć pliki .DS_Store, które zostały dodane do repozytorium. Możesz użyć git rm --cached .DS_Store. Po usunięciu git powinien go zignorować. Należy trzeba następującą linię w pliku .gitignore korzeniowego tylko: .DS_Store. Nie zapomnij okresu!
Wskazówka: ponieważ prawdopodobnie nigdy nie chcesz dołączać plików .DS_Store, stwórz globalną regułę. Najpierw utwórz gdzieś globalny plik .gitignore, np echo .DS_Store >> ~/.gitignore_global. Teraz powiedz git go używać dla wszystkich repozytoriów: git config --global core.excludesfile ~/.gitignore_global.
Ostatnie 2 akapity odpowiadają na to pytanie. Dzięki.
petrsyn
70
´´git rm --cached .DS_Store´´ usuwa tylko jeden .DS_Store z bieżącego katalogu. Użyj „Znajdź”. -nazwa .DS_Store -print0 | xargs -0 git rm --ignore-unmatch´´, aby usunąć wszystkie .DS_Stores z repozytorium
auco
4
Przydatna
14
Zły pomysł na użycie globalnej reguły IMO: Próba utrzymania globalnej konfiguracji dla wielu użytkowników / komputerów nigdy nie działa - chcesz reguł rządzących twoim repozytorium w samym repozytorium. Zgadzam się z tym
Yarin
15
Nie zgadzam się z tobą (Chociaż głosowałem za twoim komentarzem, ponieważ uważam, że jest to wnikliwe.) Jeśli prowadzimy działalność globalną, każdy użytkownik systemu Mac musi to zrobić, ale tylko raz. Jeśli zajmujemy się całym repozytorium, musimy to zrobić dla każdego repozytorium. Nie wiem o tobie, ale ciągle robię nowe repo. Robiąc to globalnie, problem rozwiązuje się raz na zawsze.
Wydaje się, że dodanie -fjest konieczne, jeśli masz otwarte pliki w folderach ponownego udostępnienia:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Mehmet Kaplan
158
Jeśli .DS_Store nigdy nie został dodany do Twojego repozytorium git, po prostu dodaj go do pliku .gitignore.
Jeśli go nie masz, utwórz plik o nazwie
.gitignore
W katalogu głównym aplikacji i po prostu napisz
**/.DS_Store
W tym. To nigdy nie pozwoli, aby plik .DS_Store zakradł się do twojego gita.
@MilanG jest słowem kluczowym, które w zasadzie oznacza „szukaj w tym katalogu i we wszystkich podkatalogach”.
lachie_h
1
Nie jestem pewien, czy to doskonałe wyjaśnienie tego, co oznacza podwójna gwiazdka. To jest symbol wieloznaczny. Może *lub w **zależności od tego, co chcesz osiągnąć. Jest to sposób na powiedzenie powłoce, jak poruszać się po katalogach. Ta odpowiedź stackoverflow wyjaśnia to w pełni stackoverflow.com/a/28199633/4092170
Możesz także dodać --cachedflagę do odpowiedzi auco, aby zachować lokalne pliki .DS_store, jak wspomniał Edward Newell w swojej oryginalnej odpowiedzi. Zmodyfikowane polecenie wygląda tak: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..cheers i dzięki!
Odpowiedzi:
Myślę, że masz problem z tym, że w niektórych wcześniejszych zmianach przypadkowo dodałeś pliki .DS_Store do repozytorium. Oczywiście, gdy plik zostanie wyśledzony w repozytorium, będzie nadal śledzony, nawet jeśli pasuje do wpisu w odpowiednim pliku .gitignore.
Musisz ręcznie usunąć pliki .DS_Store, które zostały dodane do repozytorium. Możesz użyć
git rm --cached .DS_Store
. Po usunięciu git powinien go zignorować. Należy trzeba następującą linię w pliku .gitignore korzeniowego tylko:.DS_Store
. Nie zapomnij okresu!git rm --cached .DS_Store
usuwa tylko.DS_Store
z bieżącego katalogu. Możesz użyć,find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
aby usunąć wszystko.DS_Stores
z repozytorium.Wskazówka: ponieważ prawdopodobnie nigdy nie chcesz dołączać plików .DS_Store, stwórz globalną regułę. Najpierw utwórz gdzieś globalny plik .gitignore, np
echo .DS_Store >> ~/.gitignore_global
. Teraz powiedz git go używać dla wszystkich repozytoriów:git config --global core.excludesfile ~/.gitignore_global
.Ta strona pomogła mi odpowiedzieć na twoje pytanie: https://help.github.com/articles/ignoring-files
źródło
Dodaj
**/.DS_Store
do.gitignore
podkataloguJeśli
.DS_Store
zostało już popełnione:Aby zignorować je we wszystkich repozytoriach: (czasami o nazwie
._.DS_Store
)źródło
git rm --cached your_file
pierwszyfind . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
, z: stackoverflow.com/questions/18393498/…-f
jest konieczne, jeśli masz otwarte pliki w folderach ponownego udostępnienia:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Jeśli .DS_Store nigdy nie został dodany do Twojego repozytorium git, po prostu dodaj go do pliku .gitignore.
Jeśli go nie masz, utwórz plik o nazwie
W katalogu głównym aplikacji i po prostu napisz
W tym. To nigdy nie pozwoli, aby plik .DS_Store zakradł się do twojego gita.
Ale jeśli już tam jest, napisz w swoim terminalu:
następnie zatwierdzić i wcisnąć zmiany, aby usunąć plik .DS_Store ze zdalnego repozytorium:
A teraz dodaj .DS_Store do pliku .gitignore, a następnie ponownie zatwierdź i wypuść z 2 ostatnimi fragmentami kodu (git commit ..., git push ...)
źródło
*
lub w**
zależności od tego, co chcesz osiągnąć. Jest to sposób na powiedzenie powłoce, jak poruszać się po katalogach. Ta odpowiedź stackoverflow wyjaśnia to w pełni stackoverflow.com/a/28199633/4092170Twój plik .gitignore powinien wyglądać następująco:
Dopóki nie dodasz ukośnika, jest on dopasowywany do nazwy pliku we wszystkich katalogach. ( stąd )
źródło
git rm --cached path/to/file/here
Krok 1, usuń wszystkie
*.DS_store
pliki. Można biegaćale pamiętaj, że
rm -f
może to być trochę niebezpieczne, jeśli masz literówkę! Krok drugi: dodajdo .gitignore. To zadziałało dla mnie!
źródło
Dodaj
*.DS_Store
do pliku .gitignore. To działa dla mnie idealnieźródło
Możesz także dodać
--cached
flagę do odpowiedzi auco, aby zachować lokalne pliki .DS_store, jak wspomniał Edward Newell w swojej oryginalnej odpowiedzi. Zmodyfikowane polecenie wygląda tak:find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch
..cheers i dzięki!źródło
Krok: 1) Usuń istniejące pliki za pomocą tego polecenia
odnaleźć . -nazwa .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Krok: 2) Dodaj .DS_Store do pliku .gitignore
Krok: 3) Zatwierdź zmiany w .gitignore git add .gitignore git commit -m "usunięto .DS_Store"
źródło
$ git rm ./*.DS_Store
- usuń wszystkie .DS_Store z git$ echo \.DS_Store >> .gitignore
- w przyszłości zignoruj .DS_Storezatwierdzaj i pchaj
źródło