Perintah itu git add [--all|-A]
tampaknya identik dengan git add .
. Apakah ini benar? Jika tidak, apa bedanya?
Jawaban ini hanya berlaku untuk Git versi 1.x . Untuk Git versi 2.x, lihat jawaban lain.
Ringkasan:
git add -A
tahap semua perubahan
git add .
tahap file baru dan modifikasi, tanpa penghapusan
git add -u
tahap modifikasi dan penghapusan, tanpa file baru
Detail:
git add -A
setara dengan git add .; git add -u
.
Poin penting tentang git add .
ini adalah bahwa ia melihat pohon yang bekerja dan menambahkan semua jalan ke perubahan bertahap jika mereka baik diubah atau baru dan tidak diabaikan, itu tidak melakukan tindakan 'rm'.
git add -u
melihat semua file yang sudah dilacak dan melakukan tahapan perubahan pada file-file tersebut jika berbeda atau telah dihapus. Itu tidak menambahkan file baru, itu hanya tahap perubahan ke file yang sudah dilacak.
git add -A
adalah jalan pintas yang berguna untuk melakukan keduanya.
Anda dapat menguji perbedaan dengan sesuatu seperti ini (perhatikan bahwa untuk Git versi 2.x hasil keluaran Anda git add .
git status
akan berbeda):
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 *
?git add -A -p
tidak berfungsi seperti yang diharapkan (tanyakan secara interaktif tentang file yang tidak terlacak)git add -A :/
ataugit add -A .
git add -u
telah menjadigit add -u :/
dengan parameter terakhir menjadi path, memungkinkan Anda untuk -u direktori tertentu,:/
menangani seluruh pohon.git add -u
ataugit add .
dan dengan melakukan itu membuat hidupnya lebih mudah bahkan setelah memperhitungkan pajak ekstra mental ditambahkan untuk memastikan bahwa tidak ada masalah sinkronisasi? Saya bertanya-tanya mengapa Git tidak memecahadd -u
menjadi dua perintah terpisahadd -u1
dan diadd-u2
mana satu bekerja untuk file yang dimulai dengan angka dan yang lainnya untuk file yang dimulai dengan non-angkaIni adalah tabel untuk pemahaman cepat:
Versi Git 1.x :
Git Versi 2.x :
Bendera bentuk panjang:
git add -A
setara dengangit add --all
git add -u
setara dengangit add --update
Bacaan lebih lanjut:
sumber
git diff-files -z --diff-filter=M --name-only | xargs -0 git add
untuk hanya menambahkan file yang dimodifikasi, tetapi tidak pada file baru atau penghapusan.git add .
hanya menambahkan file baru yang ada di jalur saat ini. Yaitu jika Anda memiliki direktori baru../foo
,git add -A
akan panggung itu,git add .
tidak akan.git add .
sama dengangit add -A .
, yang setara dengangit add "*"
Dengan Git 2.0,
git add -A
default:git add .
sama dengangit add -A .
.git add -A
sepertigit add :/
( tambahkan semuanya dari folder top git repo ).Perhatikan bahwa git 2.7 (November 2015) akan memungkinkan Anda untuk menambahkan folder bernama "
:
"!Lihat komit 29abb33 (25 Okt 2015) oleh Junio C Hamano (
gitster
) .Perhatikan bahwa mulai git 2.0 (Q1 atau Q2 2014) , ketika berbicara tentang
git add .
(jalur saat ini di dalam pohon kerja), Anda harus menggunakan '.
' digit add
perintah lain juga.Itu berarti:
(Catat ekstra '
.
' untukgit add -A
dangit add -u
)Karena
git add -A
ataugit add -u
akan beroperasi (mulai git 2.0 saja) di seluruh pohon kerja , dan bukan hanya di jalur saat ini.sumber
Dari instruksi Charles , setelah menguji pengertian yang saya ajukan adalah sebagai berikut:
Posting blog ini mungkin juga membantu untuk memahami dalam situasi apa perintah-perintah itu dapat diterapkan: Menghapus File yang Dihapus dari Direktori Kerja Git Anda .
sumber
Berbagai hal berubah dengan Git 2.0 ( 2014-05-28 ):
-A
sekarang default--ignore-removal
.git add -u
dangit add -A
dalam subdirektori tanpa jalur pada baris perintah beroperasi di seluruh pohon.Jadi untuk Git 2 jawabannya adalah:
git add .
dangit add -A .
menambahkan file baru / yang dimodifikasi / dihapus dalam direktori saat inigit add --ignore-removal .
menambahkan file baru / yang dimodifikasi di direktori saat inigit add -u .
menambahkan file yang dimodifikasi / dihapus dalam direktori saat inisumber
Jawaban cepat yang lebih disaring:
Apakah keduanya di bawah ini (sama seperti git add --all )
Tahapan + file baru yang dimodifikasi
Tahapan dimodifikasi + dihapus file
sumber
git add :/
+git add -u :/
Di Git 2.x :
Jika Anda berlokasi langsung di direktori kerja , maka
git add -A
dangit add .
bekerja tanpa perbedaan.Jika Anda berada di subdirektori dari direktori kerja ,
git add -A
akan menambahkan semua file dari seluruh direktori kerja , dangit add .
akan menambahkan file dari direktori Anda saat ini .Dan itu saja.
sumber
Saya harap ini dapat menambah kejelasan.
Limiters mungkin -u atau -A atau nihil.
Pathspec mungkin berupa file path atau titik, '.' untuk menunjukkan direktori saat ini.
Pengetahuan latar belakang penting tentang bagaimana Git 'menambahkan':
-A
juga ditentukan. Dot hanya merujuk ke direktori saat ini - ia menghilangkan jalur yang ditemukan di atas dan di bawah.Sekarang, mengingat pengetahuan itu, kita dapat menerapkan jawaban di atas.
Limiters adalah sebagai berikut.
-u
=--update
= subset ke file yang dilacak => Tambah = Tidak; Ubah = Ya; Hapus = Ya. => jika item dilacak.-A
=--all
(tidak ada yang-a
, yang memberikan kesalahan sintaksis) = superset dari semua file yang tidak dilacak / dilacak, kecuali dalam Git sebelum 2.0, di mana jika dot filespec diberikan, maka hanya folder tertentu yang dipertimbangkan. => jika item dikenali,git add -A
akan menemukannya dan menambahkannya.Pathspec adalah sebagai berikut.
git add -A .
git add -u .
Kesimpulannya, kebijakan saya adalah:
git status
..gitignore
file yang sehingga biasanya hanya file yang menarik yang tidak terlacak dan / atau tidak dikenali.sumber
git add .
sama dengangit add -A .
menambahkan file ke indeks hanya dari folder saat ini dan anak-anak.git add -A
menambahkan file ke indeks dari semua folder di pohon kerja.PS: informasi berhubungan dengan Git 2.0 (2014-05-28).
sumber
Keduanya
git add .
dangit add -A
akan menampilkan semua file baru, yang dimodifikasi dan dihapus dalam versi Git yang lebih baru.Perbedaannya adalah bahwa
git add -A
file tahap dalam "lebih tinggi, saat ini dan subdirektori" milik repositori Git Anda yang berfungsi. Tetapi melakukangit add .
hanya tahapan file dalam direktori saat ini dan subdirektori mengikutinya ( tidak file yang berada di luar, yaitu direktori yang lebih tinggi).Ini sebuah contoh:
Jika direktori kerja Anda saat ini adalah
/my-repo
, dan Anda melakukannyarm rootfile.txt
, kemudiancd subfolder
, diikuti olehgit add .
, maka itu tidak akan mem-stage file yang dihapus. Tetapi melakukangit add -A
tentu akan melakukan perubahan ini di mana pun Anda melakukan perintah.sumber
Itu
-A
pilihan menambahkan, memodifikasi, dan menghapus entri indeks untuk mencocokkan pohon bekerja.Dalam Git 2,
-A
opsi sekarang menjadi default.Ketika a
.
ditambahkan yang membatasi ruang lingkup pembaruan ke direktori Anda saat ini, sesuai dengan dokumentasi GitSatu hal yang akan saya tambahkan adalah bahwa jika mode
--interactive
atau-p
digunakan makagit add
akan berperilaku seolah-olah-u
bendera pembaruan ( ) digunakan dan tidak menambahkan file baru.sumber