Git 2.22 (quý 2 năm 2019) giới thiệu trace2
với cam kết ee4512e của Jeff Hostetler :
trace2
: tạo cơ sở theo dõi kết hợp mới
Tạo một cơ sở truy tìm thống nhất mới cho git.
Mục đích cuối cùng là thay thế các hiện tại trace_printf*
và trace_performance*
các thói quen bằng một tập hợp các git_trace2*
thói quen thống nhất .
Ngoài API kiểu printf thông thường, trace2
cung cấp các động từ sự kiện ở cấp độ higer với các trường cố định cho phép ghi dữ liệu có cấu trúc.
Điều này làm cho xử lý hậu kỳ và phân tích dễ dàng hơn cho các công cụ bên ngoài.
Trace2 xác định 3 mục tiêu đầu ra.
Chúng được đặt bằng các biến môi trường " GIT_TR2
", " GIT_TR2_PERF
" và " GIT_TR2_EVENT
".
Chúng có thể được đặt thành "1" hoặc thành một tên đường dẫn tuyệt đối (giống như hiện tại GIT_TRACE
).
Lưu ý: liên quan đến tên biến môi trường, luôn luôn sử dụng GIT_TRACExxx
, không GIT_TRxxx
.
Vì vậy, thực sự GIT_TRACE2
, GIT_TRACE2_PERF
hoặc GIT_TRACE2_EVENT
.
Xem đổi tên Git 2.22 được đề cập sau đây.
Phần tiếp theo là công việc ban đầu về tính năng theo dõi mới này, với các tên biến môi trường cũ :
GIT_TR2
được dự định để thay thế GIT_TRACE
và ghi nhật ký dữ liệu tóm tắt lệnh.
GIT_TR2_PERF
được dự định để thay thế cho GIT_TRACE_PERFORMANCE
.
Nó mở rộng đầu ra với các cột cho quá trình lệnh, luồng, repo, thời gian trôi qua tuyệt đối và tương đối. Nó báo cáo các sự kiện cho quá trình con bắt đầu / dừng, bắt đầu / dừng luồng và lồng chức năng trên mỗi luồng.
GIT_TR2_EVENT
là một định dạng có cấu trúc mới. Nó viết dữ liệu sự kiện dưới dạng một loạt các bản ghi JSON.
Các lệnh gọi đến các hàm track2 ghi nhật ký vào bất kỳ 3 mục tiêu đầu ra nào được kích hoạt mà không cần phải gọi các thói quen trace_printf*
hoặc trace_performance*
thói quen khác nhau .
Xem cam kết a4d3a28 (21 tháng 3 năm 2019) của Josh Steadmon ( steadmon
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 1b40314 , ngày 08 tháng 5 năm 2019)
trace2
: ghi vào thư mục đích
Khi giá trị của biến môi trường track2 là một đường dẫn tuyệt đối tham chiếu đến một thư mục hiện có, ghi đầu ra vào các tệp (một cho mỗi quá trình) bên dưới thư mục đã cho.
Các tệp sẽ được đặt tên theo thành phần cuối cùng của dấu vết SID, theo sau là bộ đếm để tránh va chạm tiềm ẩn.
Điều này làm cho nó thuận tiện hơn để thu thập dấu vết cho mỗi lần gọi git bằng cách đặt vô điều kiện trace2
envvar có liên quan thành một tên thư mục không đổi.
Xem thêm cam kết f672dee (Tháng Tư 29, 2019), và cam kết 81567ca , cam kết 08881b9 , cam kết bad229a , cam kết 26c6f25 , cam kết bce9db6 , cam kết 800a7f9 , cam kết a7bc01e , cam kết 39f4317 , cam kết a089724 , cam 1.703.751 (15 tháng tư năm 2019) bởi Jeff Hostetler ( jeffhostetler
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 5b2d1c0 , ngày 13 tháng 5 năm 2019)
Các tài liệu mới hiện nay bao gồm các thiết lập cấu hình mà chỉ được đọc từ hệ thống và các tập tin cấu hình toàn cầu (có nghĩa là kho lưu trữ tập tin cấu hình địa phương và worktree và -c
đối số dòng lệnh không được tôn trọng.)
Ví dụ :
$ git config --global trace2.normalTarget ~/log.normal
$ git version
git version 2.20.1.155.g426c96fcdb
sản lượng
$ 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
Và để đo lường hiệu suất :
$ git config --global trace2.perfTarget ~/log.perf
$ git version
git version 2.20.1.155.g426c96fcdb
sản lượng
$ 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
Như tài liệu trong Git 2.23 (quý 3 năm 2019), biến môi trường cần sử dụng là GIT_TRACE2
.
Xem cam kết 6114a40 (ngày 26 tháng 6 năm 2019) của Carlo Marcelo Arenas Belón ( carenas
) .
Xem cam kết 3efa1c6 (12 tháng 6 năm 2019) của Ævar Arnfjorð Bjarmason ( avar
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết e9eaaa4 , ngày 09 tháng 7 năm 2019)
Điều đó diễn ra sau công việc được thực hiện trong Git 2.22: commit 4e0d3aa , commit e4b75d6 (19 tháng 5 năm 2019) bởi SZEDER Gábor ( szeder
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 463dca6 , ngày 30 tháng 5 năm 2019)
trace2
: đổi tên biến môi trường thành GIT_TRACE2 *
Đối với một biến môi trường được cho là do người dùng đặt, GIT_TR2*
env vars quá không rõ ràng, không nhất quán và xấu.
Hầu hết các thiết lập GIT_*
biến môi trường không sử dụng từ viết tắt, và trong trường hợp trong số ít mà làm ( GIT_DIR
, GIT_COMMON_DIR
, GIT_DIFF_OPTS
) nó khá rõ ràng những gì các chữ viết tắt ( DIR
và OPTS
) tượng trưng.
Nhưng những gì TR
đứng cho? Theo dõi, truyền thống, trailer, giao dịch, chuyển nhượng, chuyển đổi, chuyển đổi, dịch thuật, cấy ghép, vận chuyển, truyền tải, cây, kích hoạt, cắt ngắn, tin tưởng, hoặc ...?!
Cơ sở dấu vết, như hậu tố '2' trong tên của nó cho thấy, cuối cùng được cho là sẽ thay thế cơ sở theo dõi ban đầu của Git.
Thật hợp lý khi hy vọng rằng các biến môi trường tương ứng tuân theo và sau các GIT_TRACE
biến ban đầu chúng được gọi GIT_TRACE2
; không có chuyện đó đâuGIT_TR
'.
Tất cả các biến cấu hình dành riêng cho dấu vết là, rất hợp lý, trong phần ' trace2
', không phải trong ' tr2
'.
OTOH, chúng tôi không đạt được bất cứ điều gì cả bằng cách bỏ qua ba ký tự cuối cùng của "dấu vết" từ tên của các biến môi trường này .
Vì vậy, hãy đổi tên tất cả các GIT_TR2*
biến môi trường thành GIT_TRACE2*
, trước khi chúng được phát hành ổn định.
Git 2.24 (Q3 2019) cải thiện việc khởi tạo kho Git.
Xem cam kết 22932d9 , cam kết 5732f2b , cam kết 58ebccb (06 tháng 8 năm 2019) của Jeff King ( peff
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết b4a1eec , ngày 09 tháng 9 năm 2019)
common-main: trì hoãn khởi tạo dấu vết2
Chúng tôi khởi tạo trace2
hệ thống trong hàm main () chung để tất cả các chương trình (ngay cả những chương trình không tích hợp) sẽ cho phép theo dõi.
Nhưng trace2
khởi động tương đối nặng, vì chúng ta phải thực sự đọc cấu hình trên đĩa để quyết định có theo dõi hay không.
Điều này có thể gây ra các tương tác bất ngờ với khởi tạo chính-chung khác. Chẳng hạn, chúng ta sẽ kết thúc mã cấu hình trước khi gọi initialize_the_repository()
và bất biến thông thường the_repository
không bao giờ là NULL sẽ không giữ.
Chúng ta hãy đẩy việc trace2
khởi tạo đi sâu hơn vào chung - chính, ngay trước khi chúng ta thực thi cmd_main()
.
Git 2.24 (Q4 2019) cũng đảm bảo rằng đầu ra từ trace2
hệ thống con được định dạng đẹp hơn bây giờ.
Xem cam kết 742ed63 , cam kết e344305 , cam kết c2b890a (09 tháng 8 năm 2019), cam kết ad43e37 , cam kết 04f10d3 , cam kết da4589c (08 tháng 8 năm 2019) và cam kết 371df1b (31 tháng 7 năm 2019) của Jeff Hostetler ( jeffhostetler
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 93fc876 , ngày 30 tháng 9 năm 2019)
Và, vẫn là Git 2,24
Xem cam kết 87db61a , cam kết 83e57b0 (04 tháng 10 năm 2019) và cam kết 2254101 , cam kết 3d4548e (03 tháng 10 năm 2019) của Josh Steadmon ( steadmon
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết d0ce4d9 , ngày 15 tháng 10 năm 2019)
trace2
: loại bỏ dấu vết mới nếu thư mục đích có quá nhiều tệp
Đã ký tắt: Josh Steadmon
trace2
có thể ghi tập tin vào một thư mục đích.
Với việc sử dụng nhiều, thư mục này có thể lấp đầy các tệp, gây khó khăn cho các hệ thống xử lý theo dõi.
Bản vá này thêm tùy chọn cấu hình ( trace2.maxFiles
) để đặt số lượng tệp tối đa trace2
sẽ ghi vào thư mục đích.
Hành vi sau được bật khi maxFiles
được đặt thành số nguyên dương:
Giả định là một hệ thống xử lý dấu vết riêng biệt đang xử lý các dấu vết được tạo ra; một khi nó xử lý và loại bỏ tệp sentinel, nó sẽ an toàn để tạo lại các tệp theo dõi mới.
Giá trị mặc định trace2.maxFiles
là 0, vô hiệu hóa kiểm tra số lượng tập tin.
Cấu hình cũng có thể được ghi đè bằng một biến môi trường mới : GIT_TRACE2_MAX_FILES
.
Và Git 2.24 (Q4 2019) dạy track2 về các git push
giai đoạn.
Xem cam kết 25e4b80 , cam kết 5fc3118 (02 tháng 10 năm 2019) của Josh Steadmon ( steadmon
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 3b9ec27 , ngày 15 tháng 10 năm 2019)
push
: thêm thiết bị theo dõi2
Đã ký tắt: Josh Steadmon
Thêm các vùng theo dõi2 transport.c
và builtin/push.c
để theo dõi thời gian tốt hơn dành cho các giai đoạn đẩy khác nhau:
- Danh sách giới thiệu
- Kiểm tra mô đun con
- Đẩy mô đun con
- Đẩy ref
Với Git 2.25 (Q1 2020), một số tệp Documentation/technical
được chuyển sang *.h
tệp tiêu đề .
Xem cam kết 6c51cb5 , cam kết d95a77d , cam kết bbcfa30 , cam kết f1ecbe0 , cam kết 4c4066d , cam kết 7db0305 , cam kết f3b9055 , cam kết 971b1f2 , cam kết 13aa9c8 , cam kết c0be43f , cam kết 19ef3dd , cam kết 301d595 , cam kết 3a1b341 , cam kết 126c1cc , cam kết d27eb35 , cam kết 405c6b1 , cam kết d3d7172 , cam kết 3f1480b , cam kết 266f03e , cam kết 13c4d7e(17 tháng 11 năm 2019) bởiHeba Waly ( HebaWaly
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 26c816a , ngày 16 tháng 12 năm 2019)
trace2
: chuyển tài liệu sang trace2.h
Đã ký tắt: Heba Waly
Di chuyển tài liệu chức năng từ Documentation/technical/api-trace2.txt
để trace2.h
các nhà phát triển dễ dàng tìm thấy thông tin sử dụng bên cạnh mã thay vì tìm kiếm nó trong tệp tài liệu khác.
Chỉ phần tài liệu chức năng được xóa khỏi Documentation/technical/api-trace2.txt
vì tệp có đầy đủ các chi tiết có vẻ phù hợp hơn trong một tệp tài liệu riêng biệt, với một liên kết đến tệp tài liệu được thêm vào trong track2.h. Ngoài ra, tài liệu chức năng được loại bỏ để tránh có thông tin dự phòng, sẽ khó giữ được đồng bộ hóa với tài liệu trong tệp tiêu đề.
(mặc dù việc sắp xếp lại đó có tác dụng phụ đối với một lệnh khác, đã giải thích và sửa lỗi với Git 2.25.2 (tháng 3 năm 2020) trong cam kết cc4f2eb (14 tháng 2 năm 2020) bởi Jeff King ( peff
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 1235384 , ngày 17 tháng 2 năm 2020) )
Với Git 2.27 (Q2 2020): Tăng cường Trace2 để cho phép ghi nhật ký các biến môi trường .
Xem cam kết 3d3adaa (20 tháng 3 năm 2020) của Josh Steadmon ( steadmon
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 810dc64 , ngày 22 tháng 4 năm 2020)
trace2
: dạy Git để ghi lại các biến môi trường
Đã ký tắt: Josh Steadmon
Acked-by: Jeff Hostetler
Thông qua dấu vết 2, Git đã có thể đăng nhập các tham số cấu hình thú vị (xem trace2_cmd_list_config()
chức năng). Tuy nhiên, điều này có thể cấp một hình ảnh không đầy đủ vì nhiều tham số cấu hình cũng cho phép ghi đè thông qua các biến môi trường.
Để cho phép các bản ghi đầy đủ hơn, chúng tôi thêm một trace2_cmd_list_env_vars()
chức năng mới và hỗ trợ triển khai, được mô hình hóa sau khi thực hiện ghi nhật ký cấu hình param tồn tại trước đó.
Với Git 2.27 (quý 2 năm 2020), hãy dạy các mật mã hiển thị đồng hồ đo tiến độ cũng sử dụng start_progress()
các stop_progress()
cuộc gọi và "as region
" để được theo dõi.
Xem cam kết 98a1364 (12 tháng 5 năm 2020) của Emily Shaffer ( nasamuffin
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết d98abce , ngày 14 tháng 5 năm 2020)
trace2
: thời gian đăng nhập và thông lượng
Đã ký tắt: Emily Shaffer
Thay vì chỉ dạy một thao tác, như ' git fetch
', cách ghi thông lượng vào dấu vết, chúng ta có thể tìm hiểu về một loạt các thao tác người dùng có vẻ chậm bằng cách thêm công cụ vào chính thư viện tiến trình .
Các hoạt động hiển thị tiến trình có khả năng chạy chậm và là loại điều chúng tôi muốn theo dõi cho dù sao hiệu suất.
Bằng cách hiển thị số lượng đối tượng và kích thước truyền dữ liệu, chúng ta sẽ có thể thực hiện một số phép đo xuất phát để đảm bảo các hoạt động được mở rộng theo cách chúng ta mong đợi.
Và:
Với Git 2.27 (quý 2 năm 2020), bản sửa lỗi vào phút cuối cho thay đổi gần đây của chúng tôi để cho phép sử dụng API tiến trình như một khu vực có thể theo dõi.
Xem cam kết 3af029c (15 tháng 5 năm 2020) của Derrick Stolee ( derrickstolee
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 85d6e28 , ngày 20 tháng 5 năm 2020)
progress
: trace2_region_leave()
chỉ gọi sau khi gọi_enter()
Đã ký tắt: Derrick Stolee
Người dùng API tiến trình gọi có start_progress()
điều kiện và phụ thuộc vào display_progress()
và các stop_progress()
chức năng để trở thành không hoạt động khi start_progress()
chưa được gọi.
Như chúng tôi đã thêm một cuộc gọi đến trace2_region_enter()
để start_progress()
, các cuộc gọi đến các cuộc gọi trace2 API khác từ các hàm API tiến bộ phải đảm bảo rằng các cuộc gọi trace2 là bỏ qua khi start_progress()
chưa được kêu gọi struct tiến bộ.
Cụ thể, không gọi trace2_region_leave()
từ stop_progress()
khi chúng tôi chưa gọi start_progress()
, mà sẽ gọi là khớp trace2_region_enter()
.
GIT_CURL_VERBOSE
, bạn sẽ có Git 2.9.x / 2.10GIT_TRACE_CURL
. Xem câu trả lời của tôi dưới đây .