Soru “Git add -A” ile “git add” arasındaki fark.


Komuta git add [--all|-A] aynı olduğu görülüyor git add .. Bu doğru mu? Değilse, nasıl farklılıklar gösterirler?


2398
2018-02-21 06:51


Menşei




Cevaplar:


İçin Git sürümü 2.x, aşağıya da cevaplara bakın.


Özet:

  • git add -A aşamaları Herşey

  • git add . yeni ve modifiye aşamaları, silinmiş

  • git add -u değiştirilmiş ve silinmiş aşamalar, yeni olmadan


Detay:

git add -A eşdeğerdir git add .; git add -u.

Önemli nokta hakkında git add . çalışma ağacına bakması ve değiştikleri, yeni oldukları ve göz ardı edilmemeleri durumunda tüm bu yolların aşamalı değişikliklere eklenmesidir, herhangi bir "rm" eylemi gerçekleştirmez.

git add -u hepsine bakar zaten izlenen dosyaları izler ve değişiklikleri farklıysa veya kaldırılmışsa bu dosyalarda değişiklik yapar. Yeni bir dosya eklemez, sadece izlenen dosyalarda değişiklik yapar.

git add -A her ikisini de yapmak için kullanışlı bir kısayol.

Farklılıkları bu gibi bir şeyle sınayabilirsiniz (Çık sürüm 2.x için çıkışınızın git add .  git status  irade farklı ol):

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

3658
2018-02-21 09:00



Arasındaki fark nasıl git add *? - Jared
@Jared, sorunuzu cevaplamak için yıldız açıklamasını ekledi - Geo
Sadelik açısından, lütfen bu yanıttaki özet kısmının üzerindeki herhangi bir şeyi kaldırın. Değilse, özeti en üste taşıyın. - maliayas
Git, daha yeni sürümlerinde bilgi için git add -u olmuş git add -u :/ ikinci parametre bir yoldur, belirli dizinlere ulaşmanıza izin verir. :/ bütün ağacı işler. - Brizee
@CharlesBailey, Git gerçekten Aşk iyi bir sebepten dolayı karmaşık şeyler yapmak. Orada bir gerçek Birinin özel olarak ihtiyaç duyacağı durumlarda kullan git add -u veya git add . ve senkronizasyon problemi olmadığından emin olmak için ekstra zihinsel vergiyi muhasebeleştirdikten sonra bile hayatını kolaylaştırır mı? Git neden ayrılmak istemediğini merak ediyorum add -u iki ayrı komut halinde add -u1 ve add-u2 Biri sayılar ile başlayan dosyalar için, diğeri ise rakam olmayanlarla başlayan dosyalar için çalışır. - Pacerier


İşte hızlı bir anlayış için tablo:

Git Sürüm 1.x: enter image description here

Git Sürüm 2.x: enter image description here

Uzun biçimli bayraklar:

  • git add -A eşdeğerdir git add --all
  • git add -u eşdeğerdir git add --update

Daha fazla okuma:


648
2017-09-25 12:45



Masa için teşekkürler. Sadece değiştirilmiş dosyaları eklemenin bir yolu var mı? Yeni dosya veya silinmiş dosya yok - Gokul N K
@Gokul: göre bu gönderi, kullanabilirsiniz git diff-files -z --diff-filter=M --name-only | xargs -0 git add Yalnızca değiştirilmiş dosyaları eklemek, ancak yeni dosyaları veya silme işlemlerini eklemek. - Ville
Bu tamamen doğru değil, git add . sadece geçerli yoldaki yeni dosyaları ekler. Yani yeni bir dizininiz varsa ../foo, git add -A sahne alacak git add . olmayacak. - 0sh
Yani, git add . eşdeğerdir git add -A ., eşdeğerdir git add "*" - flow2k


İle Git 2.0, git add -A varsayılan: git add . eşittir git add -A ..

git add <path> aynıdır "git add -A <path>"şimdi, öyle ki   "git add dir/"dizinden kaldırdığınız yolları fark edecek ve   kaldırmayı kaydedin.
  Git'in eski sürümlerinde "git add <path>"kaldırmaları görmezden gelirdi.

Söyleyebilirsin "git add --ignore-removal <path>"to   yalnızca eklenen veya değiştirilmiş yollar ekleyin <path>eğer gerçekten istiyorsan.

