Git 2.22 (Q2 2019) เปิดตัวtrace2
ด้วยการกระทำ ee4512eโดยJeff Hostetler :
trace2
: สร้างสิ่งอำนวยความสะดวกการติดตามแบบรวมใหม่
สร้างเครื่องมือการติดตามแบบรวมศูนย์ใหม่สำหรับ git
เจตนาในที่สุดคือการแทนที่ปัจจุบันtrace_printf*
และการtrace_performance*
ปฏิบัติด้วยชุดของการgit_trace2*
ปฏิบัติแบบครบวงจร
นอกเหนือจาก API การพิมพ์สไตล์ปกติแล้วtrace2
ยังให้คำกริยาเหตุการณ์ระดับสูงขึ้นด้วยฟิลด์คงที่เพื่อให้สามารถเขียนข้อมูลที่มีโครงสร้างได้
สิ่งนี้ทำให้การโพสต์การประมวลผลและการวิเคราะห์ง่ายขึ้นสำหรับเครื่องมือภายนอก
Trace2 กำหนดเป้าหมาย 3 เอาต์พุต
สิ่งเหล่านี้ถูกตั้งค่าโดยใช้ตัวแปรสภาพแวดล้อม " GIT_TR2
", " GIT_TR2_PERF
" และ "GIT_TR2_EVENT
"
สิ่งเหล่านี้อาจถูกตั้งค่าเป็น "1" หรือชื่อพา ธ สัมบูรณ์ (เช่นเดียวกับในปัจจุบันGIT_TRACE
)
หมายเหตุ: เกี่ยวกับชื่อตัวแปรสภาพแวดล้อมมักจะใช้ไม่ได้GIT_TRACExxx
ดังนั้นจริงๆแล้วGIT_TRxxx
GIT_TRACE2
, หรือGIT_TRACE2_PERF
ดูการเปลี่ยนชื่อ Git 2.22 ที่กล่าวถึงด้านล่างGIT_TRACE2_EVENT
สิ่งที่ตามมาคือการทำงานเริ่มต้นในคุณลักษณะการติดตามใหม่นี้ด้วยเก่าชื่อตัวแปรสภาพแวดล้อม :
GIT_TR2
มีวัตถุประสงค์เพื่อทดแทน GIT_TRACE
และบันทึกข้อมูลสรุปคำสั่ง
GIT_TR2_PERF
มีวัตถุประสงค์เพื่อทดแทน GIT_TRACE_PERFORMANCE
มีวัตถุประสงค์เพื่อเป็นทดแทนสำหรับ
มันขยายเอาต์พุตด้วยคอลัมน์สำหรับกระบวนการคำสั่งเธรด repo เวลาที่ผ่านไปสัมบูรณ์และสัมพัทธ์ มันรายงานเหตุการณ์สำหรับการเริ่มต้น / หยุดกระบวนการเด็กเริ่ม / หยุดด้ายและฟังก์ชั่นต่อเธรดรัง
GIT_TR2_EVENT
เป็นรูปแบบที่มีโครงสร้างใหม่ มันเขียนข้อมูลเหตุการณ์เป็นชุดของระเบียน JSON
โทรไปยังฟังก์ชั่น trace2 เข้าสู่ระบบใด ๆ ของ 3 เป้าหมายการส่งออกเปิดการใช้งานโดยไม่จำเป็นต้องเรียกที่แตกต่างกันtrace_printf*
หรือtrace_performance*
ตามปกติ
ดูกระทำ a4d3a28 (21 มีนาคม 2019) โดยจอช Steadmon (steadmon
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 1b40314 , 8 พฤษภาคม 2019)
trace2
: เขียนไปยังเป้าหมายไดเรกทอรี
เมื่อค่าของตัวแปรสภาพแวดล้อม trace2 เป็นพา ธ สัมบูรณ์ที่อ้างถึงไดเร็กทอรีที่มีอยู่ให้เขียนเอาต์พุตไปยังไฟล์ (หนึ่งรายการต่อกระบวนการ) ภายใต้ไดเร็กทอรีที่กำหนด
ไฟล์จะถูกตั้งชื่อตามองค์ประกอบสุดท้ายของ trace2 SID ตามด้วยตัวนับเพื่อหลีกเลี่ยงการชนที่อาจเกิดขึ้น
สิ่งนี้ทำให้สะดวกกว่าในการรวบรวมการติดตามสำหรับการเรียก git ทุกครั้งโดยการตั้งค่าtrace2
envvar ที่เกี่ยวข้องให้เป็นชื่อไดเรกทอรีคงที่โดยไม่มีเงื่อนไข
ดูเพิ่มเติมกระทำ f672dee (29 เมษายน 2019) และกระทำ 81567ca , กระทำ 08881b9 , กระทำ bad229a , กระทำ 26c6f25 , กระทำ bce9db6 , กระทำ 800a7f9 , กระทำ a7bc01e , กระทำ 39f4317 , กระทำ a089724 , กระทำ 1703751 (15 เมษายน 2019) โดยเจฟฟ์ฮอสเท็ท ( jeffhostetler
) .
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 5b2d1c0 , 13 พฤษภาคม 2019)
เอกสารใหม่ในขณะนี้มีการตั้งค่าการกำหนดค่าที่มีการอ่านเท่านั้นจากระบบและ config ไฟล์ทั่วโลก (หมายถึงพื้นที่เก็บข้อมูล config ไฟล์ในท้องถิ่นและ worktree และ-c
อาร์กิวเมนต์บรรทัดคำสั่งจะไม่ได้รับความเคารพนับถือ.)
ตัวอย่าง :
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
อัตราผลตอบแทน
$ cat ~/log.normal
12:28:42.620009 common-main.c:38 version 2.20.1.155.g426c96fcdb
12:28:42.620989 common-main.c:39 start git version
12:28:42.621101 git.c:432 cmd_name version (version)
12:28:42.621215 git.c:662 exit elapsed:0.001227 code:0
12:28:42.621250 trace2/tr2_tgt_normal.c:124 atexit elapsed:0.001265 code:0
และสำหรับการวัดประสิทธิภาพ :
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
อัตราผลตอบแทน
$ cat ~/log.perf
12:28:42.620675 common-main.c:38 | d0 | main | version | | | | | 2.20.1.155.g426c96fcdb
12:28:42.621001 common-main.c:39 | d0 | main | start | | 0.001173 | | | git version
12:28:42.621111 git.c:432 | d0 | main | cmd_name | | | | | version (version)
12:28:42.621225 git.c:662 | d0 | main | exit | | 0.001227 | | | code:0
12:28:42.621259 trace2/tr2_tgt_perf.c:211 | d0 | main | atexit | | 0.001265 | | | code:0
ในฐานะที่เป็นเอกสารใน Git 2.23 (Q3 2019) GIT_TRACE2
ตัวแปรสภาพแวดล้อมในการใช้งาน
ดูกระทำ 6114a40 (26 มิถุนายน 2019) โดยคาร์โลมาร์เซโล Arenas Belon (carenas
)
ดูกระทำ 3efa1c6 (12 มิถุนายน 2019) โดยÆvar Arnfjord Bjarmason (avar
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ e9eaaa4 , 09 Jul 2019)
ที่เป็นไปตามงานที่ทำใน Git 2.22: กระทำ 4e0d3aa , กระทำ e4b75d6 (19 พฤษภาคม 2019) โดยSzeder Gábor (szeder
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 463dca6 , 30 พฤษภาคม 2019)
trace2
: เปลี่ยนชื่อตัวแปรสภาพแวดล้อมเป็น GIT_TRACE2 *
สำหรับตัวแปรสภาพแวดล้อมที่ผู้ใช้ควรตั้งค่า GIT_TR2*
env vars นั้นไม่ชัดเจนไม่สอดคล้องกันและน่าเกลียดเกินไป
ส่วนใหญ่ของการจัดตั้งGIT_*
ตัวแปรสภาพแวดล้อมที่ไม่ได้ใช้ตัวย่อและในกรณีที่ในไม่กี่คนที่ไม่ ( GIT_DIR
, GIT_COMMON_DIR
, GIT_DIFF_OPTS
) ก็ค่อนข้างชัดเจนในสิ่งที่ตัวย่อ ( DIR
และOPTS
) ยืน
แต่อะไรนะTR
ยืนหยัดเพื่อ? ติดตาม, แบบดั้งเดิม, ตัวอย่าง, ธุรกรรม, การโอน, การเปลี่ยนแปลง, การเปลี่ยน, การแปล, การปลูกถ่าย, การขนส่ง, การแวะผ่าน, ต้นไม้, ทริกเกอร์, การตัด, การตัดทอน, ความไว้วางใจหรือ ... ?!
สิ่งอำนวยความสะดวก trace2 ซึ่งเป็นคำต่อท้ายที่ '2' ในชื่อแนะนำควรจะเป็นที่สุดในการแทนที่สิ่งอำนวยความสะดวกการติดตามดั้งเดิมของ Git
ก็สมควรที่จะคาดหวังว่าตัวแปรสภาพแวดล้อมที่สอดคล้องตามเหมาะสมและหลังจากเดิมGIT_TRACE
ตัวแปรพวกเขาจะเรียกGIT_TRACE2
; ไม่มีสิ่งนั้นคือ 'GIT_TR
'
ตัวแปรการกำหนดค่าเฉพาะ trace2 ทั้งหมดนั้นสมเหตุสมผลในส่วน ' trace2
' ไม่ใช่ใน ' tr2
'
OTOH, เราไม่ได้รับอะไรเลยโดยเลี่ยงที่ผ่านมาสามตัวละครของ "ร่องรอย" จากชื่อของตัวแปรสภาพแวดล้อมเหล่านี้
ดังนั้นขอเปลี่ยนชื่อGIT_TR2*
ตัวแปรสภาพแวดล้อมทั้งหมดเป็นGIT_TRACE2*
, ก่อนที่พวกเขาจะเข้าสู่รีลีสที่เสถียร
Git 2.24 (Q3 2019) ปรับปรุงการเริ่มต้นพื้นที่เก็บข้อมูล Git
ดูกระทำ 22932d9 , กระทำ 5732f2b , กระทำ 58ebccb (6 สิงหาคม 2019) โดยเจฟฟ์คิง (peff
)
ผสานโดย Junio C Hamano - gitster
- in b4a1eec , 09 Sep 2019)
Common-main: การเริ่มต้นล่าช้า trace2
เราเริ่มต้นtrace2
ระบบในฟังก์ชั่น main () ทั่วไปเพื่อให้โปรแกรมทั้งหมด (แม้แต่ที่ไม่ใช่ builtins) จะเปิดใช้งานการติดตาม
แต่ trace2
เริ่มต้นมีน้ำหนักค่อนข้างหนักเนื่องจากเราต้องอ่านการกำหนดค่าบนดิสก์เพื่อตัดสินใจว่าจะติดตามหรือไม่
สิ่งนี้อาจทำให้เกิดการโต้ตอบที่ไม่คาดคิดกับการเริ่มต้นทั่วไปหลักอื่น ๆ ตัวอย่างเช่นเราจะสิ้นสุดในรหัสการกำหนดค่าก่อนโทรinitialize_the_repository()
และค่าคงที่ปกติที่the_repository
ไม่เคยมีค่า NULL จะไม่ถูกเก็บไว้
มาผลักกัน trace2
cmd_main()
เริ่มต้นต่อไปลงในการร่วมกันหลักจะมีเพียงก่อนที่เราจะดำเนินการ
Git 2.24 (Q4 2019) ช่วยให้มั่นใจได้ว่าเอาต์พุตจากtrace2
ระบบย่อยจะได้รับการจัดรูปแบบมากขึ้นในตอนนี้
ดูกระทำ 742ed63 , กระทำ e344305 , กระทำ c2b890a (9 สิงหาคม 2019) กระทำ ad43e37 , กระทำ 04f10d3 , กระทำ da4589c (8 สิงหาคม 2019) และกระทำ 371df1b (31 กรกฎาคม 2019) โดยเจฟฟ์ฮอสเท็ท (jeffhostetler
)
ผสานโดยJunio C Hamano - gitster
- in 93fc876 , 30 Sep 2019)
และยังคงเป็น Git 2.24
ดูกระทำ 87db61a , กระทำ 83e57b0 (4 ตุลาคม 2019) และกระทำ 2254101 , กระทำ 3d4548e (3 ตุลาคม 2019) โดยจอช Steadmon (steadmon
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ d0ce4d9 , 15 ตุลาคม 2019)
trace2
: ทิ้งการติดตามใหม่หากไดเรกทอรีเป้าหมายมีไฟล์มากเกินไป
ลงชื่อออกโดย: Josh Steadmon
trace2
สามารถเขียนไฟล์ลงในไดเรกทอรีเป้าหมาย
ด้วยการใช้งานจำนวนมากไดเรกทอรีนี้สามารถเติมไฟล์ได้ทำให้เกิดปัญหากับระบบประมวลผลการติดตาม
แพตช์นี้เพิ่มตัวเลือกtrace2.maxFiles
การกำหนดค่า( ) เพื่อตั้งค่าจำนวนไฟล์สูงสุดที่trace2
จะเขียนไปยังไดเรกทอรีเป้าหมาย
พฤติกรรมดังต่อไปนี้เปิดใช้งานเมื่อmaxFiles
ตั้งค่าเป็นจำนวนเต็มบวก:
สมมติฐานคือระบบการประมวลผลการติดตามแยกต่างหากกำลังจัดการกับการติดตามที่สร้างขึ้น เมื่อดำเนินการและลบไฟล์ Sentinel แล้วควรจะปลอดภัยในการสร้างไฟล์ติดตามใหม่อีกครั้ง
ค่าเริ่มต้นสำหรับtrace2.maxFiles
เป็นศูนย์ซึ่งปิดใช้งานการตรวจสอบการนับไฟล์
GIT_TRACE2_MAX_FILES
กำหนดค่ายังสามารถแทนที่ด้วยตัวแปรสภาพแวดล้อมใหม่
และ Git 2.24 (ไตรมาสที่ 4 ปี 2019) สอนการติดตาม 2 git push
ขั้นตอน
ดูกระทำ 25e4b80 , กระทำ 5fc3118 (2 ตุลาคม 2019) โดยจอช Steadmon (steadmon
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 3b9ec27 , 15 ตุลาคม 2019)
push
: เพิ่มเครื่องมือวัด trace2
ลงชื่อออกโดย: Josh Steadmon
เพิ่มภูมิภาค trace2 ในtransport.c
และbuiltin/push.c
เพื่อติดตามเวลาที่ใช้ในขั้นตอนต่าง ๆ ของการพุชที่ดีขึ้น:
- รายชื่ออ้างอิง
- กำลังตรวจสอบ submodules
- ผลักดัน submodules
- ผลักดันอ้างอิง
ด้วย Git 2.25 (ไตรมาสที่ 1 ปี 2020) บางส่วนDocumentation/technical
ถูกย้ายไปยัง*.h
ไฟล์ส่วนหัว
ดูกระทำ 6c51cb5 , กระทำ d95a77d , กระทำ bbcfa30 , กระทำ f1ecbe0 , กระทำ 4c4066d , กระทำ 7db0305 , กระทำ f3b9055 , กระทำ 971b1f2 , กระทำ 13aa9c8 , กระทำ c0be43f , กระทำ 19ef3dd ,กระทำ 301d595 , กระทำ 3a1b341 , กระทำ 126c1cc , กระทำ d27eb35 , กระทำ 405c6b1 , กระทำ d3d7172 , กระทำ 3f1480b , กระทำ 266f03e ,กระทำ 13c4d7e(17 พฤศจิกายน 2019) โดยHeba Waly (HebaWaly
)
(ผสานโดยJunio C Hamano - gitster
- in 26c816a , 16 Dec 2019)
trace2
: ย้ายเอกสารไปที่ trace2.h
ลงชื่อออกโดย: Heba Waly
ย้ายเอกสารประกอบฟังก์ชั่นจากDocumentation/technical/api-trace2.txt
ไปเพื่อให้trace2.h
ง่ายขึ้นสำหรับนักพัฒนาในการค้นหาข้อมูลการใช้งานด้านข้างรหัสแทนที่จะมองหามันในไฟล์ doc อื่น
เฉพาะส่วนของฟังก์ชั่นเอกสารเท่านั้นที่จะถูกลบออกDocumentation/technical/api-trace2.txt
เนื่องจากไฟล์เต็มไปด้วยรายละเอียดที่ดูเหมือนจะเหมาะสมกว่าที่จะอยู่ในไฟล์ doc แยกต่างหากเหมือนเดิมโดยมีลิงก์ไปยังไฟล์ doc ที่เพิ่มเข้าไปใน trace2.h นอกจากนี้ยังมีการลบฟังก์ชั่น doc เพื่อหลีกเลี่ยงการมีข้อมูลซ้ำซ้อนซึ่งยากต่อการซิงค์กับเอกสารในไฟล์ส่วนหัว
(แม้ว่าการปรับโครงสร้างองค์กรที่มีผลข้างเคียงในคำสั่งอื่นอธิบายและการแก้ไขด้วย Git 2.25.2 (มีนาคม 2020) ในการกระทำ cc4f2eb (14 กุมภาพันธ์ 2020) โดยเจฟฟ์คิง (peff
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 1235384 , 17 ก.พ. 2020) )
ด้วย Git 2.27 (Q2 2020): การปรับปรุง Trace2 เพื่อให้สามารถบันทึกตัวแปรสภาพแวดล้อมได้
ดูกระทำ 3d3adaa (20 มีนาคม 2020) โดยจอช Steadmon (steadmon
)
(ผสานโดยJunio C Hamano -gitster
-ในการกระทำ 810dc64 , 22 Apr 2020)
trace2
: สอน Git เพื่อบันทึกตัวแปรสภาพแวดล้อม
ลงชื่อออกโดย: Josh Steadmon
ตอบโดย: Jeff Hostetler
ผ่าน trace2 Git สามารถบันทึกพารามิเตอร์การตั้งค่าที่น่าสนใจได้แล้ว (ดูtrace2_cmd_list_config()
ฟังก์ชัน) อย่างไรก็ตามสิ่งนี้สามารถให้รูปภาพที่ไม่สมบูรณ์เนื่องจากพารามิเตอร์การตั้งค่าหลายตัวยังอนุญาตการแทนที่ผ่านตัวแปรสภาพแวดล้อม
เพื่อเพิ่มการบันทึกที่สมบูรณ์ยิ่งขึ้นเราได้เพิ่มtrace2_cmd_list_env_vars()
ฟังก์ชั่นใหม่และรองรับการนำไปใช้งานซึ่งจำลองตามการดำเนินการบันทึกการกำหนดค่าพารามิเตอร์ล่วงหน้าที่มีอยู่แล้ว
ด้วย Git 2.27 (Q2 2020) สอน codepaths ที่แสดงมิเตอร์วัดความคืบหน้าเพื่อใช้การติดตามstart_progress()
และการstop_progress()
โทรเป็น " region
" เพื่อติดตาม
ดูกระทำ 98a1364 (12 พฤษภาคม 2020) โดยเอมิลี่ Shaffer (nasamuffin
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ d98abce , 14 พฤษภาคม 2020)
trace2
: บันทึกเวลาดำเนินการและปริมาณงาน
ลงชื่อออกโดย: Emily Shaffer
แทนที่จะสอนเพียงหนึ่งการดำเนินการเช่น ' git fetch
' วิธีการเขียนทรูพุตเพื่อติดตามเราสามารถเรียนรู้เกี่ยวกับการดำเนินงานของผู้ใช้ที่หลากหลายซึ่งอาจดูเหมือนช้าโดยการเพิ่มเครื่องมือลงในไลบรารีความคืบหน้าของตัวเองที่เราสามารถเรียนรู้เกี่ยวกับความหลากหลายของการดำเนินงานของผู้ใช้ที่อาจดูเหมือนช้าโดยการเพิ่มการขับรถไปยังคลังความคืบหน้าของตัวเอง
การดำเนินการที่แสดงความคืบหน้ามีแนวโน้มที่จะทำงานช้าและสิ่งที่เราต้องการตรวจสอบเพื่อประสิทธิภาพการทำงานต่อไป
โดยการแสดงจำนวนวัตถุและขนาดการถ่ายโอนข้อมูลเราควรสามารถทำการวัดบางส่วนที่ได้รับเพื่อให้มั่นใจว่าการปฏิบัติงานมีการปรับขนาดตามที่เราคาดหวัง
และ:
ด้วย Git 2.27 (Q2 2020) การแก้ไขในนาทีสุดท้ายสำหรับการเปลี่ยนแปลงล่าสุดของเราเพื่ออนุญาตให้ใช้ API ความคืบหน้าเป็นภูมิภาคที่ตรวจสอบได้
ดูกระทำ 3af029c (15 พฤษภาคม 2020) โดยปั้นจั่น Stolee (derrickstolee
)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 85d6e28 , 20 พฤษภาคม 2020)
progress
: โทรtrace2_region_leave()
หลังจากโทรแล้วเท่านั้น_enter()
ลงชื่อออกโดย: Derrick Stolee
ผู้ใช้ของความคืบหน้า API โทรตามstart_progress()
เงื่อนไขและขึ้นอยู่กับdisplay_progress()
และstop_progress()
ฟังก์ชั่นที่จะกลายเป็นไม่มีเมื่อstart_progress()
ไม่ได้ถูกเรียก
เมื่อเราเพิ่มการเรียกไปยังการเรียกไปtrace2_region_enter()
ยังstart_progress()
การเรียก trace2 API อื่น ๆ จากฟังก์ชั่นความคืบหน้าของ API ต้องทำให้แน่ใจว่าการโทร trace2 เหล่านี้ถูกข้ามไปเมื่อstart_progress()
ไม่ได้ถูกเรียกบนโครงสร้างความคืบหน้า
โดยเฉพาะไม่ได้เรียกtrace2_region_leave()
จากstop_progress()
เมื่อเราไม่ได้เรียกว่าซึ่งจะเรียกว่าการจับคู่start_progress()
trace2_region_enter()
GIT_CURL_VERBOSE
คุณจะมีกับ GitGIT_TRACE_CURL
2.9.x ดูคำตอบของฉันด้านล่าง