ฉันจะดีบักปัญหาที่เกี่ยวข้องกับ git / git-shell ได้อย่างไร


148

ฉันจะมีข้อมูลการดีบักเกี่ยวกับ git / git-shell ได้อย่างไร?

ฉันมีปัญหาที่user1สามารถโคลนพื้นที่เก็บข้อมูลโดยไม่มีปัญหาในขณะที่user2สามารถโคลนเพียงหนึ่งที่ว่างเปล่า ฉันได้ตั้งค่าไว้GIT_TRACE=1แต่ก็ไม่ได้บอกว่ามีประโยชน์อะไร

ในที่สุดหลังจากการลองผิดลองถูกมานานปรากฎว่าเป็นปัญหาในการอนุญาตไฟล์ ข้อผิดพลาดที่เหมาะสมสามารถลัดวงจรปัญหานี้


หมายเหตุ: ในการเพิ่มของGIT_CURL_VERBOSEคุณจะมีกับ Git GIT_TRACE_CURL2.9.x ดูคำตอบของฉันด้านล่าง
VonC

และ (Q2 2019 สามปีหลังจากGIT_TRACE_CURL) trace2ขณะนี้คุณมี ตัวอย่าง: git config --global trace2.normalTarget ~/log.normal. ดู(ใหม่) คำตอบที่ด้านล่างของฉัน
VonC

คำตอบ:


212

สำหรับเอาต์พุต verbose ที่มากยิ่งขึ้นใช้ต่อไปนี้:

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master


53
มีตัวเลือก GIT_TRACE สองสามตัวนอกเหนือจากตัวเลือกหลัก นี่คือตัวเลือกüber-verbose:set -x; GIT_TRACE=2 GIT_CURL_VERBOSE=2 GIT_TRACE_PERFORMANCE=2 GIT_TRACE_PACK_ACCESS=2 GIT_TRACE_PACKET=2 GIT_TRACE_PACKFILE=2 GIT_TRACE_SETUP=2 GIT_TRACE_SHALLOW=2 git pull origin master -v -v; set +x
Paul Irish

2
จะตั้งค่าตัวแปรนี้ได้อย่างไรและอย่างไร?
Hunsu

นั่นเป็นเพียงบรรทัดทั้งหมดที่คุณสามารถวางลงในเทอร์มินัลของคุณ คุณควรแทนที่git pull origin masterส่วนด้วยคำสั่งที่คุณต้องการดำเนินการ
Aeolun

1
แพลตฟอร์มนี้ใช้งานได้กับอะไร ไม่ใช่ Windows อย่างแน่นอน
ประสานงาน

8
บน Windows คุณสามารถตั้งค่าตัวแปรเหล่านี้ทีละตัว (หนึ่งตัวต่อบรรทัด) เช่นนี้:set GIT_CURL_VERBOSE=1 set GIT_TRACE=1 git pull origin master
ประสานงาน

85

แก้จุดบกพร่อง

Git มีชุดร่องรอยที่ฝังอยู่ค่อนข้างสมบูรณ์ซึ่งคุณสามารถใช้เพื่อแก้ไขข้อบกพร่องของคอมไพล์

ในการเปิดใช้คุณสามารถกำหนดตัวแปรต่อไปนี้:

  • GIT_TRACE สำหรับร่องรอยทั่วไป
  • GIT_TRACE_PACK_ACCESS สำหรับการติดตามการเข้าถึง packfile
  • GIT_TRACE_PACKET สำหรับการติดตามระดับแพ็กเก็ตสำหรับการดำเนินงานเครือข่าย
  • GIT_TRACE_PERFORMANCE สำหรับการบันทึกข้อมูลประสิทธิภาพ
  • GIT_TRACE_SETUP สำหรับข้อมูลเกี่ยวกับการค้นหาพื้นที่เก็บข้อมูลและสภาพแวดล้อมที่มีการโต้ตอบกับ
  • GIT_MERGE_VERBOSITY สำหรับการแก้จุดบกพร่องกลยุทธ์เวียนเวียน (ค่า: 0-5)
  • GIT_CURL_VERBOSEสำหรับการบันทึกข้อความ curl ทั้งหมด (เทียบเท่าcurl -v)
  • GIT_TRACE_SHALLOW สำหรับการดีบั๊กการดึง / การโคลนที่เก็บตื้น

ค่าที่เป็นไปได้ ได้แก่ :

  • true, 1หรือ2การเขียนไปยัง stderr,
  • พา ธ สัมบูรณ์ที่ขึ้นต้นด้วย/เพื่อติดตามเอาต์พุตไปยังไฟล์ที่ระบุ

ดูรายละเอียดเพิ่มเติมได้ที่Git Internals - ตัวแปรสภาพแวดล้อม


SSH

สำหรับปัญหา SSH ลองคำสั่งต่อไปนี้:

echo 'ssh -vvv "$*"' > ssh && chmod +x ssh
GIT_SSH="$PWD/ssh" git pull origin master

หรือใช้sshเพื่อตรวจสอบข้อมูลรับรองของคุณเช่น

ssh -vvvT git@github.com

หรือผ่านพอร์ต HTTPS:

ssh -vvvT -p 443 git@ssh.github.com

หมายเหตุ: ลดจำนวนของ-vเพื่อลดระดับการฟุ่มเฟื่อย


ตัวอย่าง

$ GIT_TRACE=1 git status
20:11:39.565701 git.c:350               trace: built-in: git 'status'

$ GIT_TRACE_PERFORMANCE=$PWD/gc.log git gc
Counting objects: 143760, done.
...
$ head gc.log 
20:12:37.214410 trace.c:420             performance: 0.090286000 s: git command: 'git' 'pack-refs' '--all' '--prune'
20:12:37.378101 trace.c:420             performance: 0.156971000 s: git command: 'git' 'reflog' 'expire' '--all'
...

$ GIT_TRACE_PACKET=true git pull origin master
20:16:53.062183 pkt-line.c:80           packet:        fetch< 93eb028c6b2f8b1d694d1173a4ddf32b48e371ce HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed symref=HEAD:refs/heads/master agent=git/2:2.6.5~update-ref-initial-update-1494-g76b680d
...

2
การเปลี่ยนecho 'ssh -vvv $*' > ssh && chmod +x sshเป็นecho 'ssh -vvv "$@"' > ssh && chmod +x sshควรปลอดภัยกว่าในกรณีที่มีขอบซึ่งพารามิเตอร์เดียวมีช่องว่าง
Alexander Bird


40

หากมีมากกว่า SSH คุณสามารถใช้สิ่งต่อไปนี้:

สำหรับระดับการดีบักที่สูงขึ้นสำหรับ type -vv หรือ -vvv สำหรับ debug ระดับ 2 และ 3 ตามลำดับ:

# Debug level 1
GIT_SSH_COMMAND="ssh -v" git clone <repositoryurl>

# Debug level 2
GIT_SSH_COMMAND="ssh -vv" git clone <repositoryurl>

# Debug level 3
GIT_SSH_COMMAND="ssh -vvv" git clone <repositoryurl>

สิ่งนี้มีประโยชน์เป็นหลักในการจัดการปัญหากุญแจสาธารณะและกุญแจส่วนตัวกับเซิร์ฟเวอร์ คุณสามารถใช้คำสั่งนี้สำหรับคำสั่ง git ใด ๆ ไม่เพียง 'git clone'


ใช่มันใช้งานได้ดี ดีกว่าคนอื่น ใช่มันใช้งานได้ดี ดีกว่าคนอื่น
BMW

นี่จะมีประโยชน์มากที่สุดเพราะฉันต้องแก้ไขปัญหาสำคัญในตอนนี้ แต่มันใช้ไม่ได้กับ git 1.8.3.1 และ OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 ก.พ. 2556 บน CentOS Linux รีลีส 7.2.1511 (หลัก) :(
Greg Dubicki

@GregDubicki แปลก แจ้งให้เราทราบว่าอะไรเหมาะกับคุณเพื่อที่ฉันจะได้อัพเดตคำตอบ
Basil Musa

1
ใน Windows ใช้set GIT_SSH_COMMAND=ssh -v(คำพูดไม่ได้)
jansohn

18

Git 2.9.x / 2.10 (Q3 2016) GIT_TRACE_CURLเพิ่มตัวเลือกการแก้ปัญหาอื่น:

ดูกระทำ 73e57aa , กระทำ 74c682d (23 พฤษภาคม 2016) โดยเอเลียปินโต (devzero2000 )
ช่วยโดย: Torsten Bögershausen ( tboegi) , แรมเซย์โจนส์Junio C Hamano ( gitster) , เอริคซันไชน์ ( sunshineco)และเจฟฟ์คิง (peff )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 2f84df2 , 6 กรกฎาคม 2016)

http.c: ใช้GIT_TRACE_CURLตัวแปรสภาพแวดล้อม

ใช้GIT_TRACE_CURLตัวแปรสภาพแวดล้อมเพื่ออนุญาตให้มีรายละเอียดมากขึ้นGIT_CURL_VERBOSEโดยเฉพาะอย่างยิ่งส่วนหัวการขนส่งที่สมบูรณ์และการแลกเปลี่ยนข้อมูลทั้งหมด
มันอาจมีประโยชน์หากสถานการณ์เฉพาะอาจต้องการการวิเคราะห์การดีบักอย่างละเอียดมากขึ้น

เอกสารจะระบุว่า:

GIT_TRACE_CURL

เปิดใช้งานการดัมพ์การติดตามแบบเต็มของ curl ของข้อมูลขาเข้าและขาออกทั้งหมดรวมถึงข้อมูลอธิบายของโปรโตคอลการขนส่ง git
สิ่งนี้คล้ายกับการทำcurl --trace-asciiบนบรรทัดคำสั่ง

ตัวเลือกนี้จะแทนที่การตั้งค่าGIT_CURL_VERBOSEตัวแปรสภาพแวดล้อม


คุณสามารถเห็นตัวเลือกใหม่ที่ใช้ในคำตอบนี้แต่ในการทดสอบ Git 2.11 (Q4 2016):

ดูกระทำ 14e2411 , กระทำ 81590bf , กระทำ 4527aa1 , กระทำ 4eee6c6 (7 กันยายน 2016) โดยเอเลียปินโต (devzero2000 )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 930b67e , 12 กันยายน 2016)

ใช้ใหม่GIT_TRACE_CURLตัวแปรสภาพแวดล้อมแทนการเลิกใช้ GIT_CURL_VERBOSE

GIT_TRACE_CURL=true git clone --quiet $HTTPD_URL/smart/repo.git

คุณสมบัตินี้ยอดเยี่ยม! จุดเดียวคือเอาท์พุท ASCII (ที่พวกเขาพิมพ์ทั้งหมดที่ไม่ได้(ch >= 0x20) && (ch < 0x80)เป็นจุด.) และไม่มีวิธีการของการส่งออกฐานสิบหกสำหรับข้อมูล http
kinORnirvana

8

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ตั้งค่าเป็นจำนวนเต็มบวก:

  • เมื่อtrace2จะเขียนไฟล์ไปยังไดเรกทอรีเป้าหมายก่อนอื่นให้ตรวจสอบว่าควรทิ้งร่องรอยหรือไม่ ควรทิ้งร่องรอยหาก:

    • มีไฟล์แมวมองที่ประกาศว่ามีไฟล์มากเกินไป
    • trace2.maxFilesหรือจำนวนของไฟล์เกิน
      ในกรณีหลังเราสร้างไฟล์แมวมองที่มีชื่อgit-trace2-discardเพื่อเพิ่มความเร็วในการตรวจสอบในอนาคต

สมมติฐานคือระบบการประมวลผลการติดตามแยกต่างหากกำลังจัดการกับการติดตามที่สร้างขึ้น เมื่อดำเนินการและลบไฟล์ 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()


4

คุณลองเพิ่มตัวดำเนินการ verbose ( -v) เมื่อคุณโคลนหรือไม่?

git clone -v git://git.kernel.org/pub/scm/.../linux-2.6 my2.6


2

สำหรับรุ่น git ที่เก่ากว่า (1.8 ขึ้นไป)

ฉันไม่พบวิธีที่เหมาะสมในการเปิดใช้งานการดีบัก SSHในเวอร์ชัน git และ ssh ที่เก่ากว่า ฉันค้นหาตัวแปรสภาพแวดล้อมโดยใช้ltrace -e getenv ...และไม่พบชุดค่าผสมของ GIT_TRACE หรือตัวแปร SSH_DEBUG ใด ๆ ที่สามารถใช้งานได้

นี่คือสูตรในการฉีด 'ssh -v' ลงในลำดับ git-> ssh ชั่วคราว:

$ echo '/usr/bin/ssh -v ${@}' >/tmp/ssh
$ chmod +x /tmp/ssh
$ PATH=/tmp:${PATH} git clone ...
$ rm -f /tmp/ssh

นี่คือผลลัพธ์จากรุ่น git 1.8.3พร้อม ssh รุ่นOpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 ก.พ. 2556โคลน repo github:

$ (echo '/usr/bin/ssh -v ${@}' >/tmp/ssh; chmod +x /tmp/ssh; PATH=/tmp:${PATH} \
   GIT_TRACE=1 git clone https://github.com/qneill/cliff.git; \
   rm -f /tmp/ssh) 2>&1 | tee log
trace: built-in: git 'clone' 'https://github.com/qneill/cliff.git'
trace: run_command: 'git-remote-https' 'origin' 'https://github.com/qneill/cliff.git'
Cloning into 'cliff'...
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /home/q.neill/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to github.com ...
...
Transferred: sent 4120, received 724232 bytes, in 0.2 seconds
Bytes per second: sent 21590.6, received 3795287.2
debug1: Exit status 0
trace: run_command: 'rev-list' '--objects' '--stdin' '--not' '--all'
trace: exec: 'git' 'rev-list' '--objects' '--stdin' '--not' '--all'
trace: built-in: git 'rev-list' '--objects' '--stdin' '--not' '--all'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.