git 2.7 (Q4 2015) จะแนะนำการจัดเรียงสาขาโดยใช้โดยตรงgit branch
:
ดูการกระทำ aa3bc55 , กระทำ aedcb7d , กระทำ 1511b22 ,กระทำ f65f139 , ... (23 ก.ย. 2558), กระทำ aedcb7d , กระทำ 1511b22 , กระทำ ca41799 (24 ก.ย. 2558), และกระทำ f65f139 ... (23 กันยายน 2015) โดยคาร์ทิคยัก (KarthikNayak
)
(ผสานโดยJunio C Hamano - gitster
-ในการกระทำ 7f11b48 , 15 ต.ค. 2558)
โดยเฉพาะอย่างยิ่งกระทำ aedcb7d :
branch.c
: ใช้ ' ref-filter
' APIs
ทำAPI ' branch.c
' ใช้ ' ref-filter
' เพื่อทำซ้ำผ่านการเรียงลำดับอ้างอิง สิ่งนี้จะลบรหัสส่วนใหญ่ที่ใช้ใน ' branch.c
' แทนที่ด้วยการเรียกไปยังref-filter
ไลบรารี ''
มันเพิ่มตัวเลือก--sort=<key>
:
จัดเรียงตามคีย์ที่กำหนด
คำนำหน้า-
เพื่อเรียงลำดับจากมากไปน้อยของค่า
คุณสามารถใช้--sort=<key>
ตัวเลือกได้หลายครั้งซึ่งในกรณีนี้คีย์สุดท้ายจะกลายเป็นคีย์หลัก
ปุ่มที่รองรับนั้นเหมือนกับgit for-each-ref
ปุ่มระบบ
เรียงลำดับค่าเริ่มต้นเป็นเรียงตามชื่อเต็ม (รวมถึงrefs/...
คำนำหน้า) รายการนี้แสดง HEAD ที่แยกออก (ถ้ามี) ก่อนจากนั้นจึงแยกสาขาท้องถิ่นและสาขาติดตามระยะไกล
ที่นี่:
git branch --sort=-committerdate
หรือ (ดูด้านล่างด้วย Git 2.19)
# if you are sure to /always/ want to see branches ordered by commits:
git config --global branch.sort -committerdate
git branch
ดูเพิ่มเติมกระทำ 9e46833 (30 ตุลาคม 2015) โดยคาร์ทิคยัก (KarthikNayak
)
ช่วยเหลือโดย: Junio C Hamano ( gitster
) )
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 415095f , 3 พฤศจิกายน 2015)
เมื่อเรียงตามค่าตัวเลข (เช่น--sort=objectsize
) จะไม่มีการเปรียบเทียบทางเลือกเมื่อทั้งสองอ้างอิงมีค่าเดียวกัน สิ่งนี้สามารถทำให้เกิดผลลัพธ์ที่ไม่คาดคิด (เช่นลำดับของการอ้างอิงรายการที่มีค่าเท่ากันไม่สามารถกำหนดล่วงหน้าได้) ดังที่โจฮันเนสซิกท์ชี้ ( $ gmane / 280117 )
ดังนั้นfallback ที่จะเปรียบเทียบตัวอักษรบนพื้นฐาน refname เมื่อใดก็ตามที่เกณฑ์อื่น ๆ จะมีค่าเท่ากับ
$ git branch --sort=objectsize
* (HEAD detached from fromtag)
branch-two
branch-one
master
ด้วย Git 2.19 การเรียงลำดับสามารถตั้งค่าได้ตามค่าเริ่มต้น
git branch
สนับสนุนการตั้งค่าbranch.sort
เช่นเดียวกับที่ได้มีการกำหนดค่าgit tag
ดูกระทำ 560ae1c (16 สิงหาคม 2018) โดยซามูเอล Maftoul ( ``) (ผสานโดยJunio C Hamano - -tag.sort
gitster
ในการกระทำ d89db6f , 27 สิงหาคม 2018)
branch.sort:
ตัวแปรนี้ควบคุมการเรียงลำดับของสาขาเมื่อแสดงโดย git-branch
ตัวแปรนี้จะควบคุมการสั่งซื้อการจัดเรียงของสาขาเมื่อแสดงโดย
หากไม่มี--sort=<value>
ตัวเลือก "" ค่าของตัวแปรนี้จะถูกใช้เป็นค่าเริ่มต้น
git branch -r --sort=objectsize
การแสดงรายชื่อสาขาที่ห่างไกลการใช้งาน การ-r
ตั้งค่าสถานะทำให้รายการสาขาระยะไกลแทนสาขาท้องถิ่น
ด้วย Git 2.27 (Q2 2020), "git branch
for-each-ref
ตัวแปร " และอื่น ๆ " " ยอมรับ--sort=<key>
ตัวเลือกหลายตัวในลำดับที่เพิ่มขึ้นของลำดับความสำคัญ แต่มันมีข้อผิดพลาดเล็กน้อยเกี่ยวกับการ--ignore-case
จัดการ "" และผูกกับ refname ซึ่งได้รับการแก้ไขแล้ว
ดูกระทำ 7c5045f , กระทำ 76f9e56 (3 พฤษภาคม 2020) โดยเจฟฟ์คิง (peff
)
(ผสานโดยJunio C Hamano - gitster
-ในการกระทำ 6de1630 , 08 พฤษภาคม 2020)
ref-filter
: ใช้การจัดเรียง refname ทางเลือกหลังเฉพาะทุกประเภทผู้ใช้
ลงชื่อออกโดย: Jeff King
กระทำ9e468334b4 (" ref-filter
: ทางเลือกในการเปรียบเทียบตามตัวอักษร", 2015-10-30, Git v2.7.0-rc0 - ผสานอยู่ในชุดที่ 10 ) สอนการจัดเรียงเตะกรองเพื่อ fallback เพื่อ refnames เปรียบเทียบ
แต่ทำในระดับที่ไม่ถูกต้องแทนที่ผลการเปรียบเทียบสำหรับ--sort
คีย์เดียวจากผู้ใช้" " แทนที่จะใช้คีย์การเรียงลำดับทั้งหมดหมดแล้ว
สิ่งนี้ทำงานอย่างถูกต้องสำหรับ "--sort
ตัวเลือก " แต่ไม่ใช่สำหรับหลาย ๆ ตัว
เราจะทำลายความสัมพันธ์ใด ๆ ในคีย์แรกด้วย refname และไม่เคยประเมินคีย์ที่สองเลย
เพื่อให้เรื่องน่าสนใจยิ่งขึ้นเราใช้บางครั้งทางเลือกนี้!
สำหรับเขตข้อมูลเช่น " taggeremail
" ซึ่งต้องการการเปรียบเทียบสตริงเราจะส่งคืนผลลัพธ์อย่างแท้จริงstrcmp()
แม้ว่าจะเป็น 0
แต่สำหรับvalue
ฟิลด์ตัวเลข " " เช่น "taggerdate
" เราได้ใช้การย้อนกลับ และนั่นคือสาเหตุที่การทดสอบหลายประเภทของเราพลาดสิ่งนี้: มันใช้taggeremail
เป็นการเปรียบเทียบหลัก
ดังนั้นเริ่มต้นด้วยการเพิ่มการทดสอบที่เข้มงวดมากขึ้น เราจะมีชุดคำมั่นสัญญาที่แสดงชุดอีเมลแท็กเกอร์วันที่และชื่อซ้ำสองชุด จากนั้นเราสามารถยืนยันได้ว่าการเรียงลำดับของเราถูกนำไปใช้กับลำดับความสำคัญที่ถูกต้องและเราจะกดทั้งตัวเปรียบเทียบสตริงและค่า
นั่นแสดงข้อผิดพลาดและการแก้ไขนั้นง่าย: เลื่อนทางเลือกไปด้านนอก compare_refs()
ฟังก์ชั่นหลังจากที่ref_sorting
ปุ่มทั้งหมดหมดลง
โปรดทราบว่าในฟังก์ชั่นด้านนอกเราไม่มี"ignore_case"
ธงเพราะมันเป็นส่วนหนึ่งของแต่ละref_sorting
องค์ประกอบ เป็นที่ถกเถียงกันว่าควรเลือกทางเลือกอย่างไรเนื่องจากเราไม่ได้ใช้กุญแจของผู้ใช้ในการจับคู่
แต่จนถึงขณะนี้เราได้พยายามเคารพธงนั้นดังนั้นสิ่งที่รุกรานน้อยที่สุดคือพยายามทำเช่นนั้นต่อไป
เนื่องจากผู้เรียกทั้งหมดในรหัสปัจจุบันตั้งค่าสถานะสำหรับคีย์ทั้งหมดหรือไม่มีเลยเราจึงสามารถดึงค่าสถานะจากคีย์แรก ในโลกสมมุติที่ผู้ใช้สามารถพลิกตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ของคีย์แยกกันเราอาจต้องการขยายรหัสเพื่อแยกความแตกต่างระหว่างตัวพิมพ์ใหญ่กับผ้าห่ม " --ignore-case
"