Menambahkan Hanya File yang Tidak Dilacak

168

Salah satu perintah yang saya temukan sangat berguna di Git adalah git add -u membuang semuanya kecuali file yang tidak terlacak ke dalam indeks. Apakah ada kebalikan dari itu? Dalam beberapa bulan terakhir, saya sering menemukan diri saya dalam posisi di mana saya telah secara interaktif menambahkan beberapa pembaruan ke indeks dan saya ingin menambahkan semua file yang tidak terlacak ke indeks itu sebelum saya komit.

Apakah ada cara untuk menambahkan hanya file yang tidak terlacak ke indeks tanpa mengidentifikasi secara individual? Saya tidak melihat sesuatu yang jelas dalam dokumen bantuan, tapi mungkin saya melewatkannya?

Terima kasih.

Rob Wilkerson
sumber
1
Mengenai "membuang semuanya kecuali file yang tidak terlacak ke dalam indeks", .gitignoresecara khusus direkayasa untuk tujuan itu, bukan git add -u.
Pacerier
Selain itu, apakah Anda meminta untuk menambahkan file yang tidak dilacak sambil menghapus semua file yang saat ini dilacak, atau Anda meminta untuk menambahkan file yang tidak terlacak di atas file yang saat ini dilacak (membuat semuanya dilacak)?
Pacerier

Jawaban:

236

Mudah dengan git add -i. Ketik a(untuk "tambahkan tak terlacak"), lalu *(untuk "semua"), laluq (untuk keluar) dan Anda selesai.

Untuk melakukannya dengan satu perintah: echo -e "a\n*\nq\n"|git add -i

Tikar
sumber
4
Saya berharap ada sesuatu yang kurang, baik, interaktif, tetapi tentu saja lebih baik daripada file demi file. :-)
Rob Wilkerson
34
echo -e "a\n*\nq\n"|git add -i
Mat
@Mat terima kasih perintah lengkapnya ----> git add -ia * q ??
BKSpurgeon
Argument list too long... sangat dekat!
Simeon
1
Bagi saya dengan git 2.21.0 git add -ikemudian 4ditambahkan tidak terlacak maka *semua qakan berhenti
Harry B
36

git ls-files -o --exclude-standard memberikan file yang tidak dilacak, sehingga Anda dapat melakukan sesuatu seperti di bawah ini (atau menambahkan alias ke dalamnya):

git add $(git ls-files -o --exclude-standard)
manojlds
sumber
1
alias gau = "git ls-files -o --exclude-standard | xargs -i git add '{}'" berfungsi untuk saya
Stephan
git ls-files --help adalah bacaan yang sangat berguna: -o, --others Show other (i.e. untracked) files in the output
Joshua Kunzmann
15

Tidak persis apa yang Anda cari, tetapi saya telah menemukan ini cukup membantu:

git add -AN

Akan menambahkan semua file ke indeks, tetapi tanpa konten mereka. File yang tidak terlacak sekarang berperilaku seolah-olah mereka dilacak. Konten mereka akan ditampilkan di git diff, dan Anda dapat menambahkannya secara interaktif git add -p.

Hasen
sumber
Ini persis apa yang saya cari - memungkinkan untuk git commit -pberjalan melalui file baru juga.
nitsujri
11

Anda dapat menambahkan ini ke file ~ / .gitconfig Anda:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

Kemudian, dari commandline, jalankan:

git add-untracked
joshuadavey
sumber
Saya suka pendekatan ini, tetapi tidak menangani spasi dalam nama file.
Paul Coccoli
9

Orang-orang telah menyarankan untuk mengirim output git ls-fileske git addtetapi ini akan gagal dalam kasus di mana ada nama file yang mengandung spasi putih atau karakter glob seperti *.

Cara aman adalah menggunakan:

git ls-files -o --exclude-standard -z | xargs -0 git add

di mana -zmemberitahu git untuk menggunakan \0terminator baris dan -0memberi tahu xargs sama. Satu-satunya kelemahan dari pendekatan ini adalah -0opsi tersebut tidak standar, jadi hanya beberapa versi yang xargsmendukungnya.

