ฉันจะลบไฟล์ที่ไม่ได้ติดตามทั้งหมดออกจากไดเรกทอรีการทำงานของฉันใน Mercurial ได้อย่างไร


207

เป็นไปได้หรือไม่ที่จะลบไฟล์ที่ไม่ได้ติดตามทั้งหมดออกจากไดเรกทอรีทำงานของฉัน? สมมติว่าฉันเพิ่มไฟล์จำนวนมากลงในไดเรกทอรีการทำงานของฉันไม่ได้เพิ่มผ่าน 'hg add' และตอนนี้ต้องการกำจัดไฟล์ใหม่เหล่านั้นทั้งหมดหรือไม่

ฉันใช้ Windows แม้ว่าฉันกำลังใช้ PowerShell ดังนั้นโซลูชันแบบรวมจึงเป็นไปได้ที่นี่

คำตอบ:


286

เพิ่ม Mercurial ขยายที่เรียกว่าล้าง มันถูกแจกจ่ายโดย Mercurial

ส่วนขยายนี้เพิ่มคำสั่ง "ล้างข้อมูล" ไปที่ "hg" ซึ่งจะลบไฟล์ที่ Mercurial ไม่รู้จัก เช่นไฟล์ที่ไม่ได้ติดตาม ดังนั้นคำสั่งของคุณจะเป็น

hg purge

ไม่ได้เปิดใช้งานตามค่าเริ่มต้นอาจหลีกเลี่ยงการลบไฟล์ที่คุณลืมเพิ่มโดยไม่ตั้งใจ

หากต้องการติดตั้งส่วนขยายนี้ให้เพิ่มส่วนนี้ลงในไฟล์การตั้งค่า Mercurial ของคุณ (.hgrc บน Unix, Mercurial.ini บน Windows)

[extensions]
purge = 

หากต้องการเปิดใช้งานส่วนขยายนี้ชั่วคราวคุณสามารถใช้

hg purge --config extensions.purge= 

26
hg purge --allจะลบไฟล์ที่ไม่ได้ติดตามและไม่สนใจทั้งหมด นี้จะเป็นประโยชน์ในการทำความสะอาดในแหล่งที่มาสร้าง
tacaswell

22
เพื่อเปิดใช้งาน ext คุณสามารถใช้งานได้ชั่วคราวhg purge --config extensions.purge=
Pykler

121

วิธีที่เหมาะสมโดยไม่ต้องล้างคือ:

hg st -un0 | xargs -0 rm

1
@simplyharsh เป็นวิธีที่ดีกว่านี้หรือคุณเพิ่งพบว่ามันทำงานได้น้อยกว่าการเพิ่มส่วนขยายหรือไม่
Yaakov Kuperman

3
@YaakovKuperman ฉันเดาว่าการเพิ่มส่วนขยายนั้นใช้งานได้น้อยกว่าคำสั่งนี้ (เปิดใช้งานครั้งเดียว) ฉันไม่เปิดใช้งานส่วนขยายการล้างข้อมูลเพราะฉันต้องการมันน้อยกว่าหนึ่งครั้งในเวลาปักษ์ นอกจากนี้ยังเรียกฉันว่าโง่ แต่การพิมพ์คำสั่งนี้ให้เวลาฉันพอที่จะคิดอีกครั้งก่อนที่จะทำอะไรบางอย่างที่มีลักษณะเป็นการทำลายล้าง
Simplyharsh

2
@simplyharsh ที่ทำให้รู้สึก แต่มีสองเหตุผลที่ฉันไปล้างเหมือนกันทั้งหมด ก่อนอื่นคุณสามารถทำ hg purge - print และดูรายการสิ่งที่มันจะกำจัดก่อนที่คุณจะทำการกำจัด ประการที่สองถ้าคุณทำเช่นนี้คุณจะต้องอยู่ในรากของ repo เพื่อให้มันทำงาน
Yaakov Kuperman

1
@javawizard: นี่เป็นสิ่งที่ดีที่ทำให้ฉันคิดใหม่ว่า hg ทำงานอย่างไร แต่ก็ทำงานได้เพียงเพราะrm -rf *ข้าม dot dot .hg/ไฟล์และไดเรกทอรีรวมทั้ง ด้วยโทเค็นเดียวกัน dotfile อื่น ๆ (พูด. evil-settings) จะอยู่รอดและกำจัดได้ดีกว่า
dirkjot

2
โปรดทราบว่ามีความแตกต่างในพฤติกรรมระหว่างสิ่งที่ 'hg st -u' และ 'hg purge' พบ 'hg st -u' จะไม่พบไดเรกทอรีว่างเปล่าที่ไม่ได้ติดตามในขณะที่ 'hg purge' จะค้นหา (และลบ) พวกมัน นั่นอาจจะใช่หรือไม่ใช่สิ่งสำคัญสำหรับคุณ
Michael Kent

19

ขอบคุณ! สิ่งนี้ใช้ได้กับฉันใน Powershell ด้วย:

hg st -un | rm

2
xargs ไม่ทำงานใน powershell - นี่เป็นคำตอบเดียวที่อยู่นอกกรอบ "windows friendly"
Nikos Athanasiou

ตกลง ... ที่สองใน xargs ไม่ทำงานใน powershell ... การล้างยังคงเป็นตัวเลือกที่ทำงานได้แม้ว่า
beauXjames

ทำงานให้ฉัน :)
Naveen Kumar V


4

คุณสามารถใช้ได้

hg purge --all

เพื่อลบไฟล์ที่ถูกละเว้นและไม่ได้ติดตามทั้งหมด

(ก่อนอื่นคุณต้องติดตั้งส่วนขยายการกำจัดตามที่อธิบายไว้ในคำตอบบางข้อ)





0

สมมติว่าคุณกำลังใช้ระบบ * nix คุณสามารถเรียกใช้สิ่งนี้:

rm `hg st | awk '/\?/ {print $2}'`

จากรูทของคลังเก็บ Mercurial

ฉันไม่ทราบคำสั่ง Mercurial มาตรฐานเพื่อให้บรรลุเหมือนกัน แต่ฉันเชื่อว่ามีตัวเลือกบรรทัดคำสั่งมากมายให้ทำเช่นนี้ ฉันแน่ใจว่ามีวิธีแก้ปัญหา "ดีกว่า" และจะสนใจฟังคำแนะนำอื่น ๆ

โปรดใช้คำสั่งนี้ด้วยความระมัดระวังเนื่องจากไม่ผ่านการทดสอบอย่างละเอียด

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