git add gibi git add :/ (top git repo klasöründen her şeyi ekle).
Git 2.7'in (Kasım 2015) "adlı bir klasör eklemenize izin vereceğini unutmayın.:"!
Görmek 29abb33 işlemek (25 Eki 2015) tarafından Junio ​​C Hamano (gitster).


Bunu not et git 2.0 başlangıç ​​(Q1 veya Q2 2014), bahsederken git add . (çalışma ağacındaki geçerli yol), kullanmalısınız..'diğerinde git add komutları da.

Bunun anlamı:

"git add -A ."eşdeğerdir"git add .; git add -u ."

(Ekstraya dikkat edin.' için git add -A ve git add -u)

Çünkü git add -A veya git add -u çalışır (sadece git 2.0 başlangıç) tüm çalışan ağaçve sadece mevcut yol üzerinde değil.

Bu komutlar ile tutarlılık için Git 2.0'de tüm ağacın üzerinde çalışın "git commit -a"ve diğer komutlar.   Çünkü yapacak bir mekanizma olmayacak "git add -u"sanki"git add -u .", alışkın olanlar için önemlidir"git add -u"(pathspec olmadan) dizini, yalnızca geçerli alt dizindeki yollar için güncelleştirmek için parmaklarını eğitmeye başlamak için günceller"git add -u ."Git 2.0 gelmeden önce onu kastettikleri zaman.

Bu komutlar bir pathspec olmadan ve geçerli dizinin dışında yerel değişiklikler olduğunda çalıştırıldığında bir uyarı verilirÇünkü Git 2.0'daki davranış farklı olacak   Böyle bir durumda bugünün sürümünden.


136
2018-04-23 06:32



Detaylar için teşekkürler .. Onları derlememe dahil ettiler. add RU.SO. - Nick Volynkin
@NickVolynkin Bu harika! SO'nun uluslararası toplumunu planlandığı gibi görmekten memnunum. Referans için: ru.stackoverflow.com/a/431840 - VonC
@ VonC, Nice, Git millet aslında onların güncellemelerinin "işleri daha tutarlı hale getireceğini" söylemesi için yanağına sahipti. Yaptıkları şey daha fazla karışıklık ve tutarsızlık yarattı. 26 alfabe var ve onlar vardı Daha önce kullanılmış olan bir bayrağı yeniden kullanmak için. - Pacerier


Yukarıdaki Charles talimatlarından, test ettikten sonra, önerdiğim anlayış aşağıdaki gibi olacaktır:

# 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

Bu bağlantı, bu komutların hangi durumlarda uygulanabileceğini anlamak için de yardımcı olabilir: Git Çalıştırma Dizini'nden Silinen Dosyaları Kaldırma.


126
2018-06-01 09:27



Bu artık 2.0'da doğru değil. eklemek . aynı yol için -A eklemek için eşittir, tek fark ağacın diğer yollarında yeni dosyalar varsa - Claudiu Creanga


Partinin sonlarına doğru ancak bu soru da daha damıtılmış hızlı bir cevabı hak ediyor.

git add -A 

Her ikisi de (aynı ile aynı git ekle - tüm)

git add . 

Yeni + değiştirilmiş dosyaları aşamaları

git add -u 

Aşamalar + silinmiş dosyalar değiştirildi


27
2018-04-06 12:56



Merhaba, sadece değiştirilmiş dosyaları sadece sahneye koymak istiyorsan ne olur? Bunu nasıl yaptın? - TheGrapeBeyond
Merhaba, güzel soru. Bunun için bildiğim kadar kolay bir bayrak yok .. git diff-files -z --diff-filter = M - name - only | xargs -0 git eklenti -> stackoverflow.com/questions/14368093/... - K. Kilian Lindberg
Aslında bu git add :/ + git add -u :/ - Nick Volynkin


İşler değişti Git 2.0 ile:

  • -A şimdi varsayılan
  • eski davranış şu an --ignore-removal
  • git add -u ve git add -A Komut satırında yolları olmayan bir alt dizinde tüm ağacın üzerinde çalışır

Yani git 2 için cevap:

  • git add . ve git add -A . Geçerli dizinde yeni / değiştirilmiş / silinmiş dosyalar ekle
  • git add --ignore-removal . Geçerli dizinde yeni / değiştirilmiş dosyalar ekler
  • git add -u . Geçerli dizinde değiştirilmiş / silinmiş dosyalar ekler
  • nokta olmadan, geçerli dizinden bağımsız olarak projedeki tüm dosyaları ekleyin

23
2017-10-13 15:29



Bunun doğru olduğunu düşünmüyorum. Git v2.10.windows.2 'git add' ifadesinin kullanılması 'Hiçbir şey belirtilmediyse, hiçbir şey eklenmedi'. 'git add -A' tüm değiştirilmiş dosyaları ekler. Hangi öneri '-A' varsayılan değil. - Neutrino


Sonunda bunu elde ettiğimi düşünüyorum, hepinize çok teşekkürler. Umarım bu biraz daha netlik katabilir.

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

Sınırlayıcılar -u veya -A veya sıfır olabilir.

Pathspec bir dosya yolu veya nokta olabilir, '.' geçerli dizini belirtmek için

Git'in nasıl eklediği hakkında önemli bilgiler.

  • Görünmez dosyalar, bir nokta ile öntanımlı olanlar (dotfiles), asla otomatik olarak Git tarafından tanınmadı. Onlar asla “izisiz” olarak listelenmezler.
  • Boş klasörler asla git tarafından eklenmez. Onlar asla “izisiz” olarak listelenmezler. (Bir geçici çözüm, izlenen dosyalara, muhtemelen görünmez olan boş bir dosya eklemektir.)
  • Git, alt klasör bilgisini izler, yani, bu alt klasördeki en az bir dosya izlenmedikçe, izlenmeyen dosyalar. Gitmeden önce git, tüm klasörü kapsam dışı, bir 'boş' olarak kabul eder. İzlenen eşyalardan boş.
  • Bir filespec belirtme = '.' (nokta) veya geçerli dizin, -A da belirtilmemişse, özyinelemeli değildir. Nokta, geçerli dizine kesinlikle başvurur - yukarıda ve aşağıda bulunan yolları atar.

Şimdi, bu bilgiye göre, yukarıdaki cevapları uygulayabiliriz.

Sınırlayıcılar aşağıdaki gibidir.

  • -u = --update = izlenen dosyalara alt kümesi => Ekle = Hayır; Değiştir = Evet; Sil = Evet. => Öğe izlendiyse.
  • -A = --all (no-no, sözdizimi hatası verir) = tüm <a1> Git </ a1> </ a1> </ a1> </ a1> içinde, programlanmış / izlenen tüm dosyaların üst kümesi, burada dot filespec verilirse, o zaman sadece bu özel klasör kabul edilir. => öğenin tanınması durumunda, git add -A onu bulur ve ekler.

Pathspec aşağıdaki gibidir.

  • Git <2.0'da, iki sınırlayıcı için (güncelleme ve hepsi), yeni varsayılan, geçerli yol yerine tüm çalışma ağacında çalışacaktır (git <= 1.9),
  • Ancak, v2.0'da, işlem geçerli yolla sınırlandırılabilir: sadece açık nokta son ekini ekleyin (bu aynı zamanda Git <= 1.9'da geçerlidir);

git add -A .

git add -u .

Sonuç olarak benim politikam;

  • 1. Eklenecek her türlü hunks / dosyalarının git durumunda olduğunu belirtin.
  • 1A. Görünmeyen dosyalar / klasörler nedeniyle herhangi bir öğe eksikse, bunları ayrı olarak ekleyin.
  • 2.Güzel bir gitignore edin, böylece normalde sadece ilgilenilen dosyalar izlenemez ve / veya tanınmayanlardır.
  • Repo'nun üst seviyesinden 3.The, tüm öğeleri eklemek için "git add -A". Bu, git'in tüm sürümlerinde çalışır.
  • 4. İstenirse, istediğiniz öğeleri indiden çıkarın.
  • 6. Büyük bir hata varsa, indeksi tamamen silmek için 'sıfırla' komutunu kullanın.

11
2018-04-06 02:03





git add . eşittir git add -A . dosyaları yalnızca geçerli ve çocuk klasörlerinden dizine ekler.

git add -A çalışma ağacındaki tüm klasörlerdeki dizinlere dosyalar ekler.

P.S .: bilgi Git 2.0 ile ilgilidir.


7
2018-06-03 19:12





İçinde Git 2.x:

  • Doğrudan doğrudan çalışma dizini, sonra git add -A ve git add . fark etmeden çalışmak.

  • Eğer herhangi bir alt dizinindeyseniz çalışma dizini, git add -A tüm dosyaları tümden ekler çalışma dizini, ve git add . dosyalarınızdan geçerli dizin.

Ve hepsi bu.


2
2018-03-16 22:32