Dodawanie tylko niezatwierdzonych plików

168

Jednym z poleceń, które uważam za niezwykle przydatne w Git, jest git add -uwrzucanie 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.

Rob Wilkerson
źródło
1
Jeśli chodzi o „wrzucanie do indeksu wszystkiego oprócz nieśledzonych plików”, .gitignorejest specjalnie zaprojektowane do tego celu, a nie git add -u.
Pacerier
Również, pytasz dodać nieśledzone plików usuwając wszystkie aktualnie śledzone z nich, albo pytasz dodać nieśledzone plików na górze z nich aktualnie śledzone (co wszystko śledzone)?
Pacerier,

Odpowiedzi:

236

To łatwe z git add -i. Wpisz a(dla „dodaj bez śledzenia”), następnie *(dla „wszystkich”), a następnie q(aby zakończyć) i gotowe.

Aby to zrobić jednym poleceniem: echo -e "a\n*\nq\n"|git add -i

Mata
źródło
4
Miałem nadzieję, że jest coś mniej, cóż, interaktywnego, ale z pewnością jest lepsze niż plik po pliku. :-)
Rob Wilkerson
34
echo -e "a\n*\nq\n"|git add -i
Mat
@Mat dziękuję, więc czy kompletne polecenie ----> git add -ia * q ??
BKSpurgeon
Argument list too long... tak blisko!
Symeon
1
Dla mnie z git 2.21.0 było git add -iwtedy 4dodanie nieśledzonego, a następnie *dla wszystkich, a następnie qrzucić
Harry B
36

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):

git add $(git ls-files -o --exclude-standard)
manojlds
źródło
1
alias gau = "git ls-files -o --exclude-standard | xargs -i git add '{}'" działa dla mnie
Stephan
git ls-files --help to całkiem przydatna lektura: -o, --others Show other (i.e. untracked) files in the output
Joshua Kunzmann
15

Nie jest to dokładnie to, czego szukasz, ale uznałem to za bardzo pomocne:

git add -AN

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.

hasen
źródło
To jest dokładnie to, czego szukałem - pozwala również na git commit -pprzeglądanie nowych plików.
nitsujri
11

Możesz dodać to do swojego pliku ~ / .gitconfig:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

Następnie z wiersza poleceń uruchom:

git add-untracked
joshuadavey
źródło
Podoba mi się to podejście, ale nie obsługuje spacji w nazwach plików.
Paul Coccoli,
9

Ludzie sugerowali potokowanie wyjścia git ls-filesdo, git addale 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:

git ls-files -o --exclude-standard -z | xargs -0 git add

gdzie -zmówi gitowi, aby używał \0terminatorów linii i -0mówi xargs to samo. Jedyną wadą tego podejścia jest to, że -0opcja jest niestandardowa, więc tylko niektóre wersje xargsją obsługują.

Tom Fenech
źródło
6

git ls-fileswyś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:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

Aby dodać wszystkie nieśledzone pliki w drzewie:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add
pborenstein
źródło
6

Spróbowałem tego i zadziałało:

git stash && git add . && git stash pop

git stashumieści tylko wszystkie zmodyfikowane śledzone pliki na oddzielnym stosie, a pozostałe pliki będą plikami nieśledzonymi. Następnie git add ., zgodnie z wymaganiami, przygotuje wszystkie pliki bez śledzenia. Ostatecznie, aby odzyskać wszystkie zmodyfikowane pliki ze stosu, wykonującgit stash pop

Rohan Khude
źródło
0

Jeśli masz tysiące nieśledzonych plików (ugh, nie pytaj), to git add -inie 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:

git ls-files -o --exclude-standard | select | foreach { git add $_ }
Simeon
źródło
Bardziej skondensowana wersja:git ls-files -o --exclude-standard | % { git add $_ }
marckassay
0

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:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

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.

Tore Aurstad
źródło
0

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 ...

atreyHazelHispanic
źródło
git add -udoda zmodyfikowane pliki, które nie są śledzone
Tarasovych
-3

Aby dodać wszystkie nieśledzone pliki, polecenie git to

git add -A

Jeśli chcesz uzyskać więcej informacji na temat różnych dostępnych opcji, możesz wpisać polecenie

git dodaj -i

zamiast pierwszego polecenia, dzięki temu otrzymasz więcej opcji, w tym opcję dodania wszystkich nieśledzonych plików, jak pokazano poniżej:

$ git add -i ostrzeżenie: LF zostanie zastąpiony przez CRLF w pliku README.txt. Plik będzie miał oryginalne zakończenia linii w katalogu roboczym. ostrzeżenie: LF zostanie zastąpiony przez CRLF w package.json.

* Polecenia * 1: stan 2: aktualizacja 3: przywróć 4: dodaj nieśledzone 5: poprawka 6: różnica 7: zakończ 8: pomoc Co teraz> a

L.Sidhu
źródło