Saya baru mengenal git dan saya memiliki pertanyaan tentang menambahkan file di git. Saya telah menemukan beberapa pertanyaan stackoverflow tentang perbedaan antara git add .
dan git add -a
, git add --all
, git add -A
, dll Tapi saya sudah tidak dapat menemukan tempat yang menjelaskan apa yang git add *
dilakukannya. Saya bahkan telah melihat halaman manual git add , tetapi tidak membantu. Saya telah menggunakannya sebagai pengganti git add .
dan rekan kerja saya bertanya mengapa. Saya tidak punya jawaban. Saya selalu menggunakan git add *
.
Apakah git add .
dan git add *
sama? Apakah yang satu menambahkan file yang diubah dari direktori saat ini saja, sementara yang lain menambahkan file dari direktori dan subdirektori saat ini (secara rekursif)?
Ada bagan bagus yang tercantum di salah satu pertanyaan tumpukan lainnya yang menunjukkan perbedaan antara git add -A
git add .
dan git add -u
, tetapi tidak ada git add *
.
Catatan: Saya mengerti apa artinya menggunakan asterisk sebagai wildcard (tambahkan semua file dengan ekstensi yang diberikan). Sebagai contoh, git add *.html
akan menambahkan semua file yang memiliki .html
ekstensi (tetapi mengabaikan .css
, .js
, dll).
Terima kasih untuk bantuannya!
sumber
git add .
lagi, dan file terhapus tidak ada masalah, tidak sepertiX
yang disarankan di baris itu.Jawaban:
add *
berarti menambahkan semua file di direktori saat ini, kecuali file yang namanya dimulai dengan titik. Ini adalah fungsi shell Anda dan Git hanya menerima daftar file.add .
tidak memiliki arti khusus di shell Anda, sehingga Git menambahkan seluruh direktori secara rekursif, yang hampir sama, tetapi termasuk file yang namanya dimulai dengan titik.sumber
git add .
tambahkan semua file, folder, dan subfolder, termasuk .gitignore dan apa pun yang dimulai dengan titik, sementaragit add *
akan menambahkan file, folder, dan subfolder, kecuali yang dimulai dengan titik? Apakah itu akurat?git add *
akan tetap menambahkan file yang dimulai dengan titik jika berada dalam subdirektori.git add .
juga menghormati .gitignore, sedangkangit add *
akan memunculkan kesalahan jika ada file non-dot yang gitignored. Jauh lebih baik untuk digunakangit add .
daripadagit add *
.*
. Dalam hal ini Git akan menemukan file-dot.*
untuk melindunginya dari shell. Ini bukan masalah bit yang tersembunyi, hanya saja aturan yang dikompilasi Git berbeda.*
bukan bagian dari git - ini adalah karakter pengganti yang ditafsirkan oleh shell.*
memperluas ke semua file di direktori saat ini, dan hanya kemudian diteruskan ke git, yangadd
semuanya..
adalah direktori saat ini itu sendiri, dangit add
itu akan menambahkannya dan semua file di bawahnya.sumber
*
menghindari file tersembunyi (yaitu, file yang namanya dimulai dengan a.
). Bagaimanapun, jika Anda tidak menambahkan file tertentu, saya hanya akan menggunakangit add -u
(ataugit add -A
jika Anda membuat file baru).Menggunakan titik
.
di shell biasanya berarti "direktori saat ini".Saat Anda menggunakan tanda bintang
*
pada shell, fitur yang disebutfile-globbing
digunakan. Misalnya pada bash fungsinyaglob()
melakukan hal itu. Halaman manual untuk glob (man 7 glob
) menyatakan:Itu berarti saat Anda meneruskan argumen ke program apa pun di baris perintah yang berisi
'?'
,'*'
atau'['
, pertama kali globbing memperluas pola karakter pengganti ke dalam daftar file, lalu memberikan file ini sebagai argumen untuk program itu sendiri.Perbedaan makna antara
'git add .'
dan'git add *'
dijelaskan dengan jelas oleh Denis :git add
mengharapkan daftar file yang akan ditambahkan. Dalam contoh di atas shell mengembang*
atau.
masing-masing dan memberikan hasilnya sebagai parameter untuk ditambahkan git. Sekarang perbedaannya adalah dengangit add .
git akan meluas ke direktori saat ini sedangkangit add *
memicu file globbing dan semacamnya meluas ke semua file dan direktori yang tidak dimulai dengan titik.sumber
Untuk lebih jelasnya, saya berikan jawabannya pada tabel di bawah ini:
Catatan tambahan (terinspirasi oleh komentar @ reka18):
Catatan 1.
git add -A
dangit add -u
perintah yang dilakukan tanpa parameter tambahan akan menjadi penyempitan tambahan (subdirektori atau indikasi topeng untuk nama file) yang bekerja di kisaran seluruh direktori kerja (juga jika kita menjalankan perintah di subdirektori kerja direktori).Catatan 2. The
.
dan*
adalah masing-masing jalur direktori (direktori saat ini) dan wildcard, yang memperjelas jalan perintah. Misalnya, jika perintahgit add .
orgit add *
dijalankan di beberapa subdirektori dari direktori kerja, maka tindakannya hanya digunakan dalam subdirektori ini, bukan seluruh direktori kerja.Catatan 3. The
git add -A
dangit add -u
perintah dapat lebih disempurnakan dengan menambahkan path atau masker untuk file, misalnya,git add -A app/controllers
ataugit add -u app\styles\*
.sumber
git add -A
dangit add .
identik?git add -A
berlaku untuk seluruh direktori kerja dangit add .
selalu direktori saat ini).git add -A
(--all) Menambahkan semuanya, sehingga semua yang ada di folder Anda di disk terwakili di area pementasangit add .
Tahapan semuanya, tetapi tidak menghapus file yang telah dihapus dari diskgit add *
Tahapan semuanya, tetapi bukan file yang dimulai dengan titik & tidak menghapus file yang telah dihapus dari diskgit add -u
(--update) Tahapan hanya File yang Dimodifikasi, menghapus file yang telah dihapus dari disk, tidak menambahkan yang barugit add <file name 1> <file name 2>
Menambahkan hanya file tertentusumber