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 -A
tüm değişiklikleri aşamalandırır
git add .
silmeden yeni dosyalar ve değişiklikler yapar
git add -u
yeni dosyalar olmadan değişiklik ve silme işlemleri yapar
Detay:
git add -A
eş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 -u
halihazı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 -p
beklendiği gibi çalışmaz (izlenmeyen dosyalar hakkında etkileşimli olarak sorun)
git add -A :/
veyagit add -A .
git add -u
haline gelmiştir git add -u :/
ikinci parametre, bir yol olmaktan belirli dizinleri-u izin ile, :/
bütün ağaç işler.
git add -u
veya 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 -u
iki ayrı komutlar içine add -u1
ve add-u2
dosyalar 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 --all
git add -u
eşittir git add --update
Daha 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 -A
onu dizileyecek, git add .
olmayacak.
git add .
eşdeğer git add -A .
, eşdeğergit add "*"
İle Git 2.0, git add -A
varsayı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 -A
gibidir 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 add
de komutları.
Bunun anlamı:
"
git add -A .
" Eşdeğerdir "git add .; git add -u .
"
(Ekstra ' .
' git add -A
ve için not edin git add -u
)
Çünkü git add -A
veya 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 -u
ve git add -A
komut 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 -A
ve git add .
fark etmeden işe.
Eğer herhangi alt dizininde ise çalışma dizini , git add -A
tü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:
-A
de 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 -a
sö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 -A
onu bulur ve ekler.Pathspec aşağıdaki gibidir.
git add -A .
git add -u .
Sonuç olarak, politikam:
git status
..gitignore
Normalde 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-repo
ve siz do rm rootfile.txt
ardından cd subfolder
, ardından git add .
, o zaman olacak değil silinen dosyayı sahne. Ancak git add -A
komutun 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 -A
seç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, --interactive
veya -p
modu kullanılıyorsa git add
, update ( -u
) bayrağı kullanılmış gibi davranacak ve yeni dosyalar eklemeyecek olmasıdır.
git add *
?