Dodałem .DS_Store do pliku .gitignore, ale wygląda na to, że ignoruje on tylko .DS_Store w katalogu głównym, a nie w każdym folderze i podfolderze.
Jak to naprawić?
Dodałem .DS_Store do pliku .gitignore, ale wygląda na to, że ignoruje on tylko .DS_Store w katalogu głównym, a nie w każdym folderze i podfolderze.
Jak to naprawić?
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
Dodaj **/.DS_Store
do .gitignore
podkatalogu
Jeśli .DS_Store
zostało już popełnione:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Aby zignorować je we wszystkich repozytoriach: (czasami o nazwie ._.DS_Store
)
echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global
git rm --cached your_file
pierwszy
find . -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
.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.
Ale jeśli już tam jest, napisz w swoim terminalu:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
następnie zatwierdzić i wcisnąć zmiany, aby usunąć plik .DS_Store ze zdalnego repozytorium:
git commit -m "Remove .DS_Store from everywhere"
git push origin master
A teraz dodaj .DS_Store do pliku .gitignore, a następnie ponownie zatwierdź i wypuść z 2 ostatnimi fragmentami kodu (git commit ..., git push ...)
*
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
Twój plik .gitignore powinien wyglądać następująco:
# Ignore Mac DS_Store files
.DS_Store
Dopóki nie dodasz ukośnika, jest on dopasowywany do nazwy pliku we wszystkich katalogach. ( stąd )
git rm --cached path/to/file/here
Krok 1, usuń wszystkie *.DS_store
pliki. Można biegać
git rm -f *.DS_Store
ale pamiętaj, że rm -f
może to być trochę niebezpieczne, jeśli masz literówkę! Krok drugi: dodaj
*.DS_Store
.DS_Store
do .gitignore. To zadziałało dla mnie!
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!
$ git rm ./*.DS_Store
- usuń wszystkie .DS_Store z git$ echo \.DS_Store >> .gitignore
- w przyszłości zignoruj .DS_Storezatwierdzaj i pchaj