Vraag Het verschil tussen "git add -A" en "git add."


Het bevel git add [--all|-A] lijkt identiek aan git add .. Is dit correct? Zo niet, hoe verschillen ze dan?


2390
2018-02-21 06:51


oorsprong


antwoorden:


Voor Git versie 2.x, zie ook de antwoorden hieronder.


Overzicht:

  • git add -A stadia Alle

  • git add . stadia nieuw en aangepast, zonder verwijderd

  • git add -u fasen aangepast en verwijderd, zonder nieuw


Detail:

git add -A is gelijk aan git add .; git add -u.

Het belangrijke punt over git add . is dat het naar de werkboom kijkt en al die paden aan de gefaseerde wijzigingen toevoegt als ze veranderd zijn of nieuw zijn en niet genegeerd worden, het voert geen 'rm'-acties uit.

git add -u kijkt naar alle nu al bijgehouden bestanden en voert de wijzigingen in die bestanden uit als ze anders zijn of als ze zijn verwijderd. Het voegt geen nieuwe bestanden toe, het voert alleen veranderingen uit naar reeds bijgehouden bestanden.

git add -A is een handige snelkoppeling voor beide.

Je kunt de verschillen testen met iets als dit (merk op dat voor Git versie 2.x je uitvoer voor git add .  git status  zullen wees anders):

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

3655
2018-02-21 09:00



Hier is een tabel voor snel begrip:

Git Versie 1.x: enter image description here

Git versie 2.x: enter image description here

Lange formulevlaggen:

  • git add -A is gelijk aan git add --all
  • git add -u is gelijk aan git add --update

Verder lezen:


646
2017-09-25 12:45



Met Git 2.0, git add -A is standaard: git add . is gelijk aan git add -A ..

git add <path> is hetzelfde als "git add -A <path>"nu, dus dat   "git add dir/"zal paden zien die u uit de directory en hebt verwijderd   registreer de verwijdering.
  In oudere versies van Git, "git add <path>"gebruikt om verwijderingen te negeren.

Je kunt zeggen "git add --ignore-removal <path>" naar   voeg alleen toegevoegde of gewijzigde paden toe in <path>, als je het echt wilt.

git add is als git add :/ (voeg alles toe vanuit de top git repomap).
Merk op dat je met git 2.7 (nov. 2015) een map kunt toevoegen met de naam ":"!
Zien commit 29abb33 (25 oktober 2015) door Junio ​​C Hamano (gitster).


Let daar op start git 2.0 (Q1 of Q2 2014), wanneer er over wordt gesproken git add . (huidig ​​pad binnen de werkboom), je moet gebruiken '.' in de andere git add commando's ook.

Dat betekent:

"git add -A ." is gelijk aan "git add .; git add -u ."

(Let op het extra '.' voor git add -A en git add -u)

Omdat git add -A of git add -u zou werken (alleen starten met git 2.0) op de hele werkende boom, en niet alleen op het huidige pad.

Die commando's zullen werken op de hele boom in Git 2.0 voor consistentie met "git commit -a"en andere opdrachten.   Omdat er geen mechanisme is om te maken "git add -u"Gedraag je alsof"git add -u .", het is belangrijk voor degenen die gewend zijn om"git add -u"(zonder pathspec) de index alleen bijwerken voor paden in de huidige submap om hun vingers te trainen om expliciet te zeggen"git add -u ."wanneer ze het menen voordat Git 2.0 komt.

Er wordt een waarschuwing gegeven wanneer deze opdrachten worden uitgevoerd zonder een pathspec en wanneer u lokale wijzigingen buiten de huidige directory hebt, omdat het gedrag in Git 2.0 anders zal zijn   van de versie van vandaag in een dergelijke situatie.


135
2018-04-23 06:32



Dus uit Charles instructies hierboven, na het testen van mijn voorgestelde begrip zou zijn als volgt:

# 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

Deze link kan ook nuttig zijn om te begrijpen in welke situatie die opdrachten kunnen worden toegepast: Verwijderde bestanden verwijderen uit uw Git-werkdirectory.


126
2018-06-01 09:27



Laat op het feest, maar deze vraag verdient ook een meer gedestilleerd snel antwoord.

git add -A 

Doet beide hieronder (zelfde als git add --all)

git add . 

Stages nieuwe + gewijzigde bestanden

git add -u 

Gedeeltes aangepast + verwijderde bestanden


26
2018-04-06 12:56



