Mam mokre stopy z Git i mam następujący problem:
Drzewo źródeł mojego projektu:
/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...
Mam kod (obecnie MEF) w mojej gałęzi dostawcy, którą tam skompiluję, a następnie przeniosę referencje, do /src/refs
których projekt je pobiera.
Moim problemem jest to, że mam .gitignore
zestaw do zignorowania *.dll
i *.pdb
. Mogę zrobić, git add -f bar.dll
aby wymusić dodanie zignorowanego pliku, co jest w porządku, problem polega na tym, że nie mogę wymyślić listy istniejących plików, które są ignorowane.
Chcę wyświetlić listę ignorowanych plików, aby upewnić się, że nie zapomnę ich dodać.
Przeczytałem stronę podręcznika użytkownika git ls-files
i nie mogę jej uruchomić . Wydaje mi się, że git ls-files --exclude-standard -i
powinienem robić to, co chcę. czego mi brakuje?
git clean
sztuczki), jak pokazano tutaj . Ponadto odradzam przykład „wykluczenia z” w podsumowaniu, ponieważ w rzeczywistości nie zwraca on uwagi na żadne pliki .gitignore. Pytam o to szczególnie, ponieważ ta strona jest najlepszą odpowiedzią Google.git config --global alias.ls ls-files --exclude-standard
i to stanowi odpowiedź na to pytaniegit ls -i
.Odpowiedzi:
Uwagi:
git status --ignored
.gitignore
git clean -ndX
działa na starszych gits, wyświetlając podgląd tego, co ignorowane pliki mogą zostać usunięte (bez usuwania czegokolwiek)Również ciekawe (wymienione w qwertymk „s odpowiedź ), można również użyć
git check-ignore -v
polecenia, przynajmniej na Unix ( nie działa w CMD systemu Windows sesji)Drugi wyświetla rzeczywistą regułę,
.gitignore
która powoduje, że plik jest ignorowany w twoim repozytorium git.W systemie Unix za pomocą „ Co rekurencyjnie rozszerza się na wszystkie pliki w bieżącym katalogu? ” I bash4 +:
(lub a
find -exec
polecenie)Uwaga: https://stackoverflow.com/users/351947/Rafi B. sugeruje w komentarzach, aby uniknąć (ryzykownej) globstar :
Pamiętaj jednak, aby wykluczyć pliki z
.git/
podfolderu.Oryginalna odpowiedź 42009)
powinien działać, z wyjątkiem tego , że kod źródłowy wskazuje:
exc_given
?Okazuje się, że potrzebuje jeszcze jednego parametru po
-i
aby cokolwiek wyświetlić:Próbować:
(ale wyświetliłoby to tylko twój buforowany (niezignorowany) obiekt z filtrem, więc nie jest to dokładnie to, czego chcesz)
Przykład:
Właściwie w moim pliku „gitignore” (zwanym „exclude”) znajduję wiersz poleceń, który może ci pomóc:
Więc....
powinien załatwić sprawę.
Jak wspomniano na stronie podręcznika ls-files ,
--others
jest to ważna część, aby pokazać ci pliki niebuforowane, niezaangażowane, normalnie ignorowane.--exclude_standard
to nie tylko skrót, ale sposób na dołączenie wszystkich standardowych ustawień „ignorowanych wzorców”.źródło
git status --ignored
wygląda na to, że wyświetla także nieśledzone pliki: github.com/git/git/blob/master/Documentation/RelNotes/...git check-ignore -v *
działa świetnie, ponieważ pokazuje, gdzie zastosowano konfigurację. Dziękuję Ci.shopt -s globstar
, a potem powinien on działać.git check-ignore -v $(find . -type f -print)
Jest na to znacznie prostszy sposób (git 1.7.6+):
Zobacz Czy istnieje sposób, aby powiedzieć git-status, aby ignorował efekty plików .gitignore?
źródło
error: unknown option 'ignored'
. Nawet dodanie-s
zgodnie z sugestią w łączonym poście nie działało.-s
. Możesz spróbowaćgit status -h
sprawdzić, czy--ignored
jest obsługiwanygit clean -ndX
rozwiązanie, ponieważ rzadka sytuacja, gdy ktoś omyłkowo zapomina flagi, będzie miał nieodwracalny wpływ na repozytorium, ponieważ nieśledzone pliki zostaną usunięte. To jest niebezpieczne. Wręcz przeciwnie,git status --ignored
jest zawsze bezpieczny, nawet gdy jest błędnie wpisany i naturalne jest, aby pamiętać.Inna opcja, która jest dość czysta (nie ma sensu).
Wyjaśnienie:
Uwaga: to rozwiązanie nie wyświetla ignorowanych plików, które zostały już usunięte.
źródło
make clean
i bardzo pomocna na serwerze kompilacji.git ls-files -o -i --exclude-standard
.git clean -dXn
zawsze był tym, czego chciałem, ale nie pokazuje ignorowanych plików, które zostały już usunięte.git ls-files -o -i --exclude-standard
może to zrobić. Więc to może być różnica.n
pierwszej, mniejszej szansy na przypadkowe usunięcie w ten sposób;git clean -ndX
n
pominiesz, Git domyślnie przyjmuje wartośćfatal: clean.requireForce defaults to true and neither -n nor -f given; refusing to clean
. Wciąż dość bezpieczne, ale wpisanien
pierwszego jest jeszcze bezpieczniejsze! :)Chociaż ogólnie poprawne rozwiązanie nie działa we wszystkich okolicznościach. Załóżmy katalog repo w ten sposób:
i .gitignore, takie jak:
To ignoruje
doc
katalog i wszystkie pliki poniżejtmp
. Git działa zgodnie z oczekiwaniami, ale podane polecenie do wyświetlenia listy zignorowanych plików nie działa. Rzućmy okiem na to, co mówi git:Zauważ, że
doc
brakuje na liście. Możesz to uzyskać za pomocą:Zwróć uwagę na dodatkową
--directory
opcję.Z mojej wiedzy nie ma jednego polecenia, aby wyświetlić listę wszystkich ignorowanych plików jednocześnie. Ale nie wiem, dlaczego w
tmp/dir0
ogóle się nie pojawia.źródło
(git ls-files -oi --exclude-standard; git ls-files -oi --exclude-standard --directory) | perl -nle '$seen{$_}++||next;if(-d){system"find",$_,"-type","f"}else{print}'
Git ma teraz tę funkcję wbudowaną
Oczywiście możesz zmienić glob na coś takiego jak
**/*.dll
w twoim przypadkuGit Reference
źródło
git check-ignore **/*
dołączyć pliki do podkatalogówPowinien wystarczyć do użycia
ponieważ obejmuje to wszystko objęte
dlatego ten drugi jest zbędny.
Możesz to ułatwić, dodając alias do swojego
~/.gitconfig
pliku:Teraz możesz po prostu wpisać,
git ignored
aby zobaczyć listę. O wiele łatwiejsze do zapamiętania i szybsze pisanie.Jeśli wolisz bardziej zwięzłe wyświetlanie rozwiązania Jasona Genga, możesz dodać dla tego alias:
Jednak bardziej szczegółowe dane wyjściowe są bardziej przydatne w rozwiązywaniu problemów z plikami .gitignore, ponieważ zawiera listę każdego pojedynczego pliku, który jest ignorowany. Zwykle
grep
przesyłasz wyniki, aby sprawdzić, czy znajduje się tam plik, który chcesz zignorować, czy też plik, którego nie chcesz ignorować.Następnie, gdy chcesz tylko zobaczyć krótki ekran, łatwo jest zapamiętać i wpisać
(
-s
Zwykle można to pominąć.)źródło
git status --ignored
działa na sid Debianie, ale może jest bardzo nowy… ale najwyraźniej został dodany z powodu popularnego popytu ;-)Oto jak wydrukować pełną listę plików w drzewie roboczym, które pasują do wzorców znajdujących się w dowolnym miejscu w wielu źródłach gitignore Gita (jeśli używasz GNU
find
):Sprawdza wszystkie pliki w bieżącej gałęzi repozytorium (chyba że zostały usunięte lokalnie).
I identyfikuje również konkretne linie źródłowe gitignore.
Git kontynuuje śledzenie zmian w niektórych plikach, które pasują do wzorców gitignore, po prostu dlatego, że te pliki zostały już dodane. Przydatnie powyższe polecenie wyświetla również te pliki.
Dopasowywane są również negatywne wzory gitignore. Można je jednak łatwo odróżnić na liście, ponieważ zaczynają się od
!
.Jeśli używasz systemu Windows, Git Bash zawiera GNU
find
(jak ujawniłfind --version
).Jeśli lista jest długa (i masz
rev
), możesz też wyświetlić je według rozszerzenia (nieco):Aby uzyskać więcej informacji, zobacz
man find
,man git-check-ignore
,man rev
, iman sort
.Chodzi o to, że Git (oprogramowanie) zmienia się szybko i jest bardzo złożone. Z kolei GNU
find
jest wyjątkowo stabilny (przynajmniej w zastosowanych tutaj funkcjach). Zatem każdy, kto chce być konkurencyjny, wykazując się dogłębną znajomością Git, odpowie na pytanie w inny sposób.Jaka jest najlepsza odpowiedź? Ta odpowiedź celowo minimalizuje poleganie na wiedzy Git, zmierzając do osiągnięcia celu stabilności i prostoty poprzez modułowość (izolację informacji) i ma na celu trwać bardzo długo .
źródło
(rozszerzenie innych odpowiedzi)
Uwaga,
git check-ignore
używa zatwierdzonego,.gitignore
a nie tego z twojego drzewa roboczego! Aby grać z nim bez zanieczyszczania historii git, możesz swobodnie spróbować go edytować, a następnie zatwierdzić za pomocągit commit --amend
.Ten problem występuje głównie, jeśli potrzebujesz obejścia problemu, że git nie podąża za katalogami. Wpisz w
.gitignore
:.keep
powinien być plikiem o zerowej długościdirtokeep
.Rezultat będzie taki, że wszystko w
dirtokeep
zostanie zignorowane, z wyjątkiemdirtokeep/.keep
, co spowoduje, że równieżdirtokeep
katalog zostanie skonstruowany podczas klonowania / pobierania.źródło
Zakładając, że istnieje kilka katalogów ignorowania, dlaczego nie użyć „git status node / logs /”, który powie ci, jakie pliki mają zostać dodane? W katalogu mam plik tekstowy, który nie jest częścią wyjścia statusu, np .:
On master master
Twój oddział jest aktualny z „origin / master”.
Nieśledzone pliki:
(użyj „git add ...”, aby uwzględnić w tym, co zostanie zatwierdzone )
.gitignore to:
*
! .gitignore
źródło