Pertanyaan Perbedaan antara "git add -A" dan "git add."


Perintah git add [--all|-A] tampaknya identik dengan git add .. Apakah ini benar? Jika tidak, bagaimana perbedaannya?


2390
2018-02-21 06:51


asal


Jawaban:


Untuk Git versi 2.x, lihat jawaban di bawah juga.


Ringkasan:

  • git add -A tahapan Semua

  • git add . tahapan baru dan dimodifikasi, tanpa dihapus

  • git add -u tahapan dimodifikasi dan dihapus, tanpa baru


Detail:

git add -A setara dengan git add .; git add -u.

Poin penting tentang git add . adalah bahwa itu terlihat pada pohon kerja dan menambahkan semua jalur tersebut ke perubahan bertahap jika mereka berubah atau baru dan tidak diabaikan, itu tidak melakukan tindakan 'rm'.

git add -u terlihat pada semua sudah melacak file dan tahapan perubahan ke file-file tersebut jika mereka berbeda atau jika mereka telah dihapus. Itu tidak menambahkan file baru, itu hanya tahap perubahan ke file yang sudah dilacak.

git add -A adalah cara pintas praktis untuk melakukan keduanya.

Anda dapat menguji perbedaan dengan sesuatu seperti ini (perhatikan bahwa untuk Git versi 2.x keluaran Anda untuk 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

3655
2018-02-21 09:00



Berikut ini tabel untuk pemahaman cepat:

Versi Git 1.x: enter image description here

Git Version 2.x: enter image description here

Bendera bentuk panjang:

  • git add -A setara dengan git add --all
  • git add -u setara dengan git add --update

Bacaan lebih lanjut:


646
2017-09-25 12:45



Dengan Git 2.0, git add -A adalah default: git add . sama git add -A ..

git add <path> sama dengan "git add -A <path>"Sekarang, jadi itu   "git add dir/"Akan melihat jalur yang Anda hapus dari direktori dan   catat penghapusan.
  Di versi lama Git, "git add <path>"digunakan untuk mengabaikan penghapusan.

Anda bisa mengatakan "git add --ignore-removal <path>"untuk   tambahkan hanya jalur yang ditambahkan atau yang dimodifikasi di <path>, jika Anda benar-benar ingin.

git add seperti git add :/ (tambahkan semuanya dari folder git repo teratas).
Perhatikan bahwa git 2.7 (Nov. 2015) akan memungkinkan Anda menambahkan folder bernama ":"!
Lihat melakukan 29abb33 (25 Okt 2015) oleh Junio ​​C Hamano (gitster).


Perhatikan itu mulai git 2.0 (Q1 atau Q2 2014), ketika berbicara tentang git add . (jalur saat ini di dalam pohon kerja), Anda harus menggunakan '.'di sisi lain git add perintah juga.

Itu berarti:

"git add -A ."Setara dengan"git add .; git add -u ."

(Perhatikan ekstra '.'untuk git add -A dan git add -u)

Karena git add -A atau git add -u akan beroperasi (mulai git 2.0 saja) di seluruh pohon kerja, dan tidak hanya di jalan saat ini.

Perintah-perintah itu akan beroperasi di seluruh pohon di Git 2.0 untuk konsistensi dengan "git commit -a"dan perintah lainnya.   Karena tidak akan ada mekanisme untuk membuat "git add -u"berperilaku seperti"git add -u .", penting bagi mereka yang terbiasa"git add -u"(tanpa pathspec) memperbarui indeks hanya untuk jalur di subdirektori saat ini untuk mulai melatih jari-jari mereka untuk secara eksplisit mengatakan"git add -u ."ketika mereka bersungguh-sungguh sebelum Git 2.0 datang.

Peringatan dikeluarkan ketika perintah ini dijalankan tanpa pathspec dan ketika Anda memiliki perubahan lokal di luar direktori saat ini, karena perilaku dalam Git 2.0 akan berbeda   dari versi hari ini dalam situasi seperti itu.


135
2018-04-23 06:32



Jadi dari instruksi Charles di atas, setelah menguji pemahaman yang saya usulkan adalah sebagai berikut:

# 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

Tautan ini mungkin juga berguna untuk memahami situasi apa yang dapat diterapkan oleh perintah tersebut: Menghapus File yang Dihapus dari Direktori Kerja Git Anda.


126
2018-06-01 09:27



Terlambat untuk pesta tetapi pertanyaan ini juga layak mendapat jawaban cepat yang lebih suling.

git add -A 

Apakah keduanya di bawah ini (sama dengan git add --all)

git add . 

Tahapan baru + file yang dimodifikasi

git add -u 

Tahapan diubah + file yang dihapus


26
2018-04-06 12:56



Segalanya berubah dengan Git 2.0:

  • -A sekarang adalah default
  • perilaku lama sekarang tersedia dengan --ignore-removal
  • git add -u dan git add -A dalam subdirektori tanpa jalur pada baris perintah beroperasi di seluruh pohon

Jadi untuk git 2 jawabannya adalah:

  • git add . dan git add -A . menambahkan file baru / modifikasi / dihapus di direktori saat ini
  • git add --ignore-removal . menambahkan file baru / yang dimodifikasi di direktori saat ini
  • git add -u . menambahkan file yang diubah / dihapus di direktori saat ini
  • tanpa titik, tambahkan semua file dalam proyek tanpa memperhatikan direktori saat ini

23
2017-10-13 15:29



Akhirnya saya pikir saya mendapatkan ini, banyak terima kasih kepada Anda semua. Saya harap ini menambah kejelasan.

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

Batasan mungkin -u atau -A atau nol.

Pathspec mungkin file atau titik, '.' untuk menunjukkan direktori saat ini.

Pengetahuan latar belakang yang penting tentang bagaimana git 'menambahkan'.

  • File yang tidak terlihat, yang diawali dengan sebuah titik, (dotfiles) tidak pernah secara otomatis dikenali oleh Git. Mereka bahkan tidak pernah terdaftar sebagai 'tidak terlacak'.
  • Folder kosong tidak pernah ditambahkan oleh git. Mereka bahkan tidak pernah terdaftar sebagai 'tidak terlacak'. (Solusi adalah menambahkan file kosong, mungkin tidak terlihat, ke file yang dilacak.)
  • Status Git tidak akan menampilkan informasi subfolder, yaitu file yang tidak terlacak, kecuali setidaknya satu file dalam subfolder itu dilacak. Sebelum waktu tersebut, git menganggap seluruh folder di luar ruang lingkup, a la 'kosong'. Ini kosong dari barang yang dilacak.
  • Menentukan filepec = '.' (dot), atau direktori saat ini, tidak rekursif kecuali -A juga ditentukan. Dot mengacu secara ketat ke direktori saat ini - itu menghilangkan jalur yang ditemukan di atas dan di bawah.

Sekarang, mengingat pengetahuan itu, kita dapat menerapkan jawaban di atas.

Pembatasnya adalah sebagai berikut.

  • -u = --update = subset ke file yang dilacak => Tambah = Tidak; Ubah = Ya; Hapus = Ya. => iff item dilacak.
  • -A = --all (tidak ada -a, yang memberikan kesalahan sintaks) = superset dari semua file yang tidak terlacak / dilacak, kecuali dalam Git <2.0, dimana jika dot filepec diberikan, maka hanya folder tertentu yang dipertimbangkan. => iff item dikenali, git add -A akan menemukannya dan menambahkannya.

Pathspec adalah sebagai berikut.

  • Di Git <2.0, untuk dua pembatas (perbarui dan semua), default yang baru adalah untuk beroperasi di seluruh pohon kerja, bukan jalur saat ini (git <= 1.9),
  • Namun, di v2.0, operasi dapat dibatasi pada jalur saat ini: tambahkan saja sufiks dot eksplisit (yang juga berlaku di Git <= 1.9);

git add -A .

git add -u .

Sebagai kesimpulan, kebijakan saya adalah;

  • 1. Pastikan setiap file / file yang akan ditambahkan dihitung dalam status git.
  • 1A. Jika ada item yang hilang, karena file / folder yang tidak terlihat, tambahkan secara terpisah.
  • 2. Memiliki gitignore yang baik sehingga biasanya hanya file yang menarik tidak terlacak dan / atau tidak dikenal.
  • 3.Dari tingkat atas repo, "git add -A" untuk menambahkan semua item. Ini berfungsi di semua versi git.
  • 4.Hapus item yang diinginkan dari indeks jika diinginkan.
  • 6.Jika ada bug yang besar, lakukan 'git reset' untuk menghapus indeks sepenuhnya.

11
2018-04-06 02:03



git add . sama git add -A . menambahkan file hanya untuk diindeks dari folder saat ini dan anak-anak.

git add -A menambahkan file ke indeks dari semua folder di pohon yang berfungsi.

P.S .: informasi berkaitan dengan Git 2.0.


7
2018-06-03 19:12



Di Git 2.x:

  • Jika Anda berada langsung di direktori kerja, kemudian git add -A dan git add . bekerja tanpa perbedaan.

  • Jika Anda berada dalam subdirektori apa pun dari direktori kerja, git add -A akan menambahkan semua file dari keseluruhan direktori kerja, dan git add . akan menambahkan file dari Anda direktori saat ini.

Dan itu saja.


2
2018-03-16 22:32