Zaskoczony tyloma błędnymi odpowiedziami. -u nojest źle. -unojest poprawne. -u nopróbuje nadać status pliku o nazwie no! noTo nie argument -u. Aby wymusić nointerpretację jako argument -u, nie może być spacji. Aby to przetestować, zrób touch Invalidi porównaj git status -uInvalidz git status -u Invalid.
Aaron McDaid
Odpowiedzi:
259
Jak już powiedziano, aby wykluczyć ze statusu, użyj:
git status -uno # must be "-uno" , not "-u no"
Jeśli zamiast tego chcesz trwale zignorować aktualnie nieśledzone pliki, możesz z poziomu katalogu głównego swojego projektu uruchomić:
Każde kolejne wywołanie git statusjawnie zignoruje te pliki.
AKTUALIZACJA : powyższe polecenie ma niewielką wadę: jeśli nie masz .gitignorejeszcze pliku, Twój gitignore zignoruje się! Dzieje się tak, ponieważ plik .gitignorejest tworzony przed git status --porcelainwykonaniem. Jeśli więc nie masz .gitignorejeszcze pliku, polecam użycie:
Spowoduje to utworzenie podpowłoki, która kończy się przed utworzeniem .gitignorepliku.
WYJAŚNIENIE POLECENIA, ponieważ otrzymuję dużo głosów (dziękuję!) Myślę, że lepiej trochę wyjaśnię polecenie:
git status --porcelainjest używany zamiast, git status --shortponieważ ręczne stany "Przekaż wynik w łatwym do przeanalizowania formacie dla skryptów. Jest to podobne do krótkiego wyniku, ale pozostanie stabilne w wersjach git i niezależnie od konfiguracji użytkownika." Mamy więc zarówno parsowalność, jak i stabilność;
grep '^??'filtruje tylko te linie zaczynające się od ??, które zgodnie z podręcznikiem statusu git , odpowiadają nieśledzonym plikom;
cut -c4- usuwa pierwsze 3 znaki z każdego wiersza, co daje nam tylko względną ścieżkę do nieśledzonego pliku;
gdy |symbole są rury , które przechodzą wyjście poprzedniego polecenia do wejścia następnego polecenia;
>>i >symbole są operatory przekierowania , które dołączyć wyjście poprzedniego polecenia do pliku lub nadpisów / tworzy nowy plik, odpowiednio.
KOLEJNY WARIANT dla tych, którzy wolą używaćsed zamiast, grepa cutoto inny sposób:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore
cut -c4- usuwa pierwsze 4 znaki z każdego wiersza, co daje nam tylko względną ścieżkę do nieśledzonego pliku; Nie -coznacza początek listy numerów kolumn do wycięcia. I 4-wybiera linię od kolumny 4 do końca, która przecina kolumny 1-3. Więc twoja komenda cut faktycznie usuwa pierwsze 3 znaki z każdego wiersza. Jeśli usunąłeś 4 znaki z wiersza statusu git, takiego jak ten dla tego pliku tutaj ?? app/views/static_pages/contact.html.erb:, należy usunąć pierwszą literę app. Więc polecenie jest poprawne, ale wyjaśnienie jest błędne.
Naprawdę doceniam wyjaśnienie polecenia. Miło jest wiedzieć, co robią losowe polecenia skopiowane z Internetu i pomaga nam wszystkim nauczyć się lepiej korzystać z wiersza poleceń i gita.
Eric Fitting
1
-u nonie działa dla mnie. Ale -unotak. Odpowiednio zaktualizowałem odpowiedź. To dziwny projekt dla gita. Jestem na git 1.7.1
Aaron McDaid
2
@AaronMcDaid: dzięki. Zmiana jest udokumentowana tutaj i omówiona tutaj
Diego
53
Jeśli chcesz trwale zignorować te pliki, prostym sposobem ich dodania .gitignorejest:
Dlaczego to nie daje tylu głosów? Nie ma potrzeby przechodzenia przez 2 inne programy!
JoelFan
6
@JoelFan: dwa powody: 1) ten działa tylko z katalogu głównego gita , podczas gdy zaakceptowany działa z każdego podkatalogu, wystarczy dostosować .gitignoreścieżkę docelową 2) jeśli masz katalog bez śledzenia, ten wyświetla każdy i każdy plik w nim, ale nie sam nieśledzony katalog (więc nie zignorujesz katalogu, a tym samym nadal będziesz zgłaszać przyszłe pliki w katalogu jako nieśledzone, podczas gdy zaakceptowany wyświetla tylko katalog, a nie nieśledzone pliki wewnątrz . To kwestia tego, co chcesz robić, ale często chcesz po prostu zignorować cały reż.
Diego
1
Dziękuję Poolie. Doceniam różnicę w twoich sugestiach ze względu na punkty wspomniane przez @Diego. Zacząłem pracować z biblioteką plików i folderów i nie chcę śledzić / przesyłać oryginalnych plików. Chcę tylko śledzić pliki, które dodam lub odbuduję w bibliotece. Dodanie folderów nadrzędnych spowodowałoby zignorowanie wszystkiego. To / Twoje rozwiązanie dodało wszystkie 1696 plików w mgnieniu oka. xD
Chaos7703
Można to również osiągnąć za pomocą git config status.showUntrackedFiles no.
Parametr mode służy do określania obsługi plików bez śledzenia. Jest opcjonalna: domyślnie all, a jeśli została określona, musi zostać przypisana do opcji (np. -Uno, ale nie -u no).
Cóż, gdyby wszyscy przed wysłaniem postu RTFM, nikt z nas nie otrzymałby żadnego przedstawiciela :-)
Jenny D,
4
Dwie drogi:
użyj argumentu „-uno” do git-status. Oto przykład:
[jenny@jenny_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)
[jenny@jenny_vmware:ft]$ git status -uno
# On branch ft
nothing to commit (working directory clean)
Lub możesz dodać pliki i katalogi do .gitignore, w takim przypadku nigdy się nie pojawią.
Poręczny sposób edytowania .gitignoreistoty git status | cat >> temp && vim temp. Następnie edytuj plik, aby usunąć kilka pierwszych wierszy i ostatnią linię, a także końcowe #i białe spacje po nich. Wtedy cat temp >> .gitignore && rm temp. Jeśli nie .gitignorebyło wcześniej, mv temp .gitignorezrobi. Brzydkie rzeczy, ale lepsze niż .gitignoreręczne aktualizowanie .
sjas
1
Ta odpowiedź jest nieprawidłowa. Prawidłowa odpowiedź brzmi -uno. Jeśli używasz -u no, jest równoważne no -u- zrobi status na pliku o nazwie no(który prawdopodobnie nie istnieje) i użyje -utrybu domyślnego . czyli jest to odpowiednikgit status no
Aaron McDaid
3
-u nonie pokazuje również plików niestacjonarnych. -unodziała zgodnie z oczekiwaniami i wyświetla się bez sceny, ale ukrywa się bez śledzenia.
Nawet to nie jest do końca poprawne. git status -u Xjest równoważne git status X -u( Xnie jest argumentem do -u). To z kolei jest równoważne z git status X(ponieważ -ubez argumentu jest to ustawienie domyślne -u). Dlatego jest to po prostu status git w pliku X. Tak więc, jeśli Xjest noto po prostu stara się zrobić git status na plik o nazwie no, której prawdopodobnie nie masz
Aaron McDaid
2
W przypadku, gdy nie są na Unix jak OS, to będzie działać na systemie Windows za pomocą PowerShell
Jeśli masz dużo plików nieśledzonej i nie chce „ gitignore” wszyscy pamiętać, że, ponieważ git 1.8.3 (kwiecień 2013), 22d , git statuswspomnę --untracked-files=nonawet jeśli nie dodać, że opcja w pierwsze miejsce!
„ git status” sugeruje użytkownikom skorzystanie z --untracked=noopcji, gdy trwa to zbyt długo.
Przyjechałem tutaj, próbując rozwiązać nieco inny problem. Może przyda się to komuś innemu:
Tworzę nowy oddział feature-a. w ramach tej gałęzi tworzę nowe katalogi i muszę zmodyfikować .gitignore, aby usunąć niektóre z nich. Dzieje się tak często podczas dodawania nowych narzędzi do projektu, które tworzą różne foldery pamięci podręcznej. .serverless, .terraformItp
Zanim będę gotowy do scalenia tego z powrotem do mastera, pojawiło się coś innego, więc masterponownie sprawdzam , ale teraz ponownie git statuspodnoszę te wyłączone foldery, ponieważ .gitignore nie zostało jeszcze scalone.
Odpowiedź tutaj jest właściwie prosta, chociaż musiałem znaleźć tego bloga, aby to rozgryźć:
Po prostu pobierz plik .gitignore z feature-aoddziału
*
wola najprawdopodobniej nie będzie tym, czego chcesz.-u no
jest źle.-uno
jest poprawne.-u no
próbuje nadać status pliku o nazwieno
!no
To nie argument-u
. Aby wymusićno
interpretację jako argument-u
, nie może być spacji. Aby to przetestować, zróbtouch Invalid
i porównajgit status -uInvalid
zgit status -u Invalid
.Odpowiedzi:
Jak już powiedziano, aby wykluczyć ze statusu, użyj:
Jeśli zamiast tego chcesz trwale zignorować aktualnie nieśledzone pliki, możesz z poziomu katalogu głównego swojego projektu uruchomić:
Każde kolejne wywołanie
git status
jawnie zignoruje te pliki.AKTUALIZACJA : powyższe polecenie ma niewielką wadę: jeśli nie masz
.gitignore
jeszcze pliku, Twój gitignore zignoruje się! Dzieje się tak, ponieważ plik.gitignore
jest tworzony przedgit status --porcelain
wykonaniem. Jeśli więc nie masz.gitignore
jeszcze pliku, polecam użycie:Spowoduje to utworzenie podpowłoki, która kończy się przed utworzeniem
.gitignore
pliku.WYJAŚNIENIE POLECENIA, ponieważ otrzymuję dużo głosów (dziękuję!) Myślę, że lepiej trochę wyjaśnię polecenie:
git status --porcelain
jest używany zamiast,git status --short
ponieważ ręczne stany "Przekaż wynik w łatwym do przeanalizowania formacie dla skryptów. Jest to podobne do krótkiego wyniku, ale pozostanie stabilne w wersjach git i niezależnie od konfiguracji użytkownika." Mamy więc zarówno parsowalność, jak i stabilność;grep '^??'
filtruje tylko te linie zaczynające się od??
, które zgodnie z podręcznikiem statusu git , odpowiadają nieśledzonym plikom;cut -c4-
usuwa pierwsze 3 znaki z każdego wiersza, co daje nam tylko względną ścieżkę do nieśledzonego pliku;|
symbole są rury , które przechodzą wyjście poprzedniego polecenia do wejścia następnego polecenia;>>
i>
symbole są operatory przekierowania , które dołączyć wyjście poprzedniego polecenia do pliku lub nadpisów / tworzy nowy plik, odpowiednio.KOLEJNY WARIANT dla tych, którzy wolą używać
sed
zamiast,grep
acut
oto inny sposób:źródło
cut -c4-
usuwa pierwsze 4 znaki z każdego wiersza, co daje nam tylko względną ścieżkę do nieśledzonego pliku; Nie-c
oznacza początek listy numerów kolumn do wycięcia. I4-
wybiera linię od kolumny 4 do końca, która przecina kolumny 1-3. Więc twoja komenda cut faktycznie usuwa pierwsze 3 znaki z każdego wiersza. Jeśli usunąłeś 4 znaki z wiersza statusu git, takiego jak ten dla tego pliku tutaj?? app/views/static_pages/contact.html.erb
:, należy usunąć pierwszą literęapp
. Więc polecenie jest poprawne, ale wyjaśnienie jest błędne.-u no
nie działa dla mnie. Ale-uno
tak. Odpowiednio zaktualizowałem odpowiedź. To dziwny projekt dla gita. Jestem na git 1.7.1Jeśli chcesz trwale zignorować te pliki, prostym sposobem ich dodania
.gitignore
jest:git ls-files --others --exclude-standard >> .gitignore
Spowoduje to wyliczenie wszystkich plików w nieśledzonych katalogach, które mogą, ale nie muszą, być tym, czego chcesz.
źródło
.gitignore
ścieżkę docelową 2) jeśli masz katalog bez śledzenia, ten wyświetla każdy i każdy plik w nim, ale nie sam nieśledzony katalog (więc nie zignorujesz katalogu, a tym samym nadal będziesz zgłaszać przyszłe pliki w katalogu jako nieśledzone, podczas gdy zaakceptowany wyświetla tylko katalog, a nie nieśledzone pliki wewnątrz . To kwestia tego, co chcesz robić, ale często chcesz po prostu zignorować cały reż.git config status.showUntrackedFiles no
.Znalazłem to w instrukcji
git status -uno
źródło
Dwie drogi:
użyj argumentu „-uno” do git-status. Oto przykład:
Lub możesz dodać pliki i katalogi do .gitignore, w takim przypadku nigdy się nie pojawią.
źródło
.gitignore
istotygit status | cat >> temp && vim temp
. Następnie edytuj plik, aby usunąć kilka pierwszych wierszy i ostatnią linię, a także końcowe#
i białe spacje po nich. Wtedycat temp >> .gitignore && rm temp
. Jeśli nie.gitignore
było wcześniej,mv temp .gitignore
zrobi. Brzydkie rzeczy, ale lepsze niż.gitignore
ręczne aktualizowanie .-uno
. Jeśli używasz-u no
, jest równoważneno -u
- zrobi status na pliku o nazwieno
(który prawdopodobnie nie istnieje) i użyje-u
trybu domyślnego . czyli jest to odpowiednikgit status no
-u no
nie pokazuje również plików niestacjonarnych.-uno
działa zgodnie z oczekiwaniami i wyświetla się bez sceny, ale ukrywa się bez śledzenia.źródło
git status -u X
jest równoważnegit status X -u
(X
nie jest argumentem do-u
). To z kolei jest równoważne zgit status X
(ponieważ-u
bez argumentu jest to ustawienie domyślne-u
). Dlatego jest to po prostu status git w plikuX
. Tak więc, jeśliX
jestno
to po prostu stara się zrobić git status na plik o nazwieno
, której prawdopodobnie nie maszW przypadku, gdy nie są na Unix jak OS, to będzie działać na systemie Windows za pomocą PowerShell
git status --porcelain | ?{ $_ -match "^\?\? " }| %{$_ -replace "^\?\? ",""} | Add-Content .\.gitignore
Jednak
.gitignore
plik musi mieć nową pustą linię, w przeciwnym razie doda tekst do ostatniej linii, bez względu na to, czy będzie zawierała zawartość.To może być lepsza alternatywa:
$gi=gc .\.gitignore;$res=git status --porcelain|?{ $_ -match "^\?\? " }|%{ $_ -replace "^\?\? ", "" }; $res=$gi+$res; $res | Out-File .\.gitignore
źródło
Jeśli masz dużo plików nieśledzonej i nie chce „
gitignore
” wszyscy pamiętać, że, ponieważ git 1.8.3 (kwiecień 2013), 22d ,git status
wspomnę--untracked-files=no
nawet jeśli nie dodać, że opcja w pierwsze miejsce!źródło
Przyjechałem tutaj, próbując rozwiązać nieco inny problem. Może przyda się to komuś innemu:
Tworzę nowy oddział
feature-a
. w ramach tej gałęzi tworzę nowe katalogi i muszę zmodyfikować .gitignore, aby usunąć niektóre z nich. Dzieje się tak często podczas dodawania nowych narzędzi do projektu, które tworzą różne foldery pamięci podręcznej..serverless
,.terraform
ItpZanim będę gotowy do scalenia tego z powrotem do mastera, pojawiło się coś innego, więc
master
ponownie sprawdzam , ale teraz ponowniegit status
podnoszę te wyłączone foldery, ponieważ .gitignore nie zostało jeszcze scalone.Odpowiedź tutaj jest właściwie prosta, chociaż musiałem znaleźć tego bloga, aby to rozgryźć:
Po prostu pobierz plik .gitignore z
feature-a
oddziałuźródło