Różnica między "git add-A" i " git add."

Polecenie git add [--all|-A] wydaje się być identyczne z git add .. Czy to prawda? Jeśli nie, to czym się różnią?

 2436
Author: CharlesB, 2009-02-21

9 answers

Ta odpowiedź dotyczy tylko Git w wersji 1.x . Dla Git w wersji 2.x, zobacz inne odpowiedzi.


Podsumowanie:

  • git add -A etapy wszystkie zmiany

  • git add . etapuje nowe pliki i modyfikacje, BEZ USUWANIA

  • git add -u etapy modyfikacji i usunięcia, bez nowych plików


Szczegóły:

git add -A jest równoważne do git add .; git add -u.

Ważnym punktem git add . jest to, że przegląda działające drzewo i dodaje wszystkie te ścieżki do zmian etapowych, jeśli są zmienione lub są nowe i nie są ignorowane, nie wystawia żadnych akcji 'rm'.

git add -u sprawdza wszystkie już śledzone pliki i dokonuje zmian w tych plikach, jeśli są inne lub jeśli zostały usunięte. Nie dodaje żadnych nowych plików, tylko wprowadza zmiany do już śledzonych plików.

git add -A jest przydatny skrót do robienia obu tych rzeczy.

Możesz przetestować różnice za pomocą czegoś takiego (zauważ, że dla Git w wersji 2.x twoje wyjście dla git add . git status Czy będzie inny):

git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial

echo OK >> change-me
rm delete-me
echo Add me > add-me

git status
# Changed but not updated:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git add .
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
# Changed but not updated:
#   deleted:    delete-me

git reset

git add -u
git status

# Changes to be committed:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git reset

git add -A
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
#   deleted:    delete-me
 3717
Author: CB Bailey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-30 16:04:23

Oto tabela do szybkiego zrozumienia:

Git Wersja 1.x : Tutaj wpisz opis obrazka

Git Wersja 2.x : Tutaj wpisz opis obrazka

Długie flagi:

  • git add -A jest równoważne git add --all
  • git add -u jest równoważne git add --update

Czytaj dalej:

 670
Author: Developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:36

Z Git 2.0, git add -A jest domyślnie: git add . równa się git add -A ..

git add <path> jest tym samym co" git add -A <path> " Teraz, tak że "git add dir/ " zauważy ścieżki usunięte z katalogu i Nagraj usunięcie.
W starszych wersjach Git, "git add <path> " używane do ignorowania usuwania.

Możesz powiedzieć "git add --ignore-removal <path>" do dodaj tylko dodane lub zmodyfikowane ścieżki w <path>, jeśli naprawdę chcesz.

git add jest jak git add :/ (dodaj wszystko od góry Git repo folder ).
Zauważ, że git 2.7 (Nov. 2015) pozwoli Ci dodać folder o nazwie ":"!
Zobacz commit 29abb33 (25 października 2015) by Junio C Hamano (gitster).


Zauważ, że uruchamianie git 2.0 (Q1 lub Q2 2014) , kiedy mówimy o git add . (bieżąca ścieżka w drzewie roboczym), musisz użyć '.' w innych poleceniach git add.

To znaczy:

"git add -A ." jest odpowiednikiem "git add .; git add -u ."

(zwróć uwagę na dodatkowe ". " dla git add -A i git add -u)

Ponieważ git add -A lub git add -u operowałyby (uruchamiając git 2.0 tylko) na całym drzewie roboczym, a nie tylko na bieżącej ścieżce.

Te polecenia będą działać na całym drzewie w Git 2.0 dla spójności z" git commit -a " i innymi poleceniami. Ponieważ nie będzie mechanizmu, aby" git add -u "zachowywał się tak, jakby" git add -u .", jest to ważne dla tych, którzy są przyzwyczajeni do "{20]}" (bez pathspec) aktualizowanie indeksu tylko dla ścieżek w bieżącym podkatalogu, aby zacząć ćwiczyć swoje palce, aby wyraźnie powiedzieć " git add -u .", gdy mają to na myśli przed wydaniem Git 2.0.

Ostrzeżenie jest wydawane, gdy te polecenia są uruchamiane bez pathspec i gdy masz lokalne zmiany poza bieżącym katalogiem, ponieważ zachowanie w Git 2.0 będzie inne z dzisiejszej wersji w takiej sytuacji.

 142
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:45

Więc z instrukcji Karola powyżej, po przetestowaniu moje proponowane zrozumienie będzie następujące:

# For the next commit
$ git add .   # add to index only files created/modified and not those deleted
$ git add -u  # add to index only files deleted/modified and not those created
$ git add -A  # do both operation at once, add to index all files

Ten link może być również pomocny w zrozumieniu, w jakiej sytuacji można zastosować te polecenia: Usuwanie usuniętych plików z katalogu roboczego Git .

 127
