2012-07-18 22 views
88

Czy jest przydatny sposób, aby zignorować wszystkie nieśledzone pliki i foldery w repozytorium git?
(Wiem o .gitignore.)git: Jak zignorować wszystkie obecne nieśledzone pliki?

Tak więc git status zapewni ponownie czysty wynik.

+3

Wykorzystanie '-uno' flag. – nhahtdh

+0

możliwy duplikat [czy istnieje sposób, aby uzyskać git nie pokazywać nieśledzonych plików?] (Http://stackoverflow.com/questions/2774416/is-there-a-way-to-get-git-not-to -show-the-untracked-files) – random

+0

Albo możesz chcieć dodać pojedynczy * do pliku .gitignore. :) – vilicvane

Odpowiedz

202

Jak już zostało powiedziane, aby wykluczyć ze statusu wystarczy użyć:

git status -uno # must be "-uno" , not "-u no" 

Jeśli zamiast tego chcesz trwale ignorować pliki aktualnie nieśledzone Można z źródło projektu, uruchom:

git status --porcelain | grep '^??' | cut -c4- >> .gitignore 

Każde kolejne połączenie z numerem git status spowoduje jawne zignorowanie tych plików.

UPDATE: powyższe polecenie ma niewielką wadę: jeśli nie ma pliku .gitignore jeszcze swoją gitignore zignoruje się! Dzieje się tak, ponieważ plik .gitignore zostanie utworzony przed wykonaniem git status --porcelain. Więc jeśli nie masz jeszcze pliku .gitignore Polecam przy użyciu:

echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore 

Stwarza podpowłoce który uzupełnia przed utworzeniu pliku .gitignore.

POLECENIE WYJAŚNIENIE jak Dostaję dużo głosów (dziękuję!), Myślę, że lepiej wyjaśnić Komenda trochę:

  • git status --porcelain jest używany zamiast git status --short ponieważ manual państw " Podaj dane wyjściowe w łatwym do przeanalizowania formacie skryptów, który jest podobny do krótkiego wyjścia, ale pozostanie stabilny w wersjach git i niezależnie od konfiguracji użytkownika."Mamy więc zarówno parseability i stabilności;
  • grep '^??' filtry jedynie linie rozpoczynające ??, który, zgodnie z git status manual odpowiadają na nieśledzonej plików,
  • cut -c4- usuwa pierwsze 3 znaki z każdej linii, co daje nam tylko względna ścieżka do pliku nieśledzonej;
  • z | symbole są pipes, które przechodzą wyjście poprzedniego polecenia do wejścia następnego polecenia;
  • >> i > symbole są redirect operators, który dołączy wyjście pr evious polecenia do pliku lub nadpisuje/tworzy nowy plik, odpowiednio.

inny wariant dla tych, którzy wolą using sed zamiast grep i cut, oto inny sposób:

git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore 
+1

Gdybym nie osiągnął mojego limitu f # $%, zdecydowanie bym to zrobił. – sjas

+2

'cut -c4-' ** usuwa pierwsze 4 znaki z każdej linii, co daje nam tylko względną ścieżkę do niezatwierdzonego pliku; ** Nr "-c" oznacza początek listy numerów kolumn do wycięcia. Natomiast '4-' * wybiera * linię z kolumny 4 na koniec, co powoduje cięcie kolumn 1-3. Tak więc polecenie wycięcia faktycznie usuwa pierwsze 3 znaki z każdej linii. Jeśli usunąłeś 4 znaki z linii statusu git, takie jak tutaj dla tego pliku: '?? app/views/static_pages/contact.html.erb', usuniesz pierwszą literę 'app'. Polecenie jest poprawne, ale wyjaśnienie jest błędne. – 7stud

+0

@ 7stud: dziękuję, masz rację, napisałem 4 przez pomyłkę. Naprawiłem odpowiedź. – Diego

2

dwa sposoby:

użyć argumentu "-uno" do git-statusu. Oto przykład:

[[email protected]_vmware:ft]$ git status 
# On branch ft 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  foo 
nothing added to commit but untracked files present (use "git add" to track) 
[[email protected]_vmware:ft]$ git status -uno 
# On branch ft 
nothing to commit (working directory clean) 

