Terkejut dengan begitu banyak jawaban yang salah. -u nosalah. -unobenar. -u nomencoba melakukan status pada file bernama no! The noadalah tidak argumen untuk -u. Untuk memaksa noditafsirkan sebagai argumen -u, tidak boleh ada ruang. Untuk menguji ini, lakukan touch Invaliddan membandingkan git status -uInvalidke git status -u Invalid.
Aaron McDaid
Jawaban:
251
Seperti yang sudah dikatakan, untuk mengecualikan dari status gunakan saja:
git status -uno # must be "-uno" , not "-u no"
Jika Anda ingin mengabaikan file yang saat ini tidak terlacak secara permanen, dari root proyek Anda, luncurkan:
Setiap panggilan selanjutnya ke git statussecara eksplisit akan mengabaikan file-file itu.
UPDATE : perintah di atas memiliki sedikit kelemahan: jika Anda tidak memiliki .gitignorefile, gitignore Anda akan mengabaikannya sendiri! Ini terjadi karena file .gitignoredibuat sebelum git status --porcelaindijalankan. Jadi, jika Anda belum memiliki .gitignorefile, saya sarankan menggunakan:
Hal ini menciptakan subkulit yang melengkapi sebelum itu .gitignorefile yang dibuat.
PERINTAH MENJELASKAN karena saya mendapatkan banyak suara (terima kasih!) Saya pikir saya akan lebih baik menjelaskan sedikit perintah:
git status --porcelaindigunakan bukan git status --shortkarena menyatakan secara manual "Berikan output dalam format skrip yang mudah diurai. Ini mirip dengan keluaran pendek, tetapi akan tetap stabil di versi git dan terlepas dari konfigurasi pengguna." Jadi kita memiliki parseabilitas dan stabilitas;
grep '^??'memfilter hanya baris yang dimulai dengan ??, yang, menurut manual status git , sesuai dengan file yang tidak dilacak;
cut -c4- menghapus 3 karakter pertama dari setiap baris, yang memberi kita hanya jalur relatif ke file yang tidak dilacak;
itu | simbol pipa , yang lulus output dari perintah sebelumnya ke input dari perintah berikut;
yang >>dan >simbol operator redirect , yang menambahkan output dari perintah sebelumnya ke file atau menimpa / membuat file baru, masing-masing.
VARIAN LAIN bagi mereka yang lebih suka menggunakansed daripada grepdan cut, inilah cara lain:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore
cut -c4- menghapus 4 karakter pertama dari setiap baris, yang memberi kita hanya jalur relatif ke file yang tidak dilacak; No. -cmenandai awal daftar nomor kolom yang akan dipotong. Dan 4-memilih garis dari kolom 4 sampai akhir, yang memotong kolom 1-3. Jadi perintah cut Anda sebenarnya menghapus 3 karakter pertama dari setiap baris. Jika Anda menghapus 4 karakter dari baris status git seperti yang untuk file ini di sini:, ?? app/views/static_pages/contact.html.erbAnda akan menghapus huruf pertama dari app. Jadi perintahnya benar, tetapi penjelasannya salah.
7stud
@ 7stud: terima kasih, Anda benar, saya telah menulis 4 karena kesalahan. Saya sudah memperbaiki jawabannya.
Diego
2
Saya sangat menghargai penjelasan perintah. Sangat menyenangkan untuk mengetahui apa yang dilakukan perintah acak yang saya salin dari internet, dan membantu kita semua belajar bagaimana menggunakan baris perintah dan git lebih baik.
Eric Fitting
1
-u notidak bekerja untuk saya. Namun -unodemikian. Saya telah memperbarui jawabannya. Ini desain aneh untuk git. Saya pada git 1.7.1
Aaron McDaid
2
@AaronMcDaid: terima kasih. Perubahannya didokumentasikan di sini , dan dibahas di sini
Diego
51
Jika Anda ingin mengabaikan file-file ini secara permanen, cara sederhana untuk menambahkannya .gitignoreadalah:
Mengapa ini tidak mendapatkan banyak suara? Tidak perlu menyalurkan melalui 2 program lain!
JoelFan
4
@ JoelFan: dua alasan: 1) yang ini hanya berfungsi dari root git , sedangkan yang diterima bekerja dari setiap subdirektori, Anda hanya perlu mengubah .gitignorejalur tujuan 2) jika Anda memiliki direktori yang tidak dilacak, yang satu ini daftar masing-masing dan setiap file di dalamnya, tetapi bukan direktori yang tidak dilacak itu sendiri (sehingga Anda tidak akan mengabaikan direktori tersebut, dan dengan demikian masih bisa dilaporkan file-file yang akan datang dalam direktori tersebut sebagai tidak terlacak, sedangkan yang diterima hanya mencantumkan direktori, dan bukan file yang tidak terlacak di dalamnya. Ini adalah masalah apa yang ingin Anda lakukan, tetapi sering kali Anda hanya ingin mengabaikan keseluruhan dir
Diego
1
Terima kasih Poolie Saya menghargai perbedaan dari saran Anda karena poin yang disebutkan oleh @Diego saya mulai bekerja dengan perpustakaan file & folder dan saya tidak ingin melacak / mendorong file asli. Saya hanya ingin melacak file yang saya tambahkan atau buat kembali di perpustakaan. Menambahkan folder induk akan mengabaikan segalanya. Solusi ini / Anda menambahkan semua 1696 file dalam sekejap. xD
Chaos7703
Ini juga dapat dicapai dengan menggunakan git config status.showUntrackedFiles no.
Parameter mode digunakan untuk menentukan penanganan file yang tidak dilacak. Ini opsional: default untuk semua, dan jika ditentukan, ia harus macet ke opsi (misalnya -uno, tetapi tidak -u no).
Nah, jika semua orang akan RTFM sebelum memposting, tidak ada dari kita yang akan mendapatkan rep :-)
Jenny D
4
Dua arah:
gunakan argumen "-uno" untuk git-status. Ini sebuah contoh:
[jenny@jenny_vmware:ft]$ git status
# On branch ft
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)
[jenny@jenny_vmware:ft]$ git status -uno
# On branch ft
nothing to commit (working directory clean)
Atau Anda dapat menambahkan file dan mengarahkan ke .gitignore, dalam hal ini mereka tidak akan pernah muncul.
Cara praktis mengedit .gitignoremakhluk git status | cat >> temp && vim temp. Kemudian mengedit file sehingga beberapa baris pertama dan baris terakhir dihapus, serta trailing #dan spasi setelahnya. Lalu cat temp >> .gitignore && rm temp. Jika tidak .gitignoreada sebelumnya, mv temp .gitignoreakan dilakukan. Hal-hal buruk tetapi lebih baik daripada memperbarui .gitignoresecara manual.
sjas
1
Jawaban ini salah. Jawaban yang benar adalah -uno. Jika Anda menggunakan -u no, itu setara dengan no -u- itu akan melakukan status pada file yang disebut no(yang mungkin tidak ada) dan menggunakan -umode default . yaitu setara dengangit status no
Aaron McDaid
3
-u nojuga tidak menampilkan file yang tidak dipentaskan. -unobekerja seperti yang diinginkan dan menunjukkan tanpa panggung, tetapi bersembunyi tidak terlacak.
Bahkan ini tidak sepenuhnya benar. git status -u Xsetara dengan git status X -u( Xbukan argumen untuk -u). Ini, pada gilirannya, setara dengan git status X(karena -utanpa argumen adalah default -u). Oleh karena itu, ini hanyalah status git pada file X. Jadi, jika Xini noitu hanya mencoba untuk melakukan git status pada sebuah file yang disebut no, yang Anda mungkin tidak memiliki
Aaron McDaid
2
Jika Anda tidak menggunakan Unix seperti OS, ini akan berfungsi pada Windows menggunakan PowerShell
Jika Anda memiliki banyak file yang tidak dilacak, dan " gitignore" tidak ingin semuanya, perhatikan bahwa, sejak git 1.8.3 (April, 22d 2013) , git statusakan menyebutkan --untracked-files=nobahkan jika Anda tidak menambahkan opsi itu di tempat pertama!
" git status" menyarankan pengguna untuk melihat ke --untracked=noopsi penggunaan saat terlalu lama.
Saya datang ke sini mencoba memecahkan masalah yang sedikit berbeda. Mungkin ini akan bermanfaat bagi orang lain:
Saya membuat cabang baru feature-a. sebagai bagian dari cabang ini saya membuat direktori baru dan perlu memodifikasi .gitignore untuk menekan beberapa di antaranya. Ini sering terjadi ketika menambahkan alat baru ke proyek yang membuat berbagai folder cache. .serverless,, .terraformdll.
Sebelum saya siap untuk menggabungkan itu kembali ke master saya punya sesuatu yang lain muncul, jadi saya checkout master lagi, tapi sekaranggit status mengambil folder yang ditekan itu lagi, karena .gitignore belum digabungkan.
Jawabannya di sini sebenarnya sederhana, walaupun saya harus menemukan blog ini untuk mengetahuinya:
Cukup checkout file .gitignore dari feature-acabang
*
akan sangat mungkin bukan yang Anda inginkan.-u no
salah.-uno
benar.-u no
mencoba melakukan status pada file bernamano
! Theno
adalah tidak argumen untuk-u
. Untuk memaksano
ditafsirkan sebagai argumen-u
, tidak boleh ada ruang. Untuk menguji ini, lakukantouch Invalid
dan membandingkangit status -uInvalid
kegit status -u Invalid
.Jawaban:
Seperti yang sudah dikatakan, untuk mengecualikan dari status gunakan saja:
Jika Anda ingin mengabaikan file yang saat ini tidak terlacak secara permanen, dari root proyek Anda, luncurkan:
Setiap panggilan selanjutnya ke
git status
secara eksplisit akan mengabaikan file-file itu.UPDATE : perintah di atas memiliki sedikit kelemahan: jika Anda tidak memiliki
.gitignore
file, gitignore Anda akan mengabaikannya sendiri! Ini terjadi karena file.gitignore
dibuat sebelumgit status --porcelain
dijalankan. Jadi, jika Anda belum memiliki.gitignore
file, saya sarankan menggunakan:Hal ini menciptakan subkulit yang melengkapi sebelum itu
.gitignore
file yang dibuat.PERINTAH MENJELASKAN karena saya mendapatkan banyak suara (terima kasih!) Saya pikir saya akan lebih baik menjelaskan sedikit perintah:
git status --porcelain
digunakan bukangit status --short
karena menyatakan secara manual "Berikan output dalam format skrip yang mudah diurai. Ini mirip dengan keluaran pendek, tetapi akan tetap stabil di versi git dan terlepas dari konfigurasi pengguna." Jadi kita memiliki parseabilitas dan stabilitas;grep '^??'
memfilter hanya baris yang dimulai dengan??
, yang, menurut manual status git , sesuai dengan file yang tidak dilacak;cut -c4-
menghapus 3 karakter pertama dari setiap baris, yang memberi kita hanya jalur relatif ke file yang tidak dilacak;|
simbol pipa , yang lulus output dari perintah sebelumnya ke input dari perintah berikut;>>
dan>
simbol operator redirect , yang menambahkan output dari perintah sebelumnya ke file atau menimpa / membuat file baru, masing-masing.VARIAN LAIN bagi mereka yang lebih suka menggunakan
sed
daripadagrep
dancut
, inilah cara lain:sumber
cut -c4-
menghapus 4 karakter pertama dari setiap baris, yang memberi kita hanya jalur relatif ke file yang tidak dilacak; No.-c
menandai awal daftar nomor kolom yang akan dipotong. Dan4-
memilih garis dari kolom 4 sampai akhir, yang memotong kolom 1-3. Jadi perintah cut Anda sebenarnya menghapus 3 karakter pertama dari setiap baris. Jika Anda menghapus 4 karakter dari baris status git seperti yang untuk file ini di sini:,?? app/views/static_pages/contact.html.erb
Anda akan menghapus huruf pertama dariapp
. Jadi perintahnya benar, tetapi penjelasannya salah.-u no
tidak bekerja untuk saya. Namun-uno
demikian. Saya telah memperbarui jawabannya. Ini desain aneh untuk git. Saya pada git 1.7.1Jika Anda ingin mengabaikan file-file ini secara permanen, cara sederhana untuk menambahkannya
.gitignore
adalah:git ls-files --others --exclude-standard >> .gitignore
Ini akan menghitung semua file di dalam direktori yang tidak dilacak, yang mungkin atau mungkin tidak seperti yang Anda inginkan.
sumber
.gitignore
jalur tujuan 2) jika Anda memiliki direktori yang tidak dilacak, yang satu ini daftar masing-masing dan setiap file di dalamnya, tetapi bukan direktori yang tidak dilacak itu sendiri (sehingga Anda tidak akan mengabaikan direktori tersebut, dan dengan demikian masih bisa dilaporkan file-file yang akan datang dalam direktori tersebut sebagai tidak terlacak, sedangkan yang diterima hanya mencantumkan direktori, dan bukan file yang tidak terlacak di dalamnya. Ini adalah masalah apa yang ingin Anda lakukan, tetapi sering kali Anda hanya ingin mengabaikan keseluruhan dirgit config status.showUntrackedFiles no
.Ditemukan di manual
git status -uno
sumber
Dua arah:
gunakan argumen "-uno" untuk git-status. Ini sebuah contoh:
Atau Anda dapat menambahkan file dan mengarahkan ke .gitignore, dalam hal ini mereka tidak akan pernah muncul.
sumber
.gitignore
makhlukgit status | cat >> temp && vim temp
. Kemudian mengedit file sehingga beberapa baris pertama dan baris terakhir dihapus, serta trailing#
dan spasi setelahnya. Lalucat temp >> .gitignore && rm temp
. Jika tidak.gitignore
ada sebelumnya,mv temp .gitignore
akan dilakukan. Hal-hal buruk tetapi lebih baik daripada memperbarui.gitignore
secara manual.-uno
. Jika Anda menggunakan-u no
, itu setara denganno -u
- itu akan melakukan status pada file yang disebutno
(yang mungkin tidak ada) dan menggunakan-u
mode default . yaitu setara dengangit status no
-u no
juga tidak menampilkan file yang tidak dipentaskan.-uno
bekerja seperti yang diinginkan dan menunjukkan tanpa panggung, tetapi bersembunyi tidak terlacak.sumber
git status -u X
setara dengangit status X -u
(X
bukan argumen untuk-u
). Ini, pada gilirannya, setara dengangit status X
(karena-u
tanpa argumen adalah default-u
). Oleh karena itu, ini hanyalah status git pada fileX
. Jadi, jikaX
inino
itu hanya mencoba untuk melakukan git status pada sebuah file yang disebutno
, yang Anda mungkin tidak memilikiJika Anda tidak menggunakan Unix seperti OS, ini akan berfungsi pada Windows menggunakan PowerShell
git status --porcelain | ?{ $_ -match "^\?\? " }| %{$_ -replace "^\?\? ",""} | Add-Content .\.gitignore
Namun,
.gitignore
file harus memiliki baris kosong baru, jika tidak akan menambahkan teks ke baris terakhir tidak peduli apakah itu memiliki konten.Ini mungkin alternatif yang lebih baik:
$gi=gc .\.gitignore;$res=git status --porcelain|?{ $_ -match "^\?\? " }|%{ $_ -replace "^\?\? ", "" }; $res=$gi+$res; $res | Out-File .\.gitignore
sumber
Jika Anda memiliki banyak file yang tidak dilacak, dan "
gitignore
" tidak ingin semuanya, perhatikan bahwa, sejak git 1.8.3 (April, 22d 2013) ,git status
akan menyebutkan--untracked-files=no
bahkan jika Anda tidak menambahkan opsi itu di tempat pertama!sumber
Saya datang ke sini mencoba memecahkan masalah yang sedikit berbeda. Mungkin ini akan bermanfaat bagi orang lain:
Saya membuat cabang baru
feature-a
. sebagai bagian dari cabang ini saya membuat direktori baru dan perlu memodifikasi .gitignore untuk menekan beberapa di antaranya. Ini sering terjadi ketika menambahkan alat baru ke proyek yang membuat berbagai folder cache..serverless
,,.terraform
dll.Sebelum saya siap untuk menggabungkan itu kembali ke master saya punya sesuatu yang lain muncul, jadi saya checkout
master
lagi, tapi sekaranggit status
mengambil folder yang ditekan itu lagi, karena .gitignore belum digabungkan.Jawabannya di sini sebenarnya sederhana, walaupun saya harus menemukan blog ini untuk mengetahuinya:
Cukup checkout file .gitignore dari
feature-a
cabangsumber