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.
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.
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;|
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
Gdybym nie osiągnął mojego limitu f # $%, zdecydowanie bym to zrobił. – sjas
'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
@ 7stud: dziękuję, masz rację, napisałem 4 przez pomyłkę. Naprawiłem odpowiedź. – Diego
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.
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
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' –
Znaleziono go w the manual
git status -uno
Cóż, jeśli wszyscy mieliby RTFM przed wysłaniem, nikt z nas nigdy nie otrzymałby rep :-) –
Ale ten post nie odpowiada na pytanie. RTQ wydaje się bardziej odpowiedni. –
@ Sridhar-Sarnobat Moja odpowiedź odpowiada na moje pytanie, więc nie rozumiem, co próbujesz powiedzieć? – sjas
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.
nie wyświetla również nieobjętych programem plików. -uno
działa zgodnie z oczekiwaniami i pokazuje niezarejestrowane, ale ukrywa nieśledzone.
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 –
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
Dlaczego to nie daje tyle głosów? Nie ma potrzeby przechodzenia przez 2 inne programy! – JoelFan
@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
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
Wykorzystanie '-uno' flag. – nhahtdh
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
Albo możesz chcieć dodać pojedynczy * do pliku .gitignore. :) – vilicvane