Albo można dodawać pliki i directires do .gitignore, w którym to przypadku nie będzie widoczny.

+2

Poręczny sposób edytowania '.gitignore' będącego statusem' git | cat >> temp && vim temp'. Następnie edytujemy plik, tak aby usunięte zostały pierwsze linie i ostatnia linia, a także ciąg "#" i spacje po nim. Następnie 'cat temp >> .gitignore && rm temp'. Jeśli wcześniej nie było pliku '.gitignore', zrobi to' mv temp .gitignore'. Brzydkie rzeczy, ale lepsze niż ręczne aktualizowanie '.gitignore'. – sjas

+1

Ta odpowiedź jest niepoprawna. Poprawną odpowiedzią jest '-uno'. Jeśli użyjesz '-u no', jest to odpowiednik' no -u' - spowoduje to status w pliku o nazwie 'no' (który prawdopodobnie nie istnieje) i użyje domyślnego trybu' -u'. to znaczyjest odpowiednikiem 'git status no' –

10

Znaleziono go w the manual

git status -uno

+29

Cóż, jeśli wszyscy mieliby RTFM przed wysłaniem, nikt z nas nigdy nie otrzymałby rep :-) –

+4

Ale ten post nie odpowiada na pytanie. RTQ wydaje się bardziej odpowiedni. –

+1

@ Sridhar-Sarnobat Moja odpowiedź odpowiada na moje pytanie, więc nie rozumiem, co próbujesz powiedzieć? – sjas

1

Jeśli masz dużo nieśledzonej plików, a nie chcemy " gitignore "wszystkie z nich, pamiętaj, że od git 1.8.3 (April, 22d 2013), git status wymienisz --untracked-files=no, nawet jeśli nie dodałeś tej opcji w pierwszej kolejności!

"git status" sugeruje użytkownikom korzystanie z opcji --untracked=no, gdy trwa to zbyt długo.

4

nie wyświetla również nieobjętych programem plików. -uno działa zgodnie z oczekiwaniami i pokazuje niezarejestrowane, ale ukrywa nieśledzone.

+0

Nawet to nie jest całkiem poprawne. 'git status -u X' jest równoważny' git status X -u' ('X' nie jest argumentem do' -u'). To z kolei jest równoważne 'git status X' (ponieważ' -u' bez argumentu jest domyślnym '-u'). Dlatego jest to po prostu status git w pliku 'X'. Tak więc, jeśli 'X' to' nie', to po prostu próbuje zrobić status git na pliku o nazwie 'no', którego prawdopodobnie nie masz –

31

Jeśli chcesz trwale ignorować tych plików, to prosty sposób, aby dodać je do .gitignore jest

git ls-files --others --exclude-standard >> .gitignore 
+3

Dlaczego to nie daje tyle głosów? Nie ma potrzeby przechodzenia przez 2 inne programy! – JoelFan

+3

@JoelFan: dwa powody: 1) ** ten działa tylko z katalogu głównego git **, podczas gdy akceptowany działa z każdego podkatalogu, wystarczy zmienić docelową ścieżkę '.gitignore' 2), jeśli masz nieśledzony katalog, ** ta lista zawiera każdy pojedynczy plik, ale nie sam katalog nieśledzony ** (więc nie zignorujesz katalogu, a tym samym nadal będziesz raportować przyszłe pliki w katalogu jako nieśledzone, podczas gdy akceptowany zawiera tylko katalog, a nie nieodtworzone pliki wewnątrz. Jest to kwestia tego, co chcesz zrobić, ale często po prostu chcesz zignorować cały katalog – Diego

+1

Dziękuję Poolie, doceniam różnicę * * Twojej sugestii * ponieważ * punktów wymienionych przez @Diego zacząłem pracować z biblioteką plików i folderów i nie chcę śledzić/wypychać oryginalnych plików. Chcę tylko śledzić pliki, które dodaję lub przebudowuję w bibliotece. rocznie wynajem folderów zignoruje wszystko. To/twoje rozwiązanie dodało wszystkie 1696 plików w mgnieniu oka. xD – Chaos7703

Powiązane problemy