Author: Richard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-11 05:54:30

Spóźniony na imprezę, ale to pytanie również zasługuje na szybszą odpowiedź.

git add -A 

Robi oba poniżej (to samo co git add --all )

git add . 

Stages new + modified files

git add -u 

Stages modified + deleted files

 29
Author: K. Kilian Lindberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-23 11:48:01

Things changed with Git 2.0:

  • -A jest teraz domyślnym
  • stare zachowanie jest teraz dostępne z --ignore-removal
  • git add -u i git add -A w podkatalogu bez ścieżek w wierszu poleceń działają na całym drzewie

Więc dla git 2 odpowiedź brzmi:

  • git add . i git add -A . Dodaj nowe / zmodyfikowane / usunięte pliki w bieżącym katalogu
  • git add --ignore-removal . dodaje nowe / zmodyfikowane pliki w bieżącym katalogu
  • git add -u . dodaje zmodyfikowane/usunięte pliki w bieżącym katalogu
  • bez kropki, dodaj wszystkie pliki w projekcie niezależnie od bieżącego katalogu
 24
Author: 0xF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-13 15:29:52

W końcu to Rozumiem, dzięki wam wszystkim. Mam nadzieję, że to może dodać więcej jasności.

!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
Ograniczniki mogą być -u lub-A lub nil.

Pathspec może być ścieżką pliku lub kropką,'.'aby wskazać bieżący katalog.

Ważna wiedza o tym, jak git 'dodaje'.

  • niewidoczne pliki, te poprzedzone kropką, (dotfiles) nigdy nie są automatycznie rozpoznawane przez Git. Nigdy nie są nawet wymienione jako "nie śledzone".
  • puste foldery nigdy nie są dodany przez git. Nigdy nie są nawet wymienione jako "nie śledzone". (Obejściem jest dodanie pustego pliku, prawdopodobnie niewidocznego, do śledzonych plików.)
  • Git status nie wyświetli informacji o podfolderze, np. nie śledzonych plikach, chyba że co najmniej jeden plik w tym podfolderze jest śledzony. Przed upływem tego czasu, git uznaje cały folder za "pusty". Jest pusty ze śledzonych przedmiotów.
  • określanie pliku='.'(kropka), czyli bieżący katalog nie jest rekurencyjny, chyba że-A jest również określone. Dot odnosi się ściśle do bieżącego katalogu - pomija ścieżki znalezione powyżej i poniżej.

Teraz, biorąc pod uwagę tę wiedzę, możemy zastosować powyższe odpowiedzi.

Ograniczniki są następujące.
  • - u = --update = subset to tracked files => Add = No; Change = Yes; Delete= Yes. = > iff element jest śledzony.
  • - a = --all ( no such-a, which gives syntax error) = superset wszystkich nie śledzonych / śledzonych plików, chyba że w Git jeśli element zostanie rozpoznany, git add-A znajdzie go i doda.

Ścieżka jest następująca.

  • W Git
  • jednakże, w wersji 2.0, operacja może być ograniczona do bieżącej ścieżki: wystarczy dodać wyraźny przyrostek kropki (który jest również ważny w Git

git add -A .

git add -u .

Podsumowując, moja polityka jest ;

  • 1.Upewnij się, że wszystkie kawałki / pliki, które mają być dodane, są rozliczane w statusie git.
  • 1A. jeśli brakuje jakichkolwiek elementów, z powodu niewidocznych plików/folderów, dodaj je osobno.
  • 2.Miej dobre gitignore tak, że normalnie tylko interesujące pliki są nie śledzone i / lub nierozpoznane.
  • 3.Z najwyższego poziomu repo, "git add-A", aby dodać wszystkie pozycje. Działa to we wszystkich wersjach git.
  • 4.W razie potrzeby usuń wszystkie pożądane elementy z indeksu.
  • 6.Jeśli jest duży błąd, wykonaj 'Git reset', aby wyczyścić indeks całkowicie.
 11
Author: AnneTheAgile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-21 14:45:57

git add . equals git add -A . dodaje pliki do indeksu tylko z folderów current i children.

git add -A dodaje pliki do indeksu ze wszystkich folderów w drzewie roboczym.

P. S.: informacje dotyczą Git 2.0.

 8
Author: Alex78191,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-03 19:12:18

W Git 2.x :

  • Jeśli znajdujesz się bezpośrednio w katalogu roboczym , to git add -A i git add . działają bez różnicy.

  • Jeśli znajdujesz się w podkatalogu working directory, git add -A doda wszystkie pliki z całego katalogu roboczego , a git add . doda pliki z twojego bieżącego katalogu .

I to wszystko.
 7
Author: simhumileco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-16 22:32:31