Jednym z poleceń, które uważam za niezwykle przydatne w Git, jest git add -u
wrzucanie do indeksu wszystkiego oprócz nieśledzonych plików. Czy jest odwrotność tego? W ciągu ostatnich kilku miesięcy często znajdowałem się w sytuacji, w której interaktywnie dodawałem aktualizacje do indeksu i chcę dodać wszystkie nieśledzone pliki do tego indeksu przed zatwierdzeniem.
Czy istnieje sposób, aby dodać do indeksu tylko nieśledzone pliki bez ich indywidualnego identyfikowania? Nie widzę nic oczywistego w dokumentach pomocy, ale może tego brakuje?
Dzięki.
.gitignore
jest specjalnie zaprojektowane do tego celu, a niegit add -u
.Odpowiedzi:
To łatwe z
git add -i
. Wpisza
(dla „dodaj bez śledzenia”), następnie*
(dla „wszystkich”), a następnieq
(aby zakończyć) i gotowe.Aby to zrobić jednym poleceniem:
echo -e "a\n*\nq\n"|git add -i
źródło
echo -e "a\n*\nq\n"|git add -i
Argument list too long
... tak blisko!git add -i
wtedy4
dodanie nieśledzonego, a następnie*
dla wszystkich, a następnieq
rzucićgit ls-files -o --exclude-standard
daje nieśledzone pliki, więc możesz zrobić coś takiego jak poniżej (lub dodać do niego alias):źródło
-o, --others
Show other (i.e. untracked) files in the output
Nie jest to dokładnie to, czego szukasz, ale uznałem to za bardzo pomocne:
Dodaje wszystkie pliki do indeksu, ale bez ich zawartości. Pliki, które nie były śledzone, zachowują się teraz tak, jakby były śledzone. Ich zawartość będzie wyświetlana w programie
git diff
, a następnie możesz je dodawać interaktywnie za pomocągit add -p
.źródło
git commit -p
przeglądanie nowych plików.Możesz dodać to do swojego pliku ~ / .gitconfig:
Następnie z wiersza poleceń uruchom:
źródło
Ludzie sugerowali potokowanie wyjścia
git ls-files
do,git add
ale zakończy się to niepowodzeniem w przypadkach, gdy istnieją nazwy plików zawierające białe znaki lub znaki glob, takie jak*
.Bezpiecznym sposobem byłoby użycie:
gdzie
-z
mówi gitowi, aby używał\0
terminatorów linii i-0
mówi xargs to samo. Jedyną wadą tego podejścia jest to, że-0
opcja jest niestandardowa, więc tylko niektóre wersjexargs
ją obsługują.źródło
git ls-files
wyświetla listę plików w bieżącym katalogu. Jeśli chcesz wyświetlić nieśledzone pliki z dowolnego miejsca w drzewie, może to działać lepiej:Aby dodać wszystkie nieśledzone pliki w drzewie:
źródło
Spróbowałem tego i zadziałało:
git stash
umieści tylko wszystkie zmodyfikowane śledzone pliki na oddzielnym stosie, a pozostałe pliki będą plikami nieśledzonymi. Następniegit add .
, zgodnie z wymaganiami, przygotuje wszystkie pliki bez śledzenia. Ostatecznie, aby odzyskać wszystkie zmodyfikowane pliki ze stosu, wykonującgit stash pop
źródło
Jeśli masz tysiące nieśledzonych plików (ugh, nie pytaj), to
git add -i
nie zadziała podczas dodawania*
. Pojawi się błąd z informacjąArgument list too long
.Jeśli następnie korzystasz z systemu Windows (nie pytaj nr 2 :-) i do dodania wszystkich nieśledzonych plików musisz użyć programu PowerShell, możesz użyć tego polecenia:
źródło
git ls-files -o --exclude-standard | % { git add $_ }
Wiele dobrych wskazówek tutaj, ale w Powershell nie mogłem go uruchomić.
Jestem programistą .NET i nadal używamy głównie systemu operacyjnego Windows, ponieważ nie korzystaliśmy tak bardzo z .Net core i wielu platform, więc moje codzienne użytkowanie z Git odbywa się w środowisku Windows, gdzie najczęściej używana jest powłoka Powershell a nie Git bash.
Poniższą procedurę można wykonać, aby utworzyć funkcję z aliasami służącą do dodawania nieśledzonych plików w repozytorium Git.
Wewnątrz pliku $ profile programu Powershell (w przypadku jego braku - możesz uruchomić: New-Item $ Profile)
notatnik $ Profil
Teraz dodaj tę metodę Powershell:
Zapisz plik $ profile i załaduj go ponownie do Powershell. Następnie załaduj ponownie swój plik $ profile z:. $ profile
Jest to podobne do polecenia source w środowiskach * nix IMHO.
Więc następnym razem, jeśli jesteś programistą używającym Powershell w systemie Windows przeciwko repozytorium Git i chcesz po prostu dołączyć nieśledzone pliki, które możesz uruchomić:
AddUntracked-Git
Jest to zgodne z konwencją Powershell, w której masz czasowniki-rzeczowniki.
źródło
git add. (dodaj wszystkie pliki w tym katalogu)
git add -all (dodaj wszystkie pliki we wszystkich katalogach)
git add -N może być pomocny przy wyświetlaniu listy na później ...
źródło
git add -u
doda zmodyfikowane pliki, które nie są śledzoneAby dodać wszystkie nieśledzone pliki, polecenie git to
Jeśli chcesz uzyskać więcej informacji na temat różnych dostępnych opcji, możesz wpisać polecenie
zamiast pierwszego polecenia, dzięki temu otrzymasz więcej opcji, w tym opcję dodania wszystkich nieśledzonych plików, jak pokazano poniżej:
źródło