Làm thế nào tôi có thể gỡ lỗi các vấn đề liên quan đến git / git-shell?


148

Làm thế nào tôi có thể có một số thông tin gỡ lỗi liên quan đến git / git-shell?

Tôi có một vấn đề, đó user1có thể sao chép một kho lưu trữ mà không gặp vấn đề gì, trong khi user2chỉ có thể sao chép một kho trống. Tôi đã thiết lập GIT_TRACE=1, nhưng không có gì hữu ích được nói.

Cuối cùng, sau một thời gian dài thử nghiệm và sai sót, hóa ra đó là vấn đề về quyền trên một tệp. Một thông báo lỗi thích hợp có thể làm chập mạch vấn đề này.


Lưu ý: ngoài ra GIT_CURL_VERBOSE, bạn sẽ có Git 2.9.x / 2.10 GIT_TRACE_CURL. Xem câu trả lời của tôi dưới đây .
VonC

Và (quý 2 năm 2019, ba năm sau GIT_TRACE_CURL), giờ bạn đã có trace2. Ví dụ : git config --global trace2.normalTarget ~/log.normal. Xem câu trả lời (mới) của tôi dưới đây .
VonC

Câu trả lời:


212

Để biết thêm đầu ra dài dòng hơn, hãy sử dụng như sau:

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master


53
Có một vài tùy chọn GIT_TRACE, ngoài tùy chọn cốt lõi. Đây là tùy chọn ü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
Làm thế nào và ở đâu để thiết lập các biến này?
Hunsu

Đó chỉ là toàn bộ dòng bạn có thể dán vào thiết bị đầu cuối của mình. Bạn nên thay thế git pull origin masterphần bằng lệnh bạn muốn thực thi.
Aeolun

1
Những nền tảng này làm việc trên? Chắc chắn không phải Windows.
chăn bò

8
Trên Windows, bạn có thể đặt các biến này, từng biến một (một trên mỗi dòng), như sau:set GIT_CURL_VERBOSE=1 set GIT_TRACE=1 git pull origin master
cowlinator 14/11/17

85

Gỡ lỗi

Git có một bộ dấu vết khá đầy đủ được nhúng mà bạn có thể sử dụng để gỡ lỗi các vấn đề về git của mình.

Để bật chúng, bạn có thể xác định các biến sau:

  • GIT_TRACE cho dấu vết chung,
  • GIT_TRACE_PACK_ACCESS để truy tìm packfile,
  • GIT_TRACE_PACKET để theo dõi cấp gói cho các hoạt động mạng,
  • GIT_TRACE_PERFORMANCE để ghi dữ liệu hiệu suất,
  • GIT_TRACE_SETUP để biết thông tin về việc khám phá kho lưu trữ và môi trường mà nó tương tác với,
  • GIT_MERGE_VERBOSITY để gỡ lỗi chiến lược hợp nhất đệ quy (giá trị: 0-5),
  • GIT_CURL_VERBOSEđể ghi nhật ký tất cả các tin nhắn curl (tương đương curl -v),
  • GIT_TRACE_SHALLOW để gỡ lỗi tìm nạp / nhân bản các kho lưu trữ nông.

Các giá trị có thể có thể bao gồm:

  • true, 1Hoặc 2viết thư cho stderr,
  • một đường dẫn tuyệt đối bắt đầu bằng /để theo dõi đầu ra cho tệp được chỉ định.

Để biết thêm chi tiết, xem: Git Internals - Biến môi trường


SSH

Đối với các sự cố SSH, hãy thử các lệnh sau:

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

hoặc sử dụng sshđể xác thực thông tin đăng nhập của bạn, ví dụ:

ssh -vvvT git@github.com

hoặc qua cổng HTTPS:

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

Lưu ý: Giảm số lượng -vđể giảm mức độ chi tiết.


Ví dụ

$ 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
Thay đổi echo 'ssh -vvv $*' > ssh && chmod +x sshthành echo 'ssh -vvv "$@"' > ssh && chmod +x sshsẽ an toàn hơn trong trường hợp cạnh trong đó một tham số duy nhất có khoảng trắng trong đó.
Alexander Bird

46

Hãy thử cái này:

GIT_TRACE=1 git pull origin master

40

Nếu nó qua SSH, bạn có thể sử dụng như sau:

Đối với mức gỡ lỗi cao hơn cho loại -vv hoặc -vvv cho mức gỡ lỗi cấp 2 và 3 tương ứng:

# 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>

Điều này chủ yếu hữu ích để xử lý các vấn đề khóa công khai và riêng tư với máy chủ. Bạn có thể sử dụng lệnh này cho bất kỳ lệnh git nào, không chỉ 'git clone'.


Vâng, điều này hoạt động hoàn hảo. Tốt hơn những người khác. Vâng, điều này hoạt động hoàn hảo. Tốt hơn những người khác.
BMW

