ฉันจะเพิกเฉยทุกสิ่งภายใต้โฟลเดอร์ใน Mercurial ได้อย่างไร


149

ฉันกำลังหานิพจน์สำหรับไฟล์. hgignore เพื่อละเว้นไฟล์ทั้งหมดที่อยู่ในโฟลเดอร์ที่ระบุ

เช่นฉันต้องการละเว้นไฟล์และโฟลเดอร์ทั้งหมดที่อยู่ใต้ bin

จริง ๆ แล้วคำแนะนำใด ๆ เกี่ยวกับวิธีการสร้างการแสดงออกจะดี

คำตอบ:


173

อีกวิธีหนึ่งคือ:

syntax: glob
bin/**

นี้เป็นเรื่องง่ายที่ผมคิดว่า :)
ซีอาน

พีโฮฉันคิดว่าจะกรองไฟล์ชื่อ bin ด้วยเช่นกัน
Peter Gibson

1
คำตอบนี้รวมทั้งเอกสารนี้ช่วยฉันด้วย: selenic.com/mercurial/hgignore.5.html
CenterOrbit

7
bin bin/ bin/* bin/**- ทุกคนทำสิ่งเดียวกันกับ glob เช่นละเว้นไดเรกทอรีและไดเรกทอรีย่อยทั้งหมดที่ชื่อว่า bin แต่ไม่ใช่ชื่อไฟล์ bin.txt หรือ bin1 ใด ๆ Asterix มีประเด็นอะไร?
ผู้ใช้

ฉันชอบความชัดเจน แต่แน่นอนว่าใช้ 'bin' หากคุณปรับใช้กฎแบบre
กลม

53

ฉันทำการทดลองบางอย่างและพบว่าไวยากรณ์ regex บน Windows ใช้กับเส้นทางที่ขึ้นต้นด้วยพื้นที่เก็บข้อมูลปัจจุบันโดยมีแบ็กสแลชเปลี่ยนเป็นสแลช

ดังนั้นหากพื้นที่เก็บข้อมูลของคุณอยู่ใน E: \ Dev hg statusจะใช้รูปแบบกับ foo / bar / file1.c และเช่นนั้น จุดยึดนำไปใช้กับเส้นทางนี้

ดังนั้น:

  • Glob นำไปใช้กับองค์ประกอบเส้นทางและถูกหยั่งรากไปยังส่วนองค์ประกอบ
  • foo ตรงกับโฟลเดอร์ใด ๆ (หรือไฟล์) ชื่อ foo (ไม่ใช่ "foobar" หรือ "barfoo")
  • * foo * ตรงกับโฟลเดอร์หรือไฟล์ใด ๆ ที่มี "foo" ในชื่อ
  • foo / bar * ตรงกับไฟล์ทั้งหมดในโฟลเดอร์ "foo" ที่ขึ้นต้นด้วย "bar"


  • Regex คำนึงถึงขนาดตัวพิมพ์ไม่ใช่การยึด
  • แน่นอน backslash regex ตัวละครพิเศษเช่น (dot)
  • / match \ path separator บน Windows \ ไม่ตรงกับตัวแยกนี้ ...
  • foo จับคู่ไฟล์และโฟลเดอร์ทั้งหมดด้วย "foo" ด้านใน
  • foo / จับคู่เฉพาะโฟลเดอร์ที่ลงท้ายด้วย "foo"
  • / foo / จับคู่โฟลเดอร์ "foo" ที่ไหนสักแห่งในเส้นทาง
  • / foo / bar / ตรงกับโฟลเดอร์ "bar" ในโฟลเดอร์ "foo" ที่ใดที่หนึ่งในเส้นทาง
  • ^ foo จับคู่ไฟล์หรือโฟลเดอร์ที่เริ่มต้นโดย foo ที่รูทของที่เก็บ
  • foo $ ตรงกับไฟล์ที่ลงท้ายด้วย foo

ฉันหวังว่าสิ่งนี้จะช่วยได้ฉันพบหน้าสั้น ๆของHGIGNORE (5)


ฉันมีรูปแบบ '' [Dd] ebug * / '' ที่ใช้งานอยู่และสิ่งที่แปลกคือมันกรองไฟล์เช่น '' debug.txt ''
Mehrdad Mirreza

9

ทั้งสองอย่างจะกรองไดเรกทอรีที่เรียกว่าcabinซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ หากคุณกำลังกรองระดับสูงสุดคุณสามารถใช้:

^/bin/

สำหรับbinไดเรกทอรีด้านล่างรูทของคุณคุณสามารถละเว้น ^ ไม่จำเป็นต้องระบุไวยากรณ์ regexp เป็นค่าเริ่มต้น


4
สิ่งนี้จะไม่เพิกเฉย เครื่องหมายรูปหมวกจะพูดเฉพาะสิ่งต่าง ๆ ในราก repo แต่เครื่องหมายสแลชนำหน้าจับเฉพาะ dirs ไม่ได้อยู่ในราก repo
Ry4an Brase

2

ไม่เป็นไรฉันเข้าใจแล้ว

syntax: regexp
bin\\*

นิพจน์เป็นไปตามไวยากรณ์การแสดงออกปกติ Perl มาตรฐาน


2
แน่นอนและการแสดงออกของคุณหมายถึง "ไฟล์หรือโฟลเดอร์ที่ลงท้ายด้วย bin และตามด้วย 0 หรือมากกว่าแบ็กสแลช" ... ดังนั้นจึงใช้งานได้เพราะแบ็กสแลชถูกลบล้างโดย * แต่มันใช้อะไรก็ได้ที่มี "bin" อยู่ภายใน บน Windows hg จะแทนที่ \ by / ก่อนการจับคู่
PhiLho

2

ไวยากรณ์: glob bin / **

คำตอบนี้แสดงไว้ข้างต้น แต่ฉันต้องการเพิ่มว่า * และ ** ได้รับการจัดการแตกต่างกัน ** เรียกซ้ำ * ไม่

ดูรูปแบบ Hg


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.