Mercurial - ไฟล์ทั้งหมดที่เปลี่ยนแปลงในชุดการเปลี่ยนแปลง?


99

คุณจะตรวจสอบไฟล์ทั้งหมดที่เปลี่ยนแปลงในชุดการเปลี่ยนแปลงที่กำหนดได้อย่างไร?

ฉันไม่ได้มองหาความแตกต่างในกรณีนี้เพียงแค่รายการเพิ่ม / ลบ / แก้ไข

hg log -vprX ทำรายการความแตกต่าง แต่ฉันแค่ต้องการไฟล์


คำตอบ:


150

หากคุณต้องการแสดงเฉพาะไฟล์ที่มีการเปลี่ยนแปลงคุณควรใช้ "status command" ต่อไปนี้จะแสดงรายการการเปลี่ยนแปลงของไฟล์ใน REV ฉบับแก้ไข

hg status --change REV

14
+1 แต่ OP อาจต้องการ-n/ --no-statusตั้งค่าสถานะด้วย
Niall C.

7
เพื่อให้ง่ายต่อการคัดลอก:hg status --no-status --change REV
zastrowm

+1 นี่พิมพ์ง่ายกว่าhg status --rev REV~1:REVที่เคยทำมาก
Patrick Oscity

3
ใช้ "." สำหรับ REV ปัจจุบัน หมายถึง -hg status --change .
zaxy78

16

เพียงแค่ลบออกpจากรายการของคุณhg log -vprจะแสดงรายการไฟล์ -pหมายถึงแสดงแพทช์ คุณยังสามารถใช้เทมเพลตเพื่อจัดรูปแบบผลลัพธ์ตามรสนิยมของคุณ


3
ฉันคิดว่าคุณจะต้องมีเทมเพลตต่อไปนี้: --template 'files: {files} \ n'
Ton Plomp

1
ฉันเชื่อว่า {files} เป็นส่วนหนึ่งของเทมเพลตเริ่มต้นแฟ
ล็ก -v

2
hg log -r. --template "{join (files," \ n ")}" เพื่อขึ้นบรรทัดใหม่แยกไฟล์
Foxichu

1
ความคิดเห็นของ @Foxichu ใช้งานได้สำหรับฉัน แต่ก็ค่อนข้างแฮ็ค คำตอบด้านบน - hg status --change .ทำงานได้ดีขึ้นและให้คำนำหน้าการดำเนินการไฟล์ (A \ M \ D ฯลฯ ) และเส้นทางสัมพัทธ์ที่ดีกว่า
zaxy78

13

ฉันรู้ว่าคำถามนี้มีไว้สำหรับชุดการเปลี่ยนแปลงเดียว แต่ถ้าคุณต้องการให้ไฟล์ทั้งหมดถูกแก้ไขสำหรับชุดการเปลี่ยนแปลงต่างๆคุณสามารถทำได้

hg status --rev 1 --rev 10 -m

2
แย่มาก ไฟล์ที่แก้ไขในช่วงเป็นไปhg log -r BEGIN:END --template "{files}\n"ตามที่ @ geoffrey-zheng และ @ton เขียนไว้เมื่อสองปีก่อน !!!
Lazy Badger

ขอโทษด้วยกับเรื่องนั้น. สันนิษฐานว่าคำตอบของพวกเขาคือสำหรับชุดการเปลี่ยนแปลงเดียว
Nick DeVore

1
ในความคิดของฉันคำตอบนี้ไม่น่ากลัว hg status --rev BEGIN --rev ENDคือ 1. จำง่ายกว่าhg log -r BEGIN:END --template "{files}\n"มาก 2. พิมพ์ไฟล์ในบรรทัดแยกกันโดยไม่ต้องใช้sed(@Eric Lawler) หรือjoin()(@Foxichu); 3. หากไม่มี-mแฟล็กจะแสดงไม่เพียง แต่แก้ไข แต่ยังเพิ่มและลบไฟล์ (ใช้สีมาตรฐานที่ดีที่นี่ด้วย) 4. มี-aและ-rแฟล็กที่อนุญาตให้มีการกรองที่แตกต่างกัน 5. ถ้าใครไม่ต้องการคำนำหน้าสถานะก็มี-nตัวเลือกที่จะระงับมัน
MichałWróbel

10

การแก้ไขที่มุ่งมั่นในปัจจุบัน

hg status --change .

.เป็นชวเลขสำหรับ rev ปัจจุบันเช่นเดียวกับ@HEADใน Git

การแก้ไขที่ไม่ได้ผูกมัดในปัจจุบัน

hg status

การแก้ไขตามอำเภอใจ

hg status --change REV_ID

1
คำตอบที่ง่ายและถูกต้องที่สุด!
zaxy78

2

พบคำถามนี้ผ่าน Google สำหรับแนวคิดที่คล้ายกัน หากต้องการแสดงไฟล์ทั้งหมดที่มีการเปลี่ยนแปลงผ่านช่วงของการแก้ไขก็เป็นเรื่องง่ายที่:

hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" | sed -e 's/ /\n/g' | sort -d | uniq
  1. hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n"จะแสดงรายการไฟล์แต่ละไฟล์ที่เปลี่ยนแปลงหรือเพิ่มในแต่ละชุดการเปลี่ยนแปลงตั้งแต่ [start rev] ถึง [end rev] โดยไฟล์ของชุดการเปลี่ยนแปลงแต่ละไฟล์จะขึ้นบรรทัดใหม่ สลับ{file_mods}{file_adds}กับ{files}การแสดงไฟล์ทั้งหมดที่มีการปรับเปลี่ยนเพิ่มหรือลบออก
  2. sed -e 's/ /\n/g' จะแยกไฟล์ทั้งหมดเพื่อแสดงในบรรทัดแยกกันและ
  3. sort จะเอ้อจัดเรียงรายการให้คุณเพื่อให้เราสามารถกรองรายการด้วย uniq
  4. uniq จะกรองรายการเพื่อลบรายการที่ซ้ำกัน - ไฟล์ที่เปลี่ยนแปลงในการแก้ไขมากกว่าหนึ่งครั้ง

โซลูชันนี้จะรวมไฟล์ที่แก้ไขล่าสุดเข้าด้วยกันกับไฟล์แรกที่เพิ่มเข้าด้วยกัน นอกจากนี้ยังจัดการกับช่องว่างในชื่อไฟล์ไม่ถูกต้อง --templateแก้ปัญหาชั่นโดยไม่ต้องมีข้อบกพร่องเหล่านี้อาจจะสร้างขึ้นโดยใช้join()การแนะนำโดย @Foxichu
MichałWróbel

1

ฉันรู้ว่าคำถามนี้เป็นคำถามเก่าและฉันไม่แปลกใจเลยว่าไม่มีใครเสนอรูปแบบรหัสที่แก้ไขแล้ว OP ฉันมีรายชื่อของการแก้ไข / เพิ่มไฟล์ / ลบ (ไม่ได้ระบุว่าซึ่งเป็นที่แม้ว่า) hg log -vโดยเพียงแค่การทำงาน หรือสิ่งที่ฉันต้องการจริงๆhg log -v -l5เพื่อดูไฟล์ที่ได้รับการแก้ไข / เพิ่ม / ลบในการคอมมิต 5 ครั้งล่าสุด (รวมถึงไฟล์ที่ฉันยังไม่ได้ส่งไปยัง repo)


"ไม่มีใครเพิ่งเสนอรูปแบบรหัสที่แก้ไข OP" - @Geoffrey Zheng ทำเช่นนั้น ~ 1 ชม. หลังจากโพสต์คำถาม
MichałWróbel

-2

หากคุณชอบร้านค้าส่วนใหญ่คุณใช้ระบบจองตั๋วเพื่อติดตามการเปลี่ยนแปลง หากคุณทราบหมายเลขตั๋วและต้องการค้นหาคอมมิตทั้งหมดที่เกี่ยวข้องกับตั๋วนั้น (สมมติว่าคุณใส่หมายเลขตั๋วในข้อความคอมมิต) คุณสามารถใช้:

hg log -k TICKET_NUMBER

สิ่งนี้จะแสดงการแก้ไขทั้งหมดที่เกี่ยวข้องกับตั๋ว อย่างไรก็ตามจะไม่แสดงรายการไฟล์ คุณสามารถใช้หนึ่งในคำตอบด้านบนเพื่อรับรายการไฟล์ที่เกี่ยวข้องกับการแก้ไข

เพื่อให้ง่ายขึ้นด้วยการรวมข้อมูลจากคำตอบก่อนหน้านี้คุณสามารถทำสิ่งต่อไปนี้เพื่อค้นหา commits รวมถึงไฟล์ที่เปลี่ยนแปลง:

hg log -vk TICKET_NUMBER

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