Điều này sẽ hữu ích nhất vì tôi phải giải quyết một vấn đề chính bây giờ, nhưng nó không hoạt động với tôi với git 1.8.3.1 và OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 tháng 2 năm 2013 trên phiên bản CentOS Linux 7.2.1511 (Cốt lõi). :(
Greg Dubicki

@GregDubicki Lạ. Hãy cho tôi biết những gì làm việc cho bạn để tôi có thể cập nhật câu trả lời.
Basil Musa

1
Trên Windows sử dụng set GIT_SSH_COMMAND=ssh -v(không có dấu ngoặc kép).
jansohn

18

Git 2.9.x / 2.10 (quý 3 năm 2016) thêm một tùy chọn gỡ lỗi khác: GIT_TRACE_CURL .

Xem cam kết 73e57aa , cam kết 74c682d (ngày 23 tháng 5 năm 2016) của Elia Pinto ( devzero2000) .
Được giúp đỡ: Torsten Bögershausen ( tboegi) , Ramsay Jones, Junio ​​C Hamano ( gitster) , Eric Sunshine ( sunshineco)Jeff King ( peff) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết 2f84df2 , ngày 06 tháng 7 năm 2016)

http.c: thực hiện GIT_TRACE_CURLbiến môi trường

Thực hiện GIT_TRACE_CURLbiến môi trường để cho phép mức độ chi tiết cao hơn GIT_CURL_VERBOSE, đặc biệt là tiêu đề vận chuyển hoàn chỉnh và tất cả các tải trọng dữ liệu được trao đổi.
Nó có thể hữu ích nếu một tình huống cụ thể có thể yêu cầu phân tích gỡ lỗi kỹ lưỡng hơn.

Các tài liệu sẽ nêu:

GIT_TRACE_CURL

Cho phép kết xuất dấu vết đầy đủ cuộn tròn của tất cả dữ liệu đến và đi, bao gồm thông tin mô tả, của giao thức vận chuyển git.
Điều này tương tự như làm curl --trace-asciitrên dòng lệnh.

Tùy chọn này ghi đè cài đặt GIT_CURL_VERBOSEbiến môi trường.


Bạn có thể thấy tùy chọn mới được sử dụng trong câu trả lời này , nhưng cũng trong các bài kiểm tra Git 2.11 (Q4 2016):

Xem cam kết 14e2411 , cam kết 81590bf , cam kết 4527aa1 , cam kết 4eee6c6 (07 tháng 9 năm 2016) của Elia Pinto ( devzero2000) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết 930b67e , ngày 12 tháng 9 năm 2016)

Sử dụng GIT_TRACE_CURLbiến môi trường mới thay vì không dùng nữa GIT_CURL_VERBOSE .

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

Tính năng này rất tuyệt! Điểm duy nhất là đầu ra ASCII (nơi họ in tất cả không phải (ch >= 0x20) && (ch < 0x80)là dấu chấm .) và không có cách nào xuất ra hex cho dữ liệu http.
kinORnirvana

8

Git 2.22 (quý 2 năm 2019) giới thiệu trace2vớ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*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, trace2cung 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_PERFhoặ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 :

  • GIT_TR2được dự định để thay thế GIT_TRACEvà 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_EVENTlà 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 trace2envvar 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 ( DIROPTS) 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_TRACEbiế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 trace2hệ 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 trace2khở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_repositorykhông bao giờ là NULL sẽ không giữ.

Chúng ta hãy đẩy việc trace2khở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ừ trace2hệ 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

trace2có 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 trace2sẽ 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:

  • Khi nào trace2sẽ ghi một tập tin vào một thư mục đích, trước tiên hãy kiểm tra xem các dấu vết có nên được loại bỏ hay không. Dấu vết nên được loại bỏ nếu:

    • có một tệp sentinel tuyên bố rằng có quá nhiều tệp
    • HOẶC, số lượng tệp vượt quá trace2.maxFiles.
      Trong trường hợp sau, chúng tôi tạo một tệp sentinel có tên git-trace2-discardđể tăng tốc kiểm tra trong tương lai.

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.maxFileslà 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 pushgiai đ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.cbuiltin/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 *.htệ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.hcá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.txtvì 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().


4

Bạn đã thử thêm -vtoán tử verbose ( ) khi bạn sao chép chưa?

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


2

Đối với các phiên bản git cũ hơn (1.8 trở về trước)

Tôi không thể tìm thấy cách nào phù hợp để bật gỡ lỗi SSH trong phiên bản git và ssh cũ hơn. Tôi đã tìm kiếm các biến môi trường bằng cách sử dụng ltrace -e getenv ...và không thể tìm thấy bất kỳ sự kết hợp nào của các biến GIT_TRACE hoặc SSH_DEBUG sẽ hoạt động.

Thay vào đó, đây là một công thức để tạm thời đưa 'ssh -v' vào chuỗi git-> ssh:

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

Đây là đầu ra từ phiên bản git 1.8.3 với phiên bản ssh OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 tháng 2 năm 2013 nhân bản một 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'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.