Bagaimana saya bisa mengabaikan semuanya di bawah folder di Mercurial

149

Saya mencari ekspresi untuk file .hgignore, untuk mengabaikan semua file di bawah folder yang ditentukan.

misalnya: Saya ingin mengabaikan semua file dan folder di bawah nampan

Sebenarnya setiap saran tentang bagaimana ekspresi terbentuk akan bagus

Xian
sumber

Jawaban:

173

Bergantian:

syntax: glob
bin/**
Ry4an Brase
sumber
ini jauh lebih mudah saya pikir :)
Xian
PhiLho, saya pikir itu juga akan menyaring file bernama bin
Peter Gibson
1
Jawaban ini, ditambah dokumentasi ini membantu saya: selenic.com/mercurial/hgignore.5.html
CenterOrbit
7
bin bin/ bin/* bin/**- Semua melakukan hal yang sama dengan glob yaitu mengabaikan semua direktori & sub-direktori bernama bin tetapi tidak ada nama file bin.txt atau bin1. Apa gunanya asterix?
pengguna
Saya suka itu sebagai kejelasan, tetapi tentu saja menggunakan 'bin' jika Anda telah menginternalisasi aturan glob (saya resemacam pria)
Ry4an Brase
53

Saya melakukan beberapa percobaan dan saya menemukan bahwa sintaks regex pada Windows berlaku untuk path yang dimulai dengan repositori saat ini, dengan backslash ditransformasikan menjadi garis miring.

Jadi jika repositori Anda ada di E: \ Dev misalnya, hg statusakan menerapkan pola terhadap foo / bar / file1.c dan semacamnya. Jangkar berlaku untuk jalur ini.

Begitu:

  • Glob berlaku untuk elemen path dan di-root ke bagian elemen
  • foo cocok dengan semua folder (atau file) bernama foo (bukan untuk "foobar" atau "barfoo")
  • * foo * cocok dengan folder atau file apa pun dengan "foo" di namanya
  • foo / bar * cocok dengan semua file di folder "foo" dimulai dengan "bar"


  • Regex peka terhadap huruf besar-kecil, bukan berlabuh
  • Tentu saja, backslash regex suka karakter khusus. (dot)
  • / match \ path separator pada Windows. \ tidak cocok dengan pemisah ini ...
  • foo cocok dengan semua file dan folder dengan "foo" di dalamnya
  • foo / cocokkan hanya folder yang diakhiri dengan "foo"
  • / foo / cocok dengan folder "foo" di suatu tempat di jalan
  • / foo / bar / cocok dengan folder "bar" di folder "foo" di suatu tempat di jalan
  • ^ foo cocok dengan file atau folder yang dimulai oleh foo di root repositori
  • foo $ cocokkan file yang diakhiri dengan foo

Saya harap ini akan membantu, saya menemukan halaman HGIGNORE (5) sedikit ringkas.

PhiLho
sumber
Saya memiliki pola '' [Dd] ebug * / '' yang digunakan dan yang aneh adalah, bahwa ia juga memfilter file seperti '' debug.txt ''
Mehrdad Mirreza
9

Keduanya juga akan menyaring direktori yang disebut cabin, yang mungkin bukan yang Anda inginkan. Jika Anda memfilter tingkat atas, Anda dapat menggunakan:

^/bin/

Untuk bindirektori di bawah root Anda, Anda dapat menghilangkan ^. Tidak perlu menentukan sintaks, regexp adalah default.

Derek Slager
sumber
4
Ini tidak akan mengabaikan apa pun. Tanda sisipan hanya mengatakan hal-hal di root repo tetapi slash utama hanya menangkap tidak di root repo.
Ry4an Brase
2

Tidak apa-apa, saya mengerti

syntax: regexp
bin\\*

ekspresi mengikuti standar perl sintaks ekspresi reguler.

Xian
sumber
2
Memang, dan ekspresi Anda berarti "file atau folder yang diakhiri dengan bin dan diikuti oleh 0 atau lebih backslash" ... Jadi berfungsi karena backslash dibatalkan oleh *, tetapi berlaku apa pun dengan "bin" di dalamnya. Di Windows, hg menggantikan \ dengan / sebelum mencocokkan.
PhiLho
2

sintaks: glob bin / **

Jawaban ini ditunjukkan di atas, namun saya juga ingin menambahkan bahwa * dan ** ditangani secara berbeda. ** bersifat rekursif, * tidak.

Lihat Pola Hg

balrob
sumber
-2

untuk mengabaikan file .class

syntax: regexp
?\.class
pengguna2427
sumber