Czy istnieje wygodny sposób na zignorowanie wszystkich nieśledzonych plików i folderów w repozytorium git?
(Wiem o .gitignore
.)
Więc git status
ponownie 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 status
ponownie zapewni czysty wynik.
*
wola najprawdopodobniej nie będzie tym, czego chcesz.
-u no
jest źle. -uno
jest poprawne. -u no
próbuje nadać status pliku o nazwie no
! no
To nie argument -u
. Aby wymusić no
interpretację jako argument -u
, nie może być spacji. Aby to przetestować, zrób touch Invalid
i porównaj git status -uInvalid
z 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 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 przed git status --porcelain
wykonaniem. Jeśli więc nie masz .gitignore
jeszcze pliku, polecam użycie:
echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore
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
a cut
oto 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 -c
oznacza 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 no
nie działa dla mnie. Ale -uno
tak. 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 .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.
.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ą.
.gitignore
istoty 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 .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żne no -u
- zrobi status na pliku o nazwie no
(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.
git status -u X
jest równoważne git status X -u
( X
nie jest argumentem do -u
). To z kolei jest równoważne z git status X
(ponieważ -u
bez argumentu jest to ustawienie domyślne -u
). Dlatego jest to po prostu status git w pliku X
. Tak więc, jeśli X
jest no
to 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 .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
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!
„
git status
” sugeruje użytkownikom skorzystanie z--untracked=no
opcji, 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
, .terraform
Itp
Zanim będę gotowy do scalenia tego z powrotem do mastera, pojawiło się coś innego, więc master
ponownie sprawdzam , ale teraz ponownie git 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
git checkout feature-a -- feature-a/.gitignore
git add .
git commit -m "update .gitignore from feature-a branch"