Tom Fenech
sumber
6

git ls-filesdaftar file dalam direktori saat ini. Jika Anda ingin membuat daftar file yang tidak dilacak dari mana saja di pohon, ini mungkin bekerja lebih baik:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

Untuk menambahkan semua file yang tidak dilacak di pohon:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add
pborenstein
sumber
6

Saya mencoba ini dan berhasil:

git stash && git add . && git stash pop

git stashhanya akan menempatkan semua file terlacak yang dimodifikasi ke dalam tumpukan terpisah, kemudian file yang tersisa adalah file yang tidak terlacak. Kemudian dengan melakukan git add .akan mem-stage semua file file yang tidak dilacak, sesuai kebutuhan. Akhirnya, untuk mendapatkan kembali semua file yang dimodifikasi dari tumpukan dengan melakukangit stash pop

Rohan Khude
sumber
0

Jika Anda memiliki ribuan file yang tidak dilacak (ugh, jangan tanya) maka git add -itidak akan berfungsi saat menambahkan *. Anda akan mendapatkan pesan kesalahan Argument list too long.

Jika kemudian Anda juga menggunakan Windows (jangan tanya # 2 :-) dan perlu menggunakan PowerShell untuk menambahkan semua file yang tidak dilacak, Anda dapat menggunakan perintah ini:

git ls-files -o --exclude-standard | select | foreach { git add $_ }
Simeon
sumber
Versi yang lebih kental:git ls-files -o --exclude-standard | % { git add $_ }
marckassay
0

Banyak tips bagus di sini, tetapi di dalam Powershell saya tidak bisa membuatnya bekerja.

Saya adalah pengembang .NET dan kami masih menggunakan OS Windows karena kami belum banyak menggunakan .Net inti dan lintas platform, sehingga penggunaan sehari-hari saya dengan Git ada di lingkungan Windows, di mana shell yang digunakan lebih sering Powershell dan bukan Git bash.

Prosedur berikut dapat diikuti untuk membuat fungsi alias untuk menambahkan file yang tidak dilacak dalam repositori Git.

Di dalam file $ profile Anda dari Powershell (jika tidak ada - Anda dapat menjalankan: New-Item $ Profile)

notepad $ Profile

Sekarang tambahkan metode Powershell ini:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

Simpan $ profil file dan muat kembali ke Powershell. Kemudian muat ulang file $ profile Anda dengan:. $ profil

Ini mirip dengan perintah sumber di lingkungan * nix IMHO.

Jadi lain kali Anda, jika Anda adalah pengembang yang menggunakan Powershell di Windows terhadap Git repo dan ingin hanya memasukkan file yang tidak dapat dilacak Anda dapat menjalankan:

AddUntracked-Git

Ini mengikuti konvensi Powershell di mana Anda memiliki kata benda-kata benda.

Tore Aurstad
sumber
0

git add. (tambahkan semua file dalam direktori ini)

git add -all (tambahkan semua file di semua direktori)

git add -N dapat membantu untuk membuat daftar yang mana untuk nanti ....

atreyHazelHispanic
sumber
git add -uakan menambahkan file yang dimodifikasi tidak
dilacak
-3

Untuk menambahkan semua file, perintah git tidak dapat dilacak adalah

git add -A

Juga jika Anda ingin mendapatkan rincian lebih lanjut tentang berbagai opsi yang tersedia, Anda bisa mengetik perintah

git add -i

alih-alih perintah pertama, dengan ini Anda akan mendapatkan lebih banyak opsi termasuk opsi untuk menambahkan semua file yang tidak terlacak seperti yang ditunjukkan di bawah ini:

$ git add -i peringatan: LF akan digantikan oleh CRLF di README.txt. File tersebut akan memiliki akhir baris aslinya di direktori kerja Anda. peringatan: LF akan digantikan oleh CRLF di package.json.

* Perintah * 1: status 2: pembaruan 3: kembalikan 4: tambahkan tidak terlacak 5: patch 6: beda 7: berhenti 8: bantuan Apa sekarang> a

L. Sidhu
sumber