jj v0.42.0 ออกแล้ว - ระบบควบคุมเวอร์ชันที่เข้ากันได้กับ Git
(github.com/jj-vcs)- เปลี่ยนไปใช้ตัวจัดสรรหน่วยความจำ mimalloc เพื่อปรับปรุงประสิทธิภาพแบบมัลติเธรด
- ลบ ตัวเลือกคำสั่งที่เตรียมเลิกใช้ เช่น
jj commit --reset-author/--author,jj describe --no-edit/--edit/--reset-author/--author - ลบตัวเลือก
jj git push --allow-new,jj metaedit --update-committer-timestamp - ลบ ตัวเลือกการตั้งค่าที่เตรียมเลิกใช้ เช่น
git.auto-local-bookmark,git.push-new-bookmarks jj evologยุติการรองรับ predecessor ของคอมมิตแบบเลกาซีที่บันทึกก่อนjj0.30- การเติมคำสั่งอัตโนมัติของเชลล์จะแสดงคำอธิบายของ alias, revset-alias, template-alias และ fileset-alias ที่ผู้ใช้กำหนดเอง พร้อมดึงคำอธิบายจากฟิลด์
.docของการกำหนด alias แบบตาราง jj showรับหลาย revision ได้ และแสดงแต่ละ revision ตามลำดับให้ใกล้เคียงกับgit showมากขึ้นjj git fetchสร้าง evolution history โดยอิงจาก change ID และหากรีโมตรักษา change ID ไว้ ก็จะ rebase revision ลูกหลานในเครื่องขึ้นไปบน parent ที่ถูกเขียนใหม่- คำสั่ง
jj util backend nameจะแสดงชื่อคอมมิตแบ็กเอนด์ที่ใช้อยู่ในรีโพซิทอรีปัจจุบัน - เพิ่มการตั้งค่า
edit-invocation-modeสำหรับ diff editor โดยเมื่อกำหนด"file-by-file"จะเรียกตัวแก้ไขหนึ่งครั้งต่อไฟล์ที่เปลี่ยน ทำให้ใช้เครื่องมือแบบรายไฟล์อย่างvimdiffได้ jj git remote addจะรายงานข้อผิดพลาดแทนการ panic เมื่อชื่อรีโมตว่างเปล่าหรือมีช่องว่าง- color-words diff เมื่อปิดการแสดงผลสี จะแสดง before/after แยกคนละบรรทัด ช่วยให้อ่าน diff ที่ถูก pipe หรือ redirect ได้ดีขึ้น
1 ความคิดเห็น
ความคิดเห็นจาก Lobste.rs
ถ้า
jj git fetchตอนนี้สร้าง ประวัติวิวัฒนาการตาม change ID ได้ หมายความว่าถ้ารีโมตรักษา change ID เอาไว้ เราก็ไม่ต้องรันjj new mainทุกครั้งหลังjj git fetchแล้วใช่ไหมถ้าเป็นแบบนั้นก็ดูเป็นการปรับปรุงคุณภาพชีวิตที่ดีพอสมควร
mainอยู่ดี เลยน่าจะไม่ช่วยในจุดนั้นแต่ไม่แน่ใจว่าในกรณี merge commit ที่ GitHub สร้าง และไม่มี change ID จะเป็นอย่างไร
ส่วนที่บอกว่าเปลี่ยนไปใช้ตัวจัดสรรหน่วยความจำ
mimallocเพื่อเพิ่ม ประสิทธิภาพแบบมัลติเธรด นี่น่าสนใจกว่าสำหรับโปรเซสที่รันยาว ๆ ฉันเคยใช้พวก
jemallocเพื่อลด fragmentation แต่jjให้ความรู้สึกว่าเริ่มใน 1ms และจบภายใน 10ms เลยแปลกใจที่การเปลี่ยน allocator จะส่งผลให้รู้สึกได้ลองหาดูเพิ่มแล้ว เจอ PR คือ https://github.com/jj-vcs/jj/pull/9484 กับประมาณนี้ https://github.com/jj-vcs/jj/issues/2490#issuecomment-2595323515 แต่ก็ดูไม่ได้เร็วขึ้นมากนัก ถึงอย่างนั้นถ้าเร็วขึ้นและแก้แค่ไม่กี่บรรทัดก็ดีอยู่
ที่บอกว่า “ถ้ารีโมตรักษา change ID เอาไว้” นี่คือปกติแล้วรีโมตทั่วไปรักษามันไว้ด้วยเหรอ
รู้ว่า
jj gerrit uploadจะเพิ่ม change ID footer แต่jj git pushปกติไม่ได้ทำแบบนั้นแต่การกระทำที่เขียน commit ใหม่อย่าง squash merge หรือ rebase merge ของ GitHub จะไม่เก็บไว้ ถ้าประมวลผลด้วยเครื่องมือมาตรฐานที่อิง
libgit2ก็จะไม่เก็บ custom header ส่วนเครื่องมือบางตัวอย่างไลบรารี Rust ที่ GitButler ใช้รองรับการเก็บ custom header แต่ก็ไม่แน่ใจว่า forge ต่าง ๆ จะใช้ของแบบนั้นหรือเปล่าและก็ไม่รู้ด้วยว่าจะตรวจสอบอย่างไรว่าเก็บไว้อย่างถูกต้องหรือไม่
มีข้อมูลเพิ่มเติมในเอกสาร
GitHub ก็เก็บไว้เหมือนกัน ดูได้จากคอมมิตของ pushcx ในโค้ดเบสของ lobsters หรือคอมมิตของฉัน
อยากรู้ว่ามีอะไรให้อ่านหรือดูบ้างเกี่ยวกับ เหตุผลที่ควรใช้ jj แทน Git มาตรฐาน
รู้ว่า jj ทำงานบน Git ได้ และก็เคยลองกับโปรเจกต์เล่น ๆ มาแล้ว แต่ยังหาจุดดึงดูดแบบชี้ขาดไม่ได้ว่าทำไมมันถึงดีกว่าหรือง่ายกว่า