Dingen veranderden met Git 2.0:

  • -A is nu de standaard
  • het oude gedrag is nu beschikbaar met --ignore-removal
  • git add -u en git add -A in een submap zonder paden op de opdrachtregel werken op de hele boom

Dus voor git 2 is het antwoord:

  • git add . en git add -A . voeg nieuwe / gewijzigde / verwijderde bestanden toe in de huidige map
  • git add --ignore-removal . voegt nieuwe / gewijzigde bestanden toe aan de huidige map
  • git add -u . voegt gewijzigde / verwijderde bestanden toe aan de huidige map
  • zonder de punt, voeg alle bestanden in het project toe, ongeacht de huidige map

23
2017-10-13 15:29



Eindelijk denk ik dat ik dit krijg, heel veel dank aan jullie allemaal. Ik hoop dat dit wat meer duidelijkheid zal toevoegen.

!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)

Limiters kunnen -u of -A of nul zijn.

Pathspec kan een filepaat of punt zijn, '.' om de huidige map aan te geven.

Belangrijke achtergrondkennis over hoe git 'toevoegt'.

  • Onzichtbare bestanden, die worden voorafgegaan door een punt, (dotfiles) worden nooit automatisch herkend door Git. Ze worden zelfs nooit vermeld als 'niet-traceerbaar'.
  • Lege mappen worden nooit toegevoegd door git. Ze worden zelfs nooit vermeld als 'niet-traceerbaar'. (Een oplossing is om een ​​leeg bestand toe te voegen, mogelijk onzichtbaar, aan de bijgehouden bestanden.)
  • Git-status geeft geen submapinformatie weer, dwz niet-gevonden bestanden, tenzij ten minste één bestand in die submap wordt bijgehouden. Voor die tijd beschouwt Git de hele map als buiten bereik, a la 'empty'. Het is leeg van bijgehouden artikelen.
  • Een bestand specificeren = '.' (punt), of de huidige map, is niet recursief tenzij -A ook is opgegeven. Dot verwijst strikt naar de huidige map - het weglaat paden die boven en onder zijn gevonden.

Nu, gezien die kennis, kunnen we bovenstaande antwoorden toepassen.

De limiters zijn als volgt.

  • -u = --update = subset naar bijgehouden bestanden => Toevoegen = Nee; Verandering = Ja; Verwijderen = Ja. => iff het item wordt gevolgd.
  • -A = --all (niet zo'n -a, die een syntaxisfout geeft) = superset van alle niet-tracked / bijgehouden bestanden, tenzij in Git <2.0, waarbij als de dot filespec wordt gegeven, dan alleen die bepaalde map in aanmerking wordt genomen. => als het item wordt herkend, git add -A zal het vinden en toevoegen.

De pathspec is als volgt.

  • In Git <2.0, voor de twee limiters (update en alle), is de nieuwe standaard om in de gehele werkboom te werken, in plaats van het huidige pad (git <= 1.9),
  • In v2.0 kan de bewerking echter worden beperkt tot het huidige pad: voeg gewoon het expliciete puntachtervoegsel toe (dat ook geldig is in Git <= 1.9);

git add -A .

git add -u .

Tot slot, mijn beleid is;

  • 1. Zorg ervoor dat alle hunks / bestanden die moeten worden toegevoegd, in git-status worden geregistreerd.
  • 1A.Als er items ontbreken, vanwege onzichtbare bestanden / mappen, voeg ze dan afzonderlijk toe.
  • 2. Houd een goede gitignore aan, zodat normaal gesproken alleen bestanden van belang niet worden bijgehouden en / of niet worden herkend.
  • 3. Van het bovenste niveau van de repo, "git add -A" om alle items toe te voegen. Dit werkt in alle versies van git.
  • 4. Verwijder indien gewenst alle gewenste items uit de index.
  • 6.Als er een grote fout is, voer dan 'reset' uit om de index helemaal leeg te maken.

11
2018-04-06 02:03



git add . is gelijk aan git add -A . voegt bestanden toe aan de index alleen van huidige en onderliggende mappen.

git add -A voegt bestanden toe aan de index van alle mappen in de werkboom.

P.S .: informatie heeft betrekking op Git 2.0.


7
2018-06-03 19:12



In Git 2.x:

  • Als u zich direct op de werkmap, dan git add -A en git add . werk zonder verschil.

  • Als u zich in een submap van de werkmap, git add -A zal alle bestanden van het geheel toevoegen werkmap, en git add . zal bestanden van uw toevoegen huidige map.

En dat is alles.


2
2018-03-16 22:32