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 ทุกครั้งโดยการตั้งค่าtrace2envvar ที่เกี่ยวข้องให้เป็นชื่อไดเรกทอรีคงที่โดยไม่มีเงื่อนไข
ดูเพิ่มเติมกระทำ 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 จะไม่ถูกเก็บไว้
มาผลักกัน trace2cmd_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_CURL2.9.x ดูคำตอบของฉันด้านล่าง