git add [--all|-A]
Wydaje się, że polecenie jest identyczne z git add .
. Czy to jest poprawne? Jeśli nie, czym się różnią?
Odpowiedź ta ma zastosowanie wyłącznie do Git wersji 1.x . W przypadku wersji Git 2.x zobacz inne odpowiedzi.
Podsumowanie:
git add -A
etapy wszystkie zmiany
git add .
przygotowuje nowe pliki i modyfikacje, bez usuwania
git add -u
modyfikuje i usuwa etapy, bez nowych plików
Szczegół:
git add -A
jest równoważne z git add .; git add -u
.
Ważną kwestią git add .
jest to, że patrzy na działające drzewo i dodaje wszystkie te ścieżki do zmian etapowych, jeśli są one zmienione lub są nowe i nie są ignorowane, nie wykonuje żadnych działań „rm”.
git add -u
przegląda wszystkie już śledzone pliki i wprowadza zmiany w tych plikach, jeśli są one inne lub zostały usunięte. Nie dodaje żadnych nowych plików, jedynie zmienia zmiany w już śledzonych plikach.
git add -A
jest przydatnym skrótem do wykonywania obu tych czynności.
Możesz przetestować różnice za pomocą czegoś takiego (zwróć uwagę, że dla Git w wersji 2.x twój wynik git add .
git status
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
git add *
?git add -A -p
że nie działa zgodnie z oczekiwaniami (pytaj interaktywnie o nieśledzone pliki)git add -A :/
lubgit add -A .
git add -u
stał sięgit add -u :/
z tym ostatnim parametrem będącym ścieżką, pozwalającą na -u niektórych katalogów,:/
obsługuje całe drzewo.git add -u
albogit add .
i robiąc to, że sprawia, że jego życie łatwiejszym nawet po uwzględnieniu dodatkowego podatku psychicznego dodanej w celu zapewnienia, że są tam żadnych problemów z synchronizacją? Zastanawiam się, dlaczego Git nie furthur podzieloneadd -u
na dwa odrębne poleceńadd -u1
iadd-u2
mocy których jeden działa dla plików zaczynające się cyframi, a drugi dla plików zaczynając niebędących cyframiOto tabela szybkiego zrozumienia:
Wersja Git 1.x :
Wersja Git 2.x :
Flagi o długich kształtach:
git add -A
jest równagit add --all
git add -u
jest równagit add --update
Dalsza lektura:
źródło
git diff-files -z --diff-filter=M --name-only | xargs -0 git add
dodawać tylko zmodyfikowane pliki, ale nie nowe pliki ani usunięcia.git add .
dodaje tylko nowe pliki, które znajdują się w bieżącej ścieżce. To znaczy, jeśli masz nowy katalog../foo
,git add -A
wystawisz go,git add .
nie zrobisz.git add .
jest równoważnegit add -A .
, co jest równoważnegit add "*"
W Git 2.0
git add -A
wartość domyślna:git add .
równa sięgit add -A .
.git add -A
jest jakgit add :/
( dodaj wszystko z górnego folderu repozytorium git ).Pamiętaj, że git 2.7 (listopad 2015) pozwoli ci dodać folder o nazwie „
:
”!Zobacz commit 29abb33 (25 października 2015) autor: Junio C Hamano (
gitster
) .Zauważ, że zaczynając od git 2.0 (Q1 lub Q2 2014) , kiedy mówisz o
git add .
(bieżąca ścieżka w działającym drzewie), musisz również użyć '.
' w innychgit add
poleceniach.To znaczy:
(Uwaga na dodatkowe „
.
” dlagit add -A
igit add -u
)Ponieważ
git add -A
lubgit add -u
działałoby (tylko git 2.0) na całym drzewie roboczym , a nie tylko na bieżącej ścieżce.źródło
Z instrukcji Charlesa po przetestowaniu moje proponowane rozumienie wyglądałoby następująco:
Ten post na blogu może również pomóc zrozumieć, w jakiej sytuacji można zastosować te polecenia: Usuwanie usuniętych plików z katalogu roboczego Git .
źródło
Sytuacja zmieniła się wraz z Git 2.0 ( 2014-05-28 ):
-A
jest teraz domyślny--ignore-removal
.git add -u
awgit add -A
podkatalogu bez ścieżek w wierszu poleceń działają na całym drzewie.W przypadku Git 2 odpowiedź brzmi:
git add .
igit add -A .
dodaj nowe / zmodyfikowane / usunięte pliki w bieżącym katalogugit add --ignore-removal .
dodaje nowe / zmodyfikowane pliki w bieżącym katalogugit add -u .
dodaje zmodyfikowane / usunięte pliki do bieżącego kataloguźródło
Bardziej destylowana szybka odpowiedź:
Czy oba poniżej (to samo co git add --all )
Stages nowe + zmodyfikowane pliki
Etapy zmodyfikowane + usunięte pliki
źródło
git add :/
+git add -u :/
W Git 2.x :
Jeśli znajdujesz się bezpośrednio w katalogu roboczym , to
git add -A
igit add .
pracuj bez różnicy.Jeśli znajdujesz się w dowolnym podkatalogu katalogu roboczego ,
git add -A
doda wszystkie pliki z całego katalogu roboczego igit add .
doda pliki z bieżącego katalogu .I to wszystko.
źródło
Mam nadzieję, że to doda więcej jasności.
Ogranicznikami mogą być -u lub -A lub zero.
Ścieżka może być ścieżką do pliku lub kropką, „.” wskazać bieżący katalog.
Ważna podstawowa wiedza o tym, jak Git „dodaje”:
-A
zostanie również określony. Kropka odnosi się wyłącznie do bieżącego katalogu - pomija ścieżki znalezione powyżej i poniżej.Biorąc pod uwagę tę wiedzę, możemy zastosować powyższe odpowiedzi.
Ograniczniki są następujące.
-u
=--update
= podzbiór śledzonych plików => Dodaj = Nie; Zmień = Tak; Usuń = Tak. => jeśli element jest śledzony.-A
=--all
(nie ma takiego-a
, co powoduje błąd składniowy) = nadzbiór wszystkich nieśledzonych / śledzonych plików, chyba że w Git przed 2.0, przy czym jeśli podano specyfikację pliku kropki, to brany jest pod uwagę tylko ten konkretny folder. => jeśli element zostanie rozpoznany,git add -A
znajdzie go i doda.Ścieżka jest następująca.
git add -A .
git add -u .
Podsumowując, moja polityka jest następująca:
git status
..gitignore
plik, aby normalnie tylko pliki będące przedmiotem zainteresowania nie były śledzone i / lub nierozpoznawane.źródło
git add .
równa sięgit add -A .
dodaje pliki do indeksu tylko z folderów bieżących i potomnych.git add -A
dodaje pliki do indeksu ze wszystkich folderów w działającym drzewie.PS: informacje dotyczą Git 2.0 (2014-05-28).
źródło
Zarówno
git add .
i wprowadzigit add -A
wszystkie nowe, zmodyfikowane i usunięte pliki w nowszych wersjach Git.Różnica polega na tym, że
git add -A
pliki etapów znajdują się w „wyższych, bieżących i podkatalogach” należących do działającego repozytorium Git. Ale robieniegit add .
tylko etapów plików w bieżącym katalogu i następujących po nim podkatalogach ( nie plików leżących na zewnątrz, tj. Wyższych katalogów).Oto przykład:
Jeśli bieżący katalog roboczy jest
/my-repo
, a tyrm rootfile.txt
, a następniecd subfolder
, pogit add .
, to będzie nie wystawić usuniętego pliku. Ale robieniegit add -A
tego z pewnością wprowadzi tę zmianę bez względu na to, skąd wykonasz polecenie.źródło
-A
Opcja Dodaje, modyfikuje i usuwa wpisy indeksu dopasować drzewo roboczą.W Git 2
-A
opcja jest teraz domyślna.Po
.
dodaniu a, który ogranicza zakres aktualizacji do katalogu, w którym aktualnie się znajdujesz, zgodnie z dokumentacją GitJedną rzeczą, którą chciałbym dodać, jest to, że jeśli używany jest tryb
--interactive
lub-p
, wówczasgit add
zachowuje się tak, jakby-u
używana była flaga update ( ) i nie dodaje nowych plików.źródło