Git 2.22 (Q2 2019) memperkenalkan trace2
dengan commit ee4512e oleh Jeff Hostetler :
trace2
: buat fasilitas jejak gabungan baru
Buat fasilitas penelusuran bersatu baru untuk git.
Tujuan akhirnya adalah untuk mengganti arus trace_printf*
dan trace_performance*
rutinitas dengan seperangkat git_trace2*
rutinitas terpadu .
Selain API gaya printf biasa, trace2
menyediakan verba peristiwa tingkat lebih tinggi dengan bidang tetap yang memungkinkan data terstruktur untuk ditulis.
Ini membuat pasca pemrosesan dan analisis lebih mudah untuk alat eksternal.
Trace2 mendefinisikan 3 target output.
Ini diatur menggunakan variabel lingkungan " GIT_TR2
", " GIT_TR2_PERF
", dan " GIT_TR2_EVENT
".
Ini dapat diatur ke "1" atau ke nama path absolut (seperti saat ini GIT_TRACE
).
Catatan: tentang nama variabel lingkungan, selalu gunakan GIT_TRACExxx
, bukan GIT_TRxxx
.
Jadi sebenarnya GIT_TRACE2
, GIT_TRACE2_PERF
atau GIT_TRACE2_EVENT
.
Lihat ganti nama Git 2.22 yang disebutkan kemudian di bawah ini.
Berikut ini adalah pekerjaan awal pada fitur penelusuran baru ini, dengan nama variabel lingkungan lama :
GIT_TR2
dimaksudkan untuk menjadi pengganti GIT_TRACE
dan mencatat data ringkasan perintah.
GIT_TR2_PERF
dimaksudkan sebagai pengganti GIT_TRACE_PERFORMANCE
.
Itu memperluas output dengan kolom untuk proses perintah, utas, repo, waktu absolut dan relatif berlalu. Ini melaporkan acara untuk mulai / berhenti proses anak, mulai / berhenti utas, dan fungsi fungsi per-utas.
GIT_TR2_EVENT
adalah format terstruktur baru. Itu menulis data acara sebagai serangkaian catatan JSON.
Panggilan untuk melacak fungsi2 masuk ke salah satu dari 3 target output yang diaktifkan tanpa perlu memanggil yang berbeda trace_printf*
atau trace_performance*
rutinitas.
Lihat commit a4d3a28 (21 Mar 2019) oleh Josh Steadmon ( steadmon
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 1b40314 , 08 Mei 2019)
trace2
: tulis ke target direktori
Ketika nilai variabel lingkungan trace2 adalah jalur absolut yang merujuk ke direktori yang ada, tulis output ke file (satu per proses) di bawah direktori yang diberikan.
File akan dinamai sesuai dengan komponen terakhir dari trace2 SID, diikuti oleh penghitung untuk menghindari potensi tabrakan.
Ini membuatnya lebih mudah untuk mengumpulkan jejak untuk setiap doa git dengan tanpa syarat mengatur trace2
envvar yang relevan ke nama direktori konstan.
Lihat juga komit f672dee (29 Apr 2019), dan komit 81567ca , komit 08881b9 , komit bad229a , komit 26c6f25 , komi bce9db6 , komit 800a7f9 , koma a7bc01e , komit 39f4317 , koma089724 , komi 1703751 ( komi 158 ) oleh Jeff Host jeffhostetler
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 5b2d1c0 , 13 Mei 2019)
The dokumentasi baru sekarang termasuk pengaturan konfigurasi yang hanya membaca dari sistem dan file konfigurasi global yang (berarti repositori file konfigurasi lokal dan worktree dan -c
argumen baris perintah tidak dihormati.)
Contoh :
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
hasil panen
$ 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
Dan untuk ukuran kinerja :
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
hasil panen
$ 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
Seperti yang didokumentasikan dalam Git 2.23 (Q3 2019), variabel lingkungan yang digunakan adalah GIT_TRACE2
.
Lihat komit 6114a40 (26 Jun 2019) oleh Carlo Marcelo Arenas Belón ( carenas
) .
Lihat komit 3efa1c6 (12 Jun 2019) oleh Ævar Arnfjörð Bjarmason ( avar
) .
(Digabung oleh Junio C Hamano - gitster
- di commit e9eaaa4 , 09 Jul 2019)
Itu mengikuti pekerjaan yang dilakukan di Git 2.22: commit 4e0d3aa , commit e4b75d6 (19 Mei 2019) oleh SZEDER Gábor ( szeder
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 463dca6 , 30 Mei 2019)
trace2
: ganti nama variabel lingkungan menjadi GIT_TRACE2 *
Untuk variabel lingkungan yang seharusnya diatur oleh pengguna, GIT_TR2*
env vars terlalu tidak jelas, tidak konsisten, dan jelek.
Sebagian besar didirikan GIT_*
variabel lingkungan tidak menggunakan singkatan, dan dalam kasus beberapa yang melakukan ( GIT_DIR
, GIT_COMMON_DIR
, GIT_DIFF_OPTS
) itu cukup jelas apa singkatan ( DIR
dan OPTS
) berdiri untuk.
Tapi apa artinya TR
? Lacak, tradisional, trailer, transaksi, transfer, transformasi, transisi, terjemahan, transplantasi, transportasi, traversal, pohon, pemicu, truncate, kepercayaan, atau ...?!
Fasilitas trace2, seperti akhiran '2' dalam namanya, seharusnya akhirnya menggantikan fasilitas jejak asli Git.
Masuk akal untuk mengharapkan bahwa variabel lingkungan yang sesuai mengikuti, dan setelah GIT_TRACE
variabel asli mereka dipanggil GIT_TRACE2
; tidak ada yang namanya ' GIT_TR
'.
Semua variabel konfigurasi trace2-spesifik, sangat masuk akal, di bagian ' trace2
', bukan di ' tr2
'.
OTOH, kami tidak mendapatkan apa-apa dengan menghilangkan tiga karakter terakhir dari "jejak" dari nama-nama variabel lingkungan ini .
Jadi mari kita ganti nama semua GIT_TR2*
variabel lingkungan menjadi GIT_TRACE2*
, sebelum mereka membuat jalannya menjadi rilis stabil.
Git 2.24 (Q3 2019) meningkatkan inisialisasi repositori Git.
Lihat komit 22932d9 , komit 5732f2b , komit 58ebccb (06 Agt 2019) oleh Jeff King ( peff
) .
(Digabung oleh Junio C Hamano -gitster
- di commit b4a1eec , 09 Sep 2019)
common-main: keterlambatan inisialisasi trace2
Kami menginisialisasi trace2
sistem dalam fungsi main () umum sehingga semua program (bahkan yang tidak dibangun) akan memungkinkan pelacakan.
Tapi trace2
startup relatif berat, karena kita harus benar-benar membaca konfigurasi pada disk untuk memutuskan apakah akan dilacak.
Ini dapat menyebabkan interaksi tak terduga dengan inisialisasi umum-utama lainnya. Misalnya, kita akan berakhir pada kode konfigurasi sebelum menelepon initialize_the_repository()
, dan invarian yang biasa yang the_repository
tidak pernah NULL tidak akan tahan.
Mari kita mendorong trace2
inisialisasi lebih jauh ke bawah pada common-main, tepat sebelum kita mengeksekusicmd_main()
.
Git 2.24 (Q4 2019) memastikan juga bahwa output dari trace2
subsistem diformat lebih baik sekarang.
Lihat komit 742ed63 , komit e344305 , komit c2b890a (09 Agustus 2019), komit ad43e37 , komit 04f10d3 , komit da4589c (08 agustus 2019), dan komit 371df1b (31 Jul 2019) oleh Jeff Hostetler ( jeffhostetler
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 93fc876 , 30 Sep 2019)
Dan, masih Git 2.24
Lihat komit 87db61a , komit 83e57b0 (04 Okt 2019), dan komit 2254101 , komit 3d4548e (03 Okt 2019) oleh Josh Steadmon ( steadmon
) .
(Digabung oleh Junio C Hamano - gitster
- di commit d0ce4d9 , 15 Okt 2019)
trace2
: buang jejak baru jika direktori target memiliki terlalu banyak file
Ditandatangani oleh: Josh Steadmon
trace2
dapat menulis file ke direktori target.
Dengan penggunaan yang berat, direktori ini dapat diisi dengan file, menyebabkan kesulitan untuk sistem pemrosesan jejak.
Patch ini menambahkan opsi konfigurasi ( trace2.maxFiles
) untuk mengatur jumlah maksimum file yang trace2
akan menulis ke direktori target.
Perilaku berikut ini diaktifkan ketika maxFiles
diatur ke bilangan bulat positif:
Asumsinya adalah bahwa sistem pengolahan jejak terpisah sedang berurusan dengan jejak yang dihasilkan; setelah memproses dan menghapus file sentinel, seharusnya aman untuk menghasilkan file jejak baru lagi.
Nilai default untuk trace2.maxFiles
adalah nol, yang menonaktifkan pemeriksaan jumlah file.
Config juga bisa ditimpa dengan variabel lingkungan baru: GIT_TRACE2_MAX_FILES
.
Dan Git 2.24 (Q4 2019) mengajarkan trace2 tentang git push
tahapan.
Lihat komit 25e4b80 , komit 5fc3118 (02 Okt 2019) oleh Josh Steadmon ( steadmon
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 3b9ec27 , 15 Okt 2019)
push
: tambahkan instrumentasi trace2
Ditandatangani oleh: Josh Steadmon
Tambahkan jejak2 wilayah transport.c
dan builtin/push.c
untuk melacak waktu yang lebih baik dihabiskan dalam berbagai fase mendorong:
- Daftar referensi
- Memeriksa submodula
- Mendorong submodula
- Mendorong referensi
Dengan Git 2.25 (Q1 2020), beberapa di antaranya Documentation/technical
dipindahkan ke *.h
file header .
Lihat komit 6c51cb5 , komit d95a77d , komit bbcfa30 , komit f1ecbe0 , komit 4c4066d , komit 7db0305 , komit f3b9055 , komit 971b1f2 , komit 13aa9c8 , komit c0be43f , komit 19ef3dd , komit 301d595 , komit 3a1b341 , komit 126c1cc , komit d27eb35 , komit 405c6b1 , komit d3d7172 , komit 3f1480b , komit 266f03e , komit 13c4d7e(17 Nov 2019) olehHeba Waly ( HebaWaly
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 26c816a , 16 Des 2019)
trace2
: pindahkan dokumen ke trace2.h
Ditandatangani oleh: Heba Waly
Pindahkan dokumentasi fungsi dari Documentation/technical/api-trace2.txt
ke trace2.h
karena lebih mudah bagi pengembang untuk menemukan informasi penggunaan di samping kode daripada mencarinya di file dokumen lain.
Hanya bagian dokumentasi fungsi yang dihapus Documentation/technical/api-trace2.txt
karena file penuh dengan detail yang sepertinya lebih sesuai untuk berada di file doc terpisah seperti apa adanya, dengan tautan ke file doc ditambahkan dalam trace2.h. Juga fungsi doc dihapus untuk menghindari redundandt info yang akan sulit untuk tetap disinkronkan dengan dokumentasi di file header.
(walaupun reorganisasi itu memiliki efek samping pada perintah lain, dijelaskan dan diperbaiki dengan Git 2.25.2 (Maret 2020) dalam komit cc4f2eb (14 Feb 2020) oleh Jeff King ( peff
) .
(Digabung oleh Junio C Hamano - gitster
- in commit 1235384 , 17 Feb 2020) )
Dengan Git 2.27 (Q2 2020): Trace2 enhancement untuk memungkinkan logging variabel lingkungan .
Lihat commit 3d3adaa (20 Mar 2020) oleh Josh Steadmon ( steadmon
) .
(Digabung oleh Junio C Hamano - gitster
- dalam commit 810dc64 , 22 Apr 2020)
trace2
: ajarkan Git untuk mencatat variabel lingkungan
Ditandatangani oleh: Josh Steadmon
Steadmon Acked-oleh: Jeff Hostetler
Melalui trace2, Git sudah dapat mencatat parameter konfigurasi yang menarik (lihat trace2_cmd_list_config()
fungsinya). Namun, ini dapat memberikan gambar yang tidak lengkap karena banyak parameter konfigurasi juga memungkinkan penggantian melalui variabel lingkungan.
Untuk memungkinkan log yang lebih lengkap, kami menambahkan trace2_cmd_list_env_vars()
fungsi baru dan mendukung implementasi, dimodelkan setelah implementasi logging konfigurasi config yang sudah ada.
Dengan Git 2.27 (Q2 2020), ajarkan codepath yang menunjukkan meteran untuk juga menggunakan start_progress()
dan stop_progress()
panggilan sebagai " region
" yang akan dilacak.
Lihat komit 98a1364 (12 Mei 2020) oleh Emily Shaffer ( nasamuffin
) .
(Digabung oleh Junio C Hamano - gitster
- dalam commit d98abce , 14 Mei 2020)
trace2
: mencatat waktu proses dan throughput
Ditandatangani oleh: Emily Shaffer
Daripada mengajar hanya satu operasi, seperti ' git fetch
', bagaimana menuliskan throughput ke jejak, kita bisa belajar tentang berbagai operasi pengguna yang mungkin tampak lambat dengan menambahkan alat ke perpustakaan kemajuan itu sendiri .
Operasi yang menampilkan kemajuan cenderung berjalan lambat dan hal-hal yang ingin kita pantau untuk kinerja.
Dengan menunjukkan jumlah objek dan ukuran transfer data, kita harus dapat membuat beberapa pengukuran turunan untuk memastikan operasi scaling seperti yang kita harapkan.
Dan:
Dengan Git 2.27 (Q2 2020), perbaikan menit terakhir untuk perubahan terbaru kami untuk memungkinkan penggunaan API kemajuan sebagai wilayah yang dapat dilacak.
Lihat komit 3af029c (15 Mei 2020) oleh Derrick Stolee ( derrickstolee
) .
(Digabung oleh Junio C Hamano - gitster
- dalam komit 85d6e28 , 20 Mei 2020)
progress
: panggil trace2_region_leave()
hanya setelah menelepon_enter()
Ditandatangani oleh: Derrick Stolee
Seorang pengguna API kemajuan memanggil secara start_progress()
kondisional dan bergantung pada display_progress()
dan stop_progress()
fungsinya untuk menjadi no-op ketika start_progress()
belum dipanggil.
Seperti kita menambahkan panggilan untuk trace2_region_enter()
untuk start_progress()
, panggilan ke lain panggilan Trace2 API dari fungsi kemajuan API harus memastikan bahwa panggilan Trace2 ini dilewati saatstart_progress()
belum meminta kemajuan struct.
Secara khusus, jangan menelepon trace2_region_leave()
dari stop_progress()
saat kami belum menelepon start_progress()
, yang akan disebut pencocokan trace2_region_enter()
.
GIT_CURL_VERBOSE
, Anda harus menggunakan Git 2.9.x / 2.10GIT_TRACE_CURL
. Lihat jawaban saya di bawah ini .