Rumah > Soal Jawab > teks badan
现在项目的根目录放了 .gitignore 文件,并且git远程仓库的项目根目录已经有了 logs文件夹。
由于每次本地运行项目,都会生成新的log文件,但是我并不想提交logs文件夹里面的内容,所以要在.gitignore写logs的规则。
我尝试过添加以下规则
logs/*.log
logs/
/logs/
但是运行git status的时候,始终能看到modified:logs/xx.log 。
请问是我的规则编写错误,还是我某个地方有理解错误?
阿神2017-04-24 16:02:46
tl;dr: Pendekatan yang betul hendaklah: git rm --cached logs/xx.log
, kemudian kemas kini .gitignore
mengabaikan fail sasaran, dan akhirnya git commit -m "We really don't want Git to track this anymore!"
Sebab khusus adalah seperti berikut:
Walaupun jawapan yang diterima boleh mencapai tujuan (sementara), ia bukanlah pendekatan yang paling betul untuk salah faham makna git update-index
, dan akibat yang paling langsung (tidak diingini) daripada berbuat demikian adalah seperti berikut: <🎜. >
. Ini kerana walaupun anda membiarkan Git berpura-pura tidak melihat perubahan pada fail sasaran, fail itu sendiri masih dalam sejarah Git, jadi semua orang dalam pasukan akan menarik perubahan pada fail sasaran apabila git update-index --assume-unchanged <PATH>
fetch dilaksanakan . (Tetapi sebenarnya, fail sasaran tidak mahu direkodkan oleh Git sama sekali, daripada berpura-pura tidak melihatnya berubah)
tekangit update-index --assume-unchanged <PATH>
tanpa , maka semua ahli yang telah menarik kod terkini mesti melaksanakan semula kemas kini-index , jika tidak Git akan mula merekodkan perubahan pada fail sasaran sekali lagi. Ini sebenarnya sangat biasa. Contohnya, jika ahli menukar mesin atau cakera keras dan klon pangkalan kod baharu, memandangkan fail sasaran masih dalam sejarah Git, dia mungkin Terlupa indeks kemas kini.
halaman manusia Git:
Pertama sekali, takrifangit update-index ialah:
Daftar kandungan fail dalam pepohon kerja ke indeks (Daftar kandungan fail dalam ruang kerja ke kawasan indeks)Maksud tersirat ayat ini ialah:
indeks kemas kini menyasarkan fail yang direkodkan dalam pangkalan data Git, bukan fail yang perlu diabaikan.
Kemudian lihat beberapa huraian berkaitan tentang--anggap-tidak berubah:
Apabila bit "anggap tidak berubah" dihidupkan, Git berhenti menyemak fail pepohon yang berfungsi untuk kemungkinan pengubahsuaian, jadi anda perlu menyahset bit secara manual untuk memberitahu Git apabila anda menukar fail pepohon yang berfungsi projek besar pada sistem fail yang mempunyai panggilan sistem lstat(2) yang sangat perlahan (cth. cifs).kira-kira bermaksud:
Selepas menggunakan bendera ini, Git berhenti melihat kemungkinan perubahan pada fail ruang kerja, jadi anda mestisecara manual menetapkan semula bendera supaya Git tahu anda mahu menyambung semula penjejakan perubahan fail. Ini boleh berguna apabila anda menjalankan projek besar apabila panggilan sistem sistem fail sangat lambat.
lstat
Kami tahu bahawa Git bukan sahaja digunakan untuk pengurusan versi kod, tetapi banyak projek dalam bidang lain juga menggunakan Git. Sebagai contoh, salah satu projek pelanggan syarikat kami melibatkan pengurusan versi dokumen lukisan bahagian ketepatan, dan mereka juga menggunakan Git. Satu senario penggunaan adalah untuk mengubah suai beberapa fail besar, tetapi setiap kali Git menyimpannya, ia mesti mengira perubahan dalam fail dan mengemas kini ruang kerja Kelewatan ini sangat jelas apabila cakera keras perlahan.
Penggunaan sebenargit update-index --assume-unchanged
ialah ini:
git update-index --assume-unchanged
dahulu, supaya Git akan mengabaikan pengubahsuaian anda pada fail itu buat sementara waktu;
git update-index --no-assume-unchanged
Serah + tolak. Pilihan ini juga boleh digunakan sebagai mekanisme peringkat fail
kasaruntuk mengabaikan perubahan tidak komited dalam fail yang dijejaki (sama seperti apa yang .gitignore lakukan untuk fail tidak dijejaki).
Penerangan ini memberitahu kita dua fakta:
Walaupun ia boleh digunakan untuk mencapai hasil yang dikehendaki oleh poster, ia bukanlah pendekatan yang halus (kasar);
.gitignore
Persoalan yang timbul ialah: tetapi ia tidak memberi kesan? Ini kerana kami salah faham tujuan fail .gitignore
, yang hanya boleh digunakan padaFail Tidak Dijejaki, iaitu fail yang tidak pernah telah direkodkan oleh fail Git (fail yang tidak pernah ditambah atau dilakukan sejak ia ditambah). Sebab peraturan anda tidak berkuat kuasa adalah kerana fail tersebut telah direkodkan oleh Git, jadi
adalah tidak sah sama sekali untuknya. Inilah yang dilakukan oleh jawapan ringkas pada permulaan:
.log
.gitignore
Alih keluar penjejakan fail daripada pangkalan data Git;
伊谢尔伦2017-04-24 16:02:46
Untuk fail yang telah diselenggara, malah menambah gitignore tidak akan membantu.
Gunakan arahan berikut: git update-index --assume-unchanged logs/*.log
Dengan cara ini, fail di bawah log tidak akan muncul setiap kali anda menyerahkan
我想大声告诉你2017-04-24 16:02:46
Beri saya jawapan terperinci
.gitignore hanya boleh mengabaikan fail yang tidak dijejaki pada asalnya Jika sesetengah fail telah disertakan dalam pengurusan versi, mengubah suai .gitignore adalah tidak sah.
Pendekatan yang betul adalah dengan menetapkan secara manual dalam setiap gudang yang diklon bukan untuk menyemak perubahan pada fail tertentu.
git update-index --assume-unchanged PATH 在PATH处输入要忽略的文件。
Selain itu, git juga menyediakan satu lagi kaedah exclude untuk melakukan perkara yang sama Perbezaannya ialah fail .gitignore itu sendiri akan diserahkan kepada repositori. Digunakan untuk menyimpan fail awam yang perlu dikecualikan. Dan .git/info/exclude menetapkan di sini fail yang anda perlu kecualikan secara setempat. Dia tidak akan menjejaskan orang lain. Ia tidak akan diserahkan kepada repositori.
.gitignore juga mempunyai fungsi kecil yang menarik Fail .gitignore kosong boleh digunakan sebagai ruang letak. Ini menjadi berguna apabila anda perlu mencipta direktori log kosong untuk projek anda. Anda boleh mencipta direktori log dan meletakkan fail .gitignore kosong di dalamnya. Dengan cara ini, apabila anda mengklon repo ini, git akan membuat direktori log kosong secara automatik.
过去多啦不再A梦2017-04-24 16:02:46
Saya mendapati bahawa jawapan dengan bilangan undian tertinggi (n͛i͛g͛h͛t͛i͛r͛e͛) tidak memahami soalan itu sama sekali
Sebaliknya, jawapan @FatGhosta ialah jawapan yang betul
Jika anda mengikuti kaedah n ͛i ͛ g ͛ h ͛ t ͛i ͛ r ͛e ͛ , ia hanya akan mencapai
"Padam fail yang tidak perlu direkodkan daripada git sambil mengekalkan fail secara setempat dan abaikan ia pada masa hadapan commit"
bukannya mencapai
"Abaikan fail yang sudah wujud dalam git apabila melakukan"
Sebenarnya, adegan sepatutnya seperti ini, terdapat fail konfigurasi, seperti maklumat pautan pangkalan data
Maklumat pautan setiap orang pastinya tidak sama, tetapi templat standard mesti disediakan untuk memberitahu cara untuk melakukannya. isi maklumat pautan
Kemudian Terdapat situasi di mana anda perlu merekodkan fail konfigurasi standard pada git dan kemudian semua orang mengkonfigurasi salinan maklumat pautan untuk kegunaan mereka sendiri mengikut keadaan khusus mereka sendiri, tetapi tidak menyerahkan fail konfigurasi ke perpustakaan
Oleh itu, jawapan FatGhosta adalah jawapan yang betul untuk soalan ini