พิมพ์แฮชการแก้ไข Mercurial ปัจจุบัน?


124

มีวิธีที่ดีกว่าในการแยกแฮชการแก้ไขปัจจุบันใน Mercurial มากกว่า

hg log -l1|grep changeset|cut -d: -f3

?

ส่วนหนึ่งของสคริปต์การปรับใช้ webapp ของฉัน "แท็ก" tarball ของแอปที่อัปโหลดพร้อมกับแฮชการแก้ไขที่เป็นเอกลักษณ์


2
โปรดทราบว่าhg log -l 1จะให้ชุดการเปลี่ยนแปลงล่าสุดแก่คุณซึ่งไม่จำเป็นต้องเป็นชุดการเปลี่ยนแปลงที่คุณกำลังอัปเดตอยู่ในขณะนี้! แฟล็ก -f จำกัด เอาต์พุตบันทึก hg ไว้ที่บรรพบุรุษของไดเร็กทอรีการทำงานปัจจุบันดังนั้นจึงhg log -f -l1ใกล้เคียงกับสิ่งที่คุณต้องการมากขึ้น
กันน้ำ

คำตอบ:


196

ลอง:

hg id -i

ตัวอย่าง:

$ hg id -i
adc56745e928

22
ในกรณีที่ผู้ใช้พลาดโซลูชันด้านล่างหากคุณต้องการใช้แฮชแบบเต็ม: hg --debug id -iหากคุณต้องการการสนับสนุนเทมเพลตให้ใช้hg parent --template '{node}' Do not use hg log -l 1ชุดการเปลี่ยนแปลงที่เก็บล่าสุดไม่ใช่ชุดการเปลี่ยนแปลงสำเนาที่ใช้งานได้ในปัจจุบัน
Joseph Lisee

7
ไม่แนะนำให้ใช้ --debug ในสคริปต์เอาต์พุตนั้นจะถูกควบคุมอย่างระมัดระวังน้อยกว่าโดยใช้ความเข้ากันได้ย้อนหลัง ใช้เทมเพลต หากคุณต้องการทำ w / log ให้ใช้.dot เป็นการแก้ไข
Ry4an Brase

ขอบคุณ Ry4an ฉันไม่รู้เกี่ยวกับ "-r." อ้างถึงการแก้ไขสำเนาที่ใช้งานได้ในปัจจุบัน ดูเหมือนว่าการย้ายจะดีกว่าแล้วเปลี่ยนจาก "บันทึก" เป็น "ผู้ปกครอง"
Joseph Lisee

ไม่มีพร็อบ hg help revisionsและhg help revsetsมีทางลัดที่ทรงพลังแบบนั้น
Ry4an Brase

แต่มันไม่ได้คำตอบที่เฉพาะเจาะจงมากที่สุดกับคำถามเพราะ AFAIK hg id -iพิมพ์เพียงสั้น (12 ตัวอักษร) รูปแบบของรหัสกัญชาทั่วโลกและเนื่องจากhg identifyขาด--templateafaics มีวิธีที่จะดึงเพียงการแก้ไขและไม่มีอะไรอื่นตั้งแต่ไม่มีหน้าคนบอกว่ามัน พิมพ์สรุป
Shelby Moore III

41
hg --debug id -i

สิ่งนี้จะส่งออกแฮชแบบยาวพร้อมด้วยเครื่องหมายบวกหากมีการเปลี่ยนแปลงที่ไม่ได้กำหนดไว้


ดูเหมือนว่าจะเป็นค่าเริ่มต้นใน 3.1.2
Nickd

1
downvoting เพราะ Ry4an ของความคิดเห็น
Shelby Moore III

20

คุณสามารถใช้ --template กับคำสั่ง parent ฉันใช้สิ่งนี้เพื่อรับแฮชแบบยาว:

hg parent --template '{node}'

หน้าคน hg กล่าวhg parentsคือเลิกแม้ว่าบางทีที่อาจไม่ได้รับกรณีที่เมื่อคุณเขียนคำตอบนี้ หากมีการผสานที่ไม่ถูกผูกมัดจะมีการแก้ไขพาเรนต์สองรายการ
Shelby Moore III

2
มีใครบอกเราได้ไหมว่าทำไมพ่อแม่ hg ถึงเลิกใช้งานและเราควรใช้อะไรแทน?
Vincent

17

สรุปคำตอบและการตอบสนองของพวกเขาก็ดูเหมือนว่านี่เป็นวิธีที่ดีที่สุดในการพิมพ์ที่ไม่ซ้ำกัน (ไม่ได้แบบสั้น) ระบุในปัจจุบันรุ่น:

hg log -l 1 --template '{node}\n' -r .

หมายเหตุหากมีการผสานที่ไม่ได้กำหนดไว้.(dot) จะแสดงเฉพาะพาเรนต์แรกของผู้ปกครองสองคนของกลุ่มการทำงาน
Shelby Moore III

9
hg log -l 1 --template '{node|short}\n'

ดูเอกสารย่อหน้า "พื้นฐานของเทมเพลต" และต่อไปนี้


2
ฉันต้องการเกือบนี้ แต่ด้วยแฮชที่ยาวนาน การใส่นามแฝงlidเพื่อให้log -l 1 --template '{node}\n'บรรลุสิ่งนี้ - พิมพ์ ID การแก้ไขแบบเต็ม
Michael Ekstrand

6
สิ่งนี้จะพิมพ์ชุดการเปลี่ยนแปลงที่ดึงล่าสุด ไดเร็กทอรีการทำงานของเราสามารถอัปเดตเป็นชุดการเปลี่ยนแปลงที่เก่ากว่าได้ หากต้องการพิมพ์ชุดการเปลี่ยนแปลงที่เราอัปเดตให้ใช้ "hg id" ปัญหาเดียวคือ "hg id" ไม่รองรับเทมเพลตและไม่มีตัวเลือกในการพิมพ์แฮชแบบยาว (เว้นแต่จะมีใครรู้วิธีทำ)
Eiver

1
ดังที่ Eiver กล่าวว่าสิ่งนี้ไม่ได้พิมพ์การแก้ไขจริงในสำเนาการทำงานของคุณเพียงฉบับล่าสุดในที่เก็บของคุณ เนื่องจากการใช้โซลูชันนี้อาจทำให้เกิดข้อผิดพลาดในการติดตามฉันจึงโหวตโซลูชันนี้ลง
Joseph Lisee

1
การลงคะแนนของ Ditto Joe ยังใช้ @Eiver hg --debug id -iตามที่กล่าวไว้ที่อื่น
AJP

3

คำสั่งที่ไม่ถูกยกเลิกที่เฉพาะเจาะจงที่สุดซึ่งเนื่องจากการมีอยู่ของ--templateสามารถพิมพ์เฉพาะข้อมูลการแก้ไขหากต้องการความกระชับนั้น (ตามนัยของคำถาม):

hg log -l 1 -b . -T '{rev}:{node|short}\n'

หรือสำหรับแฮชแบบยาวที่ไม่ซ้ำใคร:

hg log -l 1 -r . -T '{node}\n'

-b .หรือbranch(.)(dot สำหรับชื่อสาขา) หมายถึงสาขาไดเรกทอรีการทำงานปัจจุบันและ-r .หมายถึงการแก้ไขไดเรกทอรีการทำงานปัจจุบันซึ่งเป็นเอกสารในและhg help revsetshg help revisions

หมายเหตุหากมีการผสานที่ไม่ได้กำหนดไว้.(dot) จะแสดงเฉพาะพาเรนต์แรกของผู้ปกครองสองคนของกลุ่มการทำงาน


3

ตามที่คนอื่นชี้ไว้อย่าใช้log -l.

ใช้hg log -r .เพื่อรับข้อมูลโดยละเอียดซึ่งต่างจากการใช้hg idเอาต์พุตที่มี จำกัด และไม่รองรับเทมเพลต นอกจากนี้คุณยังสามารถสร้างนามแฝงเล็กน้อยเช่นและการใช้งานhere = log -r . hg hereหากคุณต้องการใช้แฮชhg log -r . --template '{node}\n'เท่านั้น


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