cari

Rumah  >  Soal Jawab  >  teks badan

git忽略已经被提交的文件

现在项目的根目录放了 .gitignore 文件,并且git远程仓库的项目根目录已经有了 logs文件夹。

由于每次本地运行项目,都会生成新的log文件,但是我并不想提交logs文件夹里面的内容,所以要在.gitignore写logs的规则。

我尝试过添加以下规则
logs/*.log
logs/
/logs/

但是运行git status的时候,始终能看到modified:logs/xx.log 。

请问是我的规则编写错误,还是我某个地方有理解错误?

高洛峰高洛峰2844 hari yang lalu733

membalas semua(5)saya akan balas

  • 阿神

    阿神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: <🎜. >

    1. Semua ahli pasukan mesti melaksanakan pada fail sasaran:

      . 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)

    2. Sebaik sahaja seseorang menukar fail sasaran dan terus

      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.

    Mengapa ini berlaku? Jawapannya terletak pada

    halaman manusia Git:

    Pertama sekali, takrifan

    git 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 mesti

    secara 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 sebenar

    git update-index --assume-unchanged ialah ini:

    1. Anda sedang mengubah suai fail yang besar, anda harus git update-index --assume-unchanged dahulu, supaya Git akan mengabaikan pengubahsuaian anda pada fail itu buat sementara waktu;
    2. Apabila kerja anda selesai dan sedia untuk diserahkan, tetapkan semula bendera perubahan:
    3. , jadi Git hanya perlu mengemas kini sekali sahaja, yang boleh diterima sepenuhnya; git update-index --no-assume-unchangedSerah + tolak.
    4. Juga, mengikut penerangan lanjut dalam dokumentasi:

    Pilihan ini juga boleh digunakan sebagai mekanisme peringkat fail
    kasar

    untuk 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);
      Perkara yang sama harus dicapai menggunakan
    1. fail (untuk fail yang tidak dijejaki).
    2. .gitignorePersoalan yang timbul ialah:
    3. Mengapa saya menambah peraturan dalam
    .gitignore

    tetapi ia tidak memberi kesan? Ini kerana kami salah faham tujuan fail .gitignore

    , yang hanya boleh digunakan pada

    Fail 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 .gitignoreAlih keluar penjejakan fail daripada pangkalan data Git;

    Tulis peraturan yang sepadan ke dalam
      .gitignore
    1. untuk membuat pengabaian berkuat kuasa;
    2. Serah + tolak.
    3. Hanya dengan melakukan ini, semua ahli pasukan akan konsisten tanpa kesan sampingan, dan hanya dengan melakukan ini, ahli pasukan lain tidak perlu melakukan kerja tambahan sama sekali untuk mengekalkan ketidaktahuan perubahan pada fail.
    4. Satu perkara terakhir yang perlu diambil perhatian,
    5. memadamkan status penjejakan, bukan fail fizikal; jika anda benar-benar tidak mahukannya, anda juga boleh terus
    +abaikan+serahkan.

    balas
    0
  • 伊谢尔伦

    伊谢尔伦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

    balas
    0
  • 我想大声告诉你

    我想大声告诉你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.

    balas
    0
  • 仅有的幸福

    仅有的幸福2017-04-24 16:02:46

    Padamkan fail log, tambah ingore dan komit semula

    balas
    0
  • 过去多啦不再A梦

    过去多啦不再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

    balas
    0
  • Batalbalas