Mercurial (hg) คอมมิตเฉพาะบางไฟล์


119

ฉันพยายามส่งเฉพาะบางไฟล์ด้วย Mercurial เนื่องจาก hg มีการเพิ่มอัตโนมัติเมื่อใดก็ตามที่ฉันพยายามทำการเปลี่ยนแปลงจึงต้องการคอมมิตไฟล์ทั้งหมด แต่ฉันไม่ต้องการอย่างนั้นเพราะไฟล์บางไฟล์ยัง "ไม่พร้อม"

มี

hg commit -I thefile.foo

แต่นี่เป็นเพียงไฟล์เดียว วิธีที่ดีกว่าสำหรับฉันคือถ้าฉันสามารถปิดการเพิ่มอัตโนมัติใน Git เป็นไปได้หรือไม่


5
ใช้นามสกุลบันทึก? หรือคุณสามารถระบุไฟล์ในบรรทัดคำสั่งhg ci foo bar baz
tonfa

4
@tonfa โพสต์ความคิดเห็นของคุณใหม่เป็นคำตอบ
Andrei Dziahel

กรุณาอย่าทำลายโพสต์ของคุณ
Glorfindel

ทำไมคุณถึงทำลายคำถามที่ดีเช่นนี้?
Praveen Kumar Purushothaman

คำตอบ:


155

คุณสามารถระบุไฟล์ในบรรทัดคำสั่งได้ตามที่ tonfa เขียน:

$ hg commit foo.c foo.h dir/

นั่นใช้ได้ผลและนั่นคือสิ่งที่ฉันทำตลอดเวลา คุณยังสามารถใช้--includeแฟล็กที่คุณพบและสามารถใช้ได้หลายครั้งดังนี้:

$ hg commit -I foo.c -I "**/*.h"

คุณยังสามารถใช้ไฟล์เซ็ตเพื่อเลือกไฟล์ที่คุณต้องการที่จะกระทำ:

$ hg commit "set:size(1k - 1MB) and not binary()"

ไม่มีการตั้งค่าที่จะปิดพฤติกรรมการเพิ่มอัตโนมัติและทำให้ Mercurial ทำงานได้เหมือน Git อย่างไรก็ตามส่วนขยาย mqอาจเป็นที่สนใจ นั่นเป็นส่วนขยายขั้นสูง แต่ช่วยให้คุณทำได้

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

ฉันไม่ได้ใช้ MQ เพื่อจุดประสงค์นี้จริงๆเพราะฉันคิดว่ามันเพียงพอแล้วที่จะระบุชื่อไฟล์ในบรรทัดคำสั่ง


พฤติกรรม "เพิ่มอัตโนมัติ" คืออะไร hg ใช้ในการเพิ่มไฟล์อัตโนมัติหรือไม่? เพราะตอนนี้คุณต้องทำอย่างชัดเจนมิฉะนั้นพวกเขาจะไม่ถูกติดตาม
mpen

1
@mpen ฉันคิดว่าเขาหมายถึงวิธีที่ gh เพิ่มไฟล์ที่แก้ไขทุกไฟล์ลงในคอมมิตโดยอัตโนมัติซึ่งแตกต่างจากคอมไพล์ที่คุณต้องเพิ่มไฟล์ที่แก้ไขลงในคอมมิตถัดไปด้วยตนเองและสามารถปล่อยให้ไฟล์ที่แก้ไขบางไฟล์ไม่ถูกผูกมัด
simpleuser

24

หากคุณต้องการคอมมิตสองสามไฟล์และไม่รวมไฟล์อื่น ๆ อีกมากมายให้แสดงรายการไฟล์ที่คุณต้องการคอมมิตอย่างชัดเจน -Iจำเป็นเฉพาะในกรณีที่คุณต้องการใช้รูปแบบแทนไฟล์

หากคุณต้องการคอมมิตไฟล์จำนวนมากและยกเว้นไฟล์เพียงไม่กี่ไฟล์การใช้งาน-Xจะสะดวกกว่า

เช่นให้ที่เก็บที่มี "file_1" "file_2" และ "file_3" สิ่งต่อไปนี้เทียบเท่ากัน แต่แบบหลังจะพิมพ์ง่ายกว่า / เร็วกว่า:

hg commit file_1 file_2
hg commit -X file_3

8

ตั้งแต่ 3.8 คุณสามารถใช้hg commit --interactiveเพื่อเลือกไฟล์ (ก่อน 3.8 คุณสามารถใช้นามสกุล crecordสำหรับการทำงานที่คล้ายกันได้) --interactive(หรือเพียงแค่-i) ธงจะทำให้เกิด hg พรอมต์สำหรับไฟล์ที่คุณต้องการที่จะรวมอยู่ในการกระทำ ในฐานะโบนัสเพิ่มเติมคุณสามารถรวม / ไม่รวมชิ้นส่วนภายในไฟล์ได้

นี่คือตัวอย่างลักษณะของอินเทอร์เฟซ โปรดทราบว่านี่เป็นภาพหน้าจอเก่า (ของ crecord จริงๆ) ดังนั้นอินเทอร์เฟซจึงเปลี่ยนไปเล็กน้อย (แต่พื้นฐานเหมือนกัน) ภาพหน้าจอ crecord

หมายเหตุในการรับอินเทอร์เฟซนั้นคุณต้องเปิดใช้งานอินเทอร์เฟซ curses คุณสามารถทำได้สำหรับการรันครั้งเดียวhg commit --config ui.interface=curses --interactiveหรือโดยทั่วไปโดยเพิ่มสิ่งต่อไปนี้ใน.hgrc:

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