Odpowiedzi:
Odpowiedź ta ma zastosowanie wyłącznie do Git wersji 1.x . W przypadku wersji Git 2.x zobacz inne odpowiedzi.
Podsumowanie:
git add -Aetapy wszystkie zmiany
git add .przygotowuje nowe pliki i modyfikacje, bez usuwania
git add -umodyfikuje i usuwa etapy, bez nowych plików
Szczegół:
git add -Ajest 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 -uprzeglą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 -A -pże nie działa zgodnie z oczekiwaniami (pytaj interaktywnie o nieśledzone pliki)
git add -A :/lubgit add -A .
git add -ustał 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 -ualbo git 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 podzielone add -una dwa odrębne poleceń add -u1i add-u2mocy których jeden działa dla plików zaczynające się cyframi, a drugi dla plików zaczynając niebędących cyframi
Oto tabela szybkiego zrozumienia:
Wersja Git 1.x :

Wersja Git 2.x :

Flagi o długich kształtach:
git add -A jest równa git add --allgit add -u jest równa git add --updateDalsza lektura:
git diff-files -z --diff-filter=M --name-only | xargs -0 git adddodawać 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 -Awystawisz go, git add .nie zrobisz.
git add .jest równoważne git add -A ., co jest równoważnegit add "*"
W Git 2.0 git add -Awartość domyślna: git add .równa sięgit add -A . .
git add <path>jest taki sam jakgit add -A <path>teraz „ ”, dzięki czemu „git add dir/” zauważy ścieżki usunięte z katalogu i zarejestruje usunięcie.
W starszych wersjach Git „git add <path>” ignorowano usuwanie.Możesz powiedzieć „
git add --ignore-removal <path>”, aby dodać tylko dodane lub zmodyfikowane ścieżki<path>, jeśli naprawdę chcesz.
git add -Ajest jak git 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 innych git addpoleceniach.
To znaczy:
„
git add -A .” jest równoważne z „git add .; git add -u .”
(Uwaga na dodatkowe „ .” dla git add -Ai git add -u)
Ponieważ git add -Alub git add -udziałałoby (tylko git 2.0) 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, aby zachować spójność z „
git commit -a” i innymi poleceniami . Ponieważ nie będzie mechanizmu, który sprawi, że „git add -u” będzie się zachowywał tak, jakby „git add -u .”, ważne jest, aby osoby przyzwyczajone do „git add -u” (bez specyfikacji ścieżki) aktualizujące indeks tylko dla ścieżek w bieżącym podkatalogu zaczęły trenować palce, aby wyraźnie mówić „”git add -u .„kiedy mają to na myśli, zanim pojawi się Git 2.0.Ostrzeżenie jest wydawane, gdy te polecenia są uruchamiane bez specyfikacji ścieżki i gdy masz lokalne zmiany poza bieżącym katalogiem , ponieważ zachowanie w Git 2.0 będzie w takiej sytuacji inne niż dzisiejsza wersja.
Z instrukcji Charlesa po przetestowaniu moje proponowane rozumienie wyglądałoby następująco:
# For the next commit
$ git add . # Add only files created/modified to the index and not those deleted
$ git add -u # Add only files deleted/modified to the index and not those created
$ git add -A # Do both operations at once, add to all files to the index
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 .
Sytuacja zmieniła się wraz z Git 2.0 ( 2014-05-28 ):
-A jest teraz domyślny--ignore-removal.git add -uaw git add -Apodkatalogu bez ścieżek w wierszu poleceń działają na całym drzewie.W przypadku Git 2 odpowiedź brzmi:
git add .i git 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 kataloguBardziej destylowana szybka odpowiedź:
git add -A
git add .
git add -u
git add :/+git add -u :/
W Git 2.x :
Jeśli znajdujesz się bezpośrednio w katalogu roboczym , to git add -Ai git add .pracuj bez różnicy.
Jeśli znajdujesz się w dowolnym podkatalogu katalogu roboczego , git add -Adoda wszystkie pliki z całego katalogu roboczego i git add .doda pliki z bieżącego katalogu .
I to wszystko.
Mam nadzieję, że to doda więcej jasności.
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
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”:
-Azostanie 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 -Aznajdzie 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..gitignoreplik, aby normalnie tylko pliki będące przedmiotem zainteresowania nie były śledzone i / lub nierozpoznawane.Zarówno git add .i wprowadzi git add -Awszystkie nowe, zmodyfikowane i usunięte pliki w nowszych wersjach Git.
Różnica polega na tym, że git add -Apliki etapów znajdują się w „wyższych, bieżących i podkatalogach” należących do działającego repozytorium Git. Ale robienie git 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:
/my-repo
.git/
subfolder/
nested-file.txt
rootfile.txt
Jeśli bieżący katalog roboczy jest /my-repo, a ty rm rootfile.txt, a następnie cd subfolder, po git add ., to będzie nie wystawić usuniętego pliku. Ale robienie git add -Atego z pewnością wprowadzi tę zmianę bez względu na to, skąd wykonasz polecenie.
-AOpcja Dodaje, modyfikuje i usuwa wpisy indeksu dopasować drzewo roboczą.
W Git 2 -Aopcja jest teraz domyślna.
Po .dodaniu a, który ogranicza zakres aktualizacji do katalogu, w którym aktualnie się znajdujesz, zgodnie z dokumentacją Git
Jeśli nie
<pathspec>podano nie, gdy użyto opcji -A, wszystkie pliki w całym drzewie roboczym są aktualizowane (stare wersje Git służyły do ograniczania aktualizacji do bieżącego katalogu i jego podkatalogów).
Jedną rzeczą, którą chciałbym dodać, jest to, że jeśli używany jest tryb --interactivelub -p, wówczas git addzachowuje się tak, jakby -uużywana była flaga update ( ) i nie dodaje nowych plików.
git add *?