Yanıtlar:
Bu cevap yalnızca Git sürüm 1.x için geçerlidir . Git sürüm 2.x için diğer yanıtlara bakın.
Özet:
git add -Atüm değişiklikleri aşamalandırır
git add .silmeden yeni dosyalar ve değişiklikler yapar
git add -uyeni dosyalar olmadan değişiklik ve silme işlemleri yapar
Detay:
git add -Aeşittir git add .; git add -u.
Önemli git add .olan, çalışma ağacına bakması ve değiştirilmeleri veya yeni olmaları ve yoksayılmaları durumunda aşamalı değişikliklere tüm bu yolları eklemesidir.
git add -uhalihazırda izlenen tüm dosyalara bakar ve farklıysa veya kaldırılmışsa bu dosyalardaki değişiklikleri aşamalandırır. Herhangi bir yeni dosya eklemez, sadece önceden izlenen dosyalarda değişiklik yapar.
git add -A her ikisini de yapmak için kullanışlı bir kısayoldur.
Farklılıkları böyle bir şeyle test edebilirsiniz (Git sürüm 2.x için çıktınızın farklı git add . git status olacağını unutmayın ):
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 -pbeklendiği gibi çalışmaz (izlenmeyen dosyalar hakkında etkileşimli olarak sorun)
git add -A :/veyagit add -A .
git add -uhaline gelmiştir git add -u :/ikinci parametre, bir yol olmaktan belirli dizinleri-u izin ile, :/bütün ağaç işler.
git add -uveya git add .ve hatta hiçbir senkron sorunları var olduklarından emin olmak üzere ilave ekstra zihinsel vergi hesaplandıktan sonra daha kolay hayatını yapar yaparak? Git değil Furthur bölünmüş yapar Acaba neden add -uiki ayrı komutlar içine add -u1ve add-u2dosyalar için sayede bir eser olmayan rakamlar ile başlayan dosyalar için diğer rakamlar ile başlayan ve
İşte hızlı anlama için bir tablo:
Git Sürüm 1.x :

Git Sürüm 2.x :

Uzun biçimli bayraklar:
git add -A eşittir git add --allgit add -u eşittir git add --updateDaha fazla okuma:
git add .Yalnızca geçerli yolda olan yeni dosyaları eklediğinden , bu tamamen doğru değildir . Yani yeni bir dizininiz varsa ../foo, git add -Aonu dizileyecek, git add .olmayacak.
git add .eşdeğer git add -A ., eşdeğergit add "*"
İle Git 2.0, git add -Avarsayılan değer: git add .eşittirgit add -A . .
git add <path>git add -A <path>artık " " ile aynıdır , böylece "git add dir/" dizinden kaldırdığınız yolları fark eder ve kaldırmayı kaydeder.
Git'in eski sürümlerinde "git add <path>" kaldırma işlemleri yoksayıldı.Gerçekten isterseniz,
git add --ignore-removal <path>yalnızca eklenen veya değiştirilen yolları eklemek için " " diyebilirsiniz<path>.
git add -Agibidir git add :/( top git repo klasöründen her şeyi ekleyin ).
Git 2.7'nin (Kasım 2015) " :" adlı bir klasör eklemenize izin vereceğini unutmayın !
Bkz 29abb33 taahhüt tarafından (25 Eki 2015) Junio C Hamano ( gitster) .
Not o git 2.0 (Q1 veya Q2 2014) başlayarak bahsederken, git add .(çalışma ağacındaki akım yolu) kullanarak, 'kullanmalıdır .diğerinde' git addde komutları.
Bunun anlamı:
"
git add -A ." Eşdeğerdir "git add .; git add -u ."
(Ekstra ' .' git add -Ave için not edin git add -u)
Çünkü git add -Aveya sadece geçerli yolda değil git add -u, tüm çalışma ağacında çalışır (yalnızca git 2.0'dan başlayarak) .
Bu komutlar Git 2.0'daki tüm ağaçta "
git commit -a" ve diğer komutlarla uyumluluk için çalışacaktır . "git add -u" Gibi davranma " " gibi davranmak için herhangi bir mekanizma olmayacağındangit add -u ., "git add -u" (pathspec olmadan) dizini yalnızca geçerli alt dizindeki yollar için parmaklarını açıkça "git add -u ."Git 2.0 gelmeden bunu kastettiklerinde.Bu komutlar bir pathspec olmadan çalıştırıldığında ve geçerli dizinin dışında yerel değişiklikleriniz olduğunda bir uyarı verilir , çünkü Git 2.0'daki davranış böyle bir durumda bugünün sürümünden farklı olacaktır.
Gönderen Charles'ın talimatlar , aşağıdaki gibi olacaktır Önerdiğim anlayış test ettikten sonra:
# 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
Bu blog gönderisi, bu komutların hangi durumda uygulanabileceğini anlamak için de yararlı olabilir: Silinen Dosyaları Git Çalışma Dizininizden Kaldırma .
Git 2.0 ( 2014-05-28 ) ile durum değişti :
-A şimdi varsayılan--ignore-removal.git add -uve git add -Akomut satırında yolları olmayan bir alt dizinde tüm ağaç üzerinde çalışır.Yani Git 2 için cevap:
git add .ve git add -A .geçerli dizine yeni / değiştirilmiş / silinmiş dosyaları ekleyingit add --ignore-removal . geçerli dizine yeni / değiştirilmiş dosyalar eklergit add -u . geçerli dizine değiştirilmiş / silinmiş dosyaları eklerDaha damıtılmış hızlı bir cevap:
git add -A
git add .
git add -u
git add :/+git add -u :/
In Git 2.x :
Eğer doğrudan yer alıyorsa çalışma dizinine sonra git add -Ave git add .fark etmeden işe.
Eğer herhangi alt dizininde ise çalışma dizini , git add -Atüm gelen tüm dosyaları katacak çalışma dizininin ve git add .senin dosya katacak geçerli dizinde .
Ve hepsi bu.
Umarım bu daha fazla 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ğine dair önemli arka plan bilgisi:
-Ade belirtilmedikçe özyinelemeli değildir . Dot kesinlikle geçerli dizini ifade eder - yukarıda ve aşağıda bulunan yolları atlar.Şimdi, bu bilgi göz önüne alındığında, yukarıdaki cevapları uygulayabiliriz.
Sınırlayıcılar aşağıdaki gibidir.
-u= --update= izlenen dosyalara alt küme => Ekle = Hayır; Değiştir = Evet; Sil = Evet. => Eğer öğe izlenir.-A= --all(böyle bir -asözdizimi hatası vermez) = izlenmemiş / izlenen dosyaların üst kümesi, 2.0'dan önceki Git'te değilse, burada dot filespec verilirse, yalnızca o klasör dikkate alınır. => Eğer madde tanınır, git add -Aonu bulur ve ekler.Pathspec aşağıdaki gibidir.
git add -A .
git add -u .
Sonuç olarak, politikam:
git status..gitignoreNormalde yalnızca ilgili dosyaların izlenememesi ve / veya tanınmaması dosyaya sahip olun.Hem git add .vegit add -A Git yeni sürümlerinde tüm yeni, değiştirilmiş ve silinen dosyaları sahnelenecek.
Aradaki fark, git add -Açalışan Git deponuza ait olan "daha yüksek, geçerli ve alt dizinler" içindeki dosyaları aşamalandırmasıdır. Ancak git add .yalnızca geçerli dizindeki dosyaları ve onu izleyen alt dizinleri aşamalar ( değil dışarıdaki dosyaları , daha yüksek dizinleri).
İşte bir örnek:
/my-repo
.git/
subfolder/
nested-file.txt
rootfile.txt
Geçerli çalışma dizini ise /my-repove siz do rm rootfile.txtardından cd subfolder, ardından git add ., o zaman olacak değil silinen dosyayı sahne. Ancak git add -Akomutun nereden gerçekleştirildiği önemli değil, yapmak kesinlikle bu değişikliği gerçekleştirecektir.
-A seçenek, çalışma ağacıyla eşleşmesi için dizin girdilerini ekler, değiştirir ve kaldırır.
Git 2'de -Aseçenek artık varsayılan.
Bir zaman .dizine o sınırlar güncelleme kapsamını eklenir Eğer gereği, şu anda Git belgelerinde
<pathspec>-A seçeneği kullanıldığında hayır verilirse, tüm çalışma ağacındaki tüm dosyalar güncellenir (Git'in eski sürümleri, güncelleştirmeyi geçerli dizine ve alt dizinlerine sınırlamak için kullanılır).
Ekleyeceğim bir şey, --interactiveveya -pmodu kullanılıyorsa git add, update ( -u) bayrağı kullanılmış gibi davranacak ve yeni dosyalar eklemeyecek olmasıdır.
git add *?