Czy istnieje wygodny sposób na zignorowanie wszystkich nieśledzonych plików i folderów w repozytorium git?
(Wiem o .gitignore.)
Więc git statusponownie zapewni czysty wynik.
Czy istnieje wygodny sposób na zignorowanie wszystkich nieśledzonych plików i folderów w repozytorium git?
(Wiem o .gitignore.)
Więc git statusponownie zapewni czysty wynik.
*wola najprawdopodobniej nie będzie tym, czego chcesz.
-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.
Odpowiedzi:
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ć:
git status --porcelain | grep '^??' | cut -c4- >> .gitignore
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:
echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore
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;|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.
-u nonie działa dla mnie. Ale -unotak. Odpowiednio zaktualizowałem odpowiedź. To dziwny projekt dla gita. Jestem na git 1.7.1
Jeśli chcesz trwale zignorować te pliki, prostym sposobem ich dodania .gitignorejest:
git ls-files --others --exclude-standard >> .gitignoreSpowoduje to wyliczenie wszystkich plików w nieśledzonych katalogach, które mogą, ale nie muszą, być tym, czego chcesz.
.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
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).
git status -uno
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ą.
.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 .
-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
-u nonie pokazuje również plików niestacjonarnych. -unodziała zgodnie z oczekiwaniami i wyświetla się bez sceny, ale ukrywa się bez śledzenia.
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
W 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 .gitignoreplik 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
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
git checkout feature-a -- feature-a/.gitignore
git add .
git commit -m "update .gitignore from feature-a branch"