Jak mogę usunąć te irytujące .DS_Store
pliki Mac OS X z repozytorium Git?
Jak mogę usunąć te irytujące .DS_Store
pliki Mac OS X z repozytorium Git?
Odpowiedzi:
Usuń istniejące pliki z repozytorium:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Dodaj linię
.DS_Store
do pliku .gitignore
, który można znaleźć na najwyższym poziomie repozytorium (lub utworzyć, jeśli jeszcze go nie ma). Możesz to łatwo zrobić za pomocą tego polecenia w głównym katalogu
echo .DS_Store >> .gitignore
Następnie
git add .gitignore
git commit -m '.DS_Store banished!'
-exec
uruchomi się git-rm
raz dla każdego pliku .DS_Store, podczas gdy xargs
umieści wszystkie ścieżki w jednym wierszu poleceń. Przede wszystkim wolę, xargs
ponieważ nie muszę się martwić ucieczką przed wieloma postaciami specjalnymi.
.DS_Store
do .gitignore
pracy rekurencyjnie? Czy to również zignoruje some/level/of/folders/.DS_Store
?
Łącząc odpowiedzi benzado i webmat, aktualizując git rm
, nie zawodząc na plikach, które nie znajdują się w repozytorium, i czyniąc go ogólnie możliwym do wklejenia dla każdego użytkownika:
# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore
~/.gitignore
jako mojego globalnego pliku wykluczeń jest uciążliwe. Istnieją pliki, które chcę wykluczyć z mojego katalogu domowego, których nie chcę ignorować globalnie. Używam ~/.gitexcludes
zamiast tego za pomocą tej samej dyrektywy:core.excludesfile
Najlepszym rozwiązaniem tego problemu jest globalne ignorowanie tych plików ze wszystkich repozytoriów git w systemie. Można to zrobić, tworząc globalny plik gitignore, taki jak:
vi ~/.gitignore_global
Dodawanie reguł ignorowania plików takich jak:
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
Teraz dodaj ten plik do swojej globalnej konfiguracji git:
git config --global core.excludesfile ~/.gitignore_global
Edytować:
Usunięto ikony, ponieważ mogą być konieczne zatwierdzenie ich jako zasobów aplikacji.
W niektórych sytuacjach możesz też chcieć zignorować niektóre pliki globalnie. Dla mnie .DS_Store jest jednym z nich. Oto jak:
git config --global core.excludesfile /Users/mat/.gitignore
(Lub dowolny wybrany plik)
Następnie edytuj plik tak jak .gitignore repozytorium. Zauważ, że myślę, że musisz użyć absolutnej ścieżki.
Jeśli nie możesz usunąć plików, ponieważ mają one wprowadzone zmiany, użyj:
git rm --cached -f *.DS_Store
Otwórz terminal i wpisz „cd <ProjectPath>”
Usuń istniejące pliki:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
Dodaj .DS_Store
wpisz „ctrl + x”
Wpisz „y”
Wprowadź, aby zapisać plik
git add .gitignore
git commit -m '.DS_Store removed.'
nano .gitignore
tworzy plik, jeśli nie jest obecny, to polecenie należy wykonać z folderu głównego projektu
Najczęściej głosowana odpowiedź jest niesamowita, ale pomagając nowicjuszom takim jak ja, oto jak utworzyć plik .gitignore, edytować go, zapisać, usunąć pliki, które mogłeś już dodać do git, a następnie przesłać plik do Github.
Utwórz plik .gitignore
Aby utworzyć plik .gitignore, możesz po prostu touch
plik, który tworzy pusty plik o określonej nazwie. Chcemy utworzyć plik o nazwie .gitignore, abyśmy mogli użyć polecenia:
touch .gitignore
Zignoruj pliki
Teraz musisz dodać wiersz, który mówi git, aby zignorował pliki DS Store do twojego .gitignore. Aby to zrobić, możesz użyć edytora nano.
nano .gitignore
Nano jest fajny, ponieważ zawiera instrukcje, jak się z niego wydostać. ( Ctrl- Oaby zapisać, Ctrl- Xaby wyjść)
Skopiuj i wklej niektóre pomysły z tej listy Github, która zawiera listę popularnych plików do zignorowania. Najważniejsze, aby odpowiedzieć na to pytanie, to:
# OS generated files #
######################
.DS_Store
.DS_Store?
# To komentarze i pomogą ci uporządkować plik w miarę jego wzrostu.
W tym artykule Github znajdują się także ogólne pomysły i wytyczne.
Usuń pliki już dodane do git
Na koniec musisz usunąć pliki DS Store z katalogu.
Użyj tego wspaniałego polecenia z najlepiej głosowanej odpowiedzi. Spowoduje to przejrzenie wszystkich folderów w katalogu i usunięcie tych plików z git.
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Wciśnij .gitignore w górę do Github
Ostatnim krokiem jest zatwierdzenie pliku .gitignore.
git status
git add .gitignore
git commit -m '.DS_Store banished!'
Musiałem zmienić git-rm na git rm w powyższym celu, aby działał:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
usuń je za pomocą git-rm
, a następnie dodaj .DS_Store, .gitignore
aby zatrzymać dodawanie. Możesz także użyć blueharvest, aby powstrzymać ich od stworzenia wszystkich razem
Jeśli chcesz usunąć pliki DS_Store do każdego folderu i podfolderu:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Zignoruj je przez:
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
Poniższe działało dla mnie najlepiej. Obsługiwane niepasujące pliki oraz pliki z lokalnymi modyfikacjami. Dla porównania było to w systemie Mac 10.7 z systemem git 1.7.4.4.
Znajdź i usuń:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
Globalnie ignoruję również .DS_Store we wszystkich repozytoriach, ustawiając globalny plik core.excludes.
Najpierw utwórz plik (jeśli jeszcze nie istnieje):
touch ~/.gitignore
Następnie dodaj następujący wiersz i zapisz:
.DS_Store
Teraz skonfiguruj git, aby globalnie szanował plik:
git config --global core.excludesfile ~/.gitignore
Odkryłem, że następujący wiersz z snipplr najlepiej czyści wszystko .DS_Store
, w tym ten, który ma lokalne modyfikacje.
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
opcja, zachowuje lokalny, .DS_Store
ponieważ i tak zostanie odtworzony.
I tak jak wspomniano powyżej, dodaj .DS_Store
do pliku .gitignore w katalogu głównym swojego projektu. Wtedy nie będzie już w twoim zasięgu (repozytoriów).
Jestem trochę spóźniony na przyjęcie, ale mam dobrą odpowiedź. Aby usunąć pliki .DS_Store, użyj następujących poleceń z okna terminala, ale zachowaj ostrożność, usuwając pliki za pomocą polecenia „znajdź”. Używanie określonej nazwy z opcją -name jest jednym z bezpieczniejszych sposobów jej użycia:
cd directory/above/affected/workareas
find . -name .DS_Store -delete
Możesz pominąć opcję „-delete”, jeśli chcesz po prostu wymienić je przed i po. To zapewni cię, że ich nie ma.
W odniesieniu do porady ~ / .gitignore_global: bądź ostrożny tutaj. Chcesz umieścić ten ładny plik w .gitignore na najwyższym poziomie każdego workarea i zatwierdzić go, aby każdy, kto klonuje twoje repo, skorzystałby z jego użycia.
To zadziała:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
Usuwa wszystkie pliki, których nazwy kończą się .DS_Store
, w tym ._.DS_Store
.
"*.DS_Store"
, aby gwiazdka była przekazywana do find
powłoki zamiast rozszerzana przez nią.
Z jakiegoś powodu żadne z powyższych nie działało na moim komputerze Mac.
Moje rozwiązanie pochodzi z terminalu:
rm .DS_Store
Następnie uruchom następujące polecenie:
git pull origin master
To zadziałało dla mnie, połączenie dwóch odpowiedzi z góry:
Istnieje kilka rozwiązań tego problemu. Aby uniknąć tworzenia plików .DS_Store, nie używaj wyszukiwarki OS X do przeglądania folderów. Alternatywnym sposobem przeglądania folderów jest użycie wiersza poleceń UNIX. Aby usunąć pliki .DS_Store, można użyć produktu innej firmy o nazwie DS_Store Terminator. Aby usunąć pliki .DS_Store z całego systemu, można użyć polecenia powłoki UNIX. Uruchom terminal z aplikacji: Narzędzia W wierszu poleceń powłoki UNIX wpisz następującą komendę UNIX: sudo find / -name ".DS_Store" -depth -exec rm {} \; Po wyświetleniu monitu o podanie hasła wprowadź hasło administratora Mac OS X.
To polecenie służy do wyszukiwania i usuwania wszystkich wystąpień pliku .DS_Store, zaczynając od katalogu głównego (/) systemu plików na całym komputerze. Aby skonfigurować to polecenie, aby było uruchamiane jako zaplanowane zadanie, wykonaj następujące czynności: Uruchom terminal z aplikacji: Narzędzia W wierszu poleceń powłoki UNIX wprowadź następujące polecenie UNIX:
sudo crontab -e Gdy pojawi się monit o hasło, wprowadź hasło administratora Mac OS X. W edytorze vi naciśnij raz literę I na klawiaturze i wprowadź następujące informacje:
15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;
Nazywa się to wpisem crontab, który ma następujący format:
Minute Hour DayOfMonth Month DayOfWeek Polecenie użytkownika.
Wpis crontab oznacza, że polecenie będzie wykonywane automatycznie przez system codziennie o 01:15 przez konto o nazwie root.
Polecenie zaczyna się od find aż do. Jeśli system nie działa, polecenie to nie zostanie wykonane.
Aby zapisać wpis, naciśnij raz klawisz Esc, a następnie jednocześnie naciśnij Shift + z + z.
Uwaga: informacje w kroku 4 dotyczą wyłącznie edytora vi.
dodaj to do pliku .gitignore
#Ignore folder mac
.DS_Store
zapisz to i dokonaj zatwierdzenia
git add -A
git commit -m "ignore .DS_Store"
a teraz ignorujecie to dla wszystkich swoich zobowiązań
Najlepszym sposobem, aby pozbyć się tego pliku na zawsze i nigdy więcej nie martwić się o to
utwórz globalny plik .gitignore:
echo .DS_Store >> ~ / .gitignore_global
Poinformuj gita, że chcesz użyć tego pliku dla wszystkich swoich repozytoriów:
git config --global core.excludesfile ~ / .gitignore_global I to wszystko! .DS_Store jest na twojej drodze.
Nie trzeba usuwać .DS_STORE
lokalnie
Po prostu dodaj go do .gitignore
pliku
Plik .gitignore jest tylko plikiem tekstowym, który informuje Git, które pliki lub foldery mają zignorować w projekcie.
Polecenia
nano .gitignore
.DS_Store
Następnie kliknijCTRL+X > y > Hit Return
git status
Aby zobaczyć ostatnie zmianygit add .gitignore
git commit -m 'YOUR COMMIT MESSAGE'
git push origin master