Bagaimana saya bisa men-debug masalah terkait git / git-shell?

148

Bagaimana saya dapat memiliki beberapa informasi debug mengenai git / git-shell?

Saya punya masalah, yang user1bisa mengkloning repositori tanpa masalah, sementara user2hanya bisa mengkloning yang kosong. Saya telah menetapkan GIT_TRACE=1, tetapi tidak ada yang berguna yang diberitahukan.

Akhirnya, setelah coba-coba yang lama, ternyata itu masalah izin pada file. Pesan kesalahan yang sesuai dapat menyebabkan hubungan pendek masalah ini.

Andor
sumber
Catatan: sebagai tambahan GIT_CURL_VERBOSE, Anda harus menggunakan Git 2.9.x / 2.10 GIT_TRACE_CURL. Lihat jawaban saya di bawah ini .
VonC
Dan (Q2 2019, tiga tahun setelah GIT_TRACE_CURL), sekarang Anda miliki trace2. Contoh: git config --global trace2.normalTarget ~/log.normal. Lihat jawaban (baru) saya di bawah ini .
VonC

Jawaban:

212

Untuk penggunaan keluaran verbose yang lebih banyak, berikut ini:

GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master

WTK
sumber
53
Ada beberapa opsi GIT_TRACE, di luar yang inti. Inilah pilihan ü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
Bagaimana dan di mana mengatur variabel ini?
Hunsu
Itu hanya satu baris yang bisa Anda tempel ke terminal Anda. Anda harus mengganti git pull origin masterbagian dengan perintah yang ingin Anda jalankan.
Aeolun
1
Di platform mana ini bekerja? Jelas bukan Windows.
cowlinator
8
Pada Windows Anda dapat mengatur variabel-variabel ini, satu per satu (satu per baris), seperti ini:set GIT_CURL_VERBOSE=1 set GIT_TRACE=1 git pull origin master
cowlinator
85

Debugging

Git memiliki seperangkat jejak yang cukup lengkap yang dapat Anda gunakan untuk debug masalah git Anda.

Untuk mengaktifkannya, Anda dapat menentukan variabel berikut:

  • GIT_TRACE untuk jejak umum,
  • GIT_TRACE_PACK_ACCESS untuk melacak akses packfile,
  • GIT_TRACE_PACKET untuk penelusuran tingkat paket untuk operasi jaringan,
  • GIT_TRACE_PERFORMANCE untuk mencatat data kinerja,
  • GIT_TRACE_SETUP untuk informasi tentang menemukan repositori dan lingkungan yang berinteraksi dengannya,
  • GIT_MERGE_VERBOSITY untuk debugging strategi gabungan rekursif (nilai: 0-5),
  • GIT_CURL_VERBOSEuntuk mencatat semua pesan curl (setara dengan curl -v),
  • GIT_TRACE_SHALLOW untuk debugging fetching / cloning dari repositori dangkal.

Nilai yang mungkin termasuk:

  • true, 1atau 2untuk menulis ke stderr,
  • jalur absolut dimulai dengan /untuk melacak output ke file yang ditentukan.

Untuk detail lebih lanjut, lihat: Git Internal - Variabel Lingkungan


SSH

Untuk masalah SSH, coba perintah berikut:

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

atau gunakan sshuntuk memvalidasi kredensial Anda, mis

ssh -vvvT [email protected]

atau lebih dari port HTTPS:

ssh -vvvT -p 443 [email protected]

Catatan: Kurangi jumlah -vuntuk mengurangi tingkat verbositas.


Contohnya

$ 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
...
kenorb
sumber
2
Mengubah echo 'ssh -vvv $*' > ssh && chmod +x sshke echo 'ssh -vvv "$@"' > ssh && chmod +x sshharus lebih aman dalam kasus tepi di mana parameter tunggal memiliki ruang di dalamnya.
Alexander Bird
46

coba yang ini:

GIT_TRACE=1 git pull origin master
CC
sumber
40

Jika lebih dari SSH, Anda dapat menggunakan yang berikut ini:

Untuk level debug yang lebih tinggi untuk tipe -vv atau -vvv untuk level debug 2 dan 3 masing-masing:

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

Ini terutama berguna untuk menangani masalah kunci publik dan pribadi dengan server. Anda dapat menggunakan perintah ini untuk perintah git apa pun, tidak hanya 'git clone'.

Basil Musa
sumber
Ya, ini bekerja dengan sempurna. Lebih baik dari yang lain. Ya, ini bekerja dengan sempurna. Lebih baik dari yang lain.
BMW
Ini akan sangat berguna karena saya harus menyelesaikan masalah utama sekarang, tetapi tidak berhasil bagi saya dengan git 1.8.3.1 dan OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013 pada rilis CentOS Linux 7.2.1511 (Inti). :(
Greg Dubicki
@GregDubicki Strange. Beri tahu saya apa yang berfungsi untuk Anda sehingga saya dapat memperbarui jawabannya.
Basil Musa
1
Di Windows gunakan set GIT_SSH_COMMAND=ssh -v(tidak ada tanda kutip).
jansohn
18

Git 2.9.x / 2.10 (Q3 2016) menambahkan pilihan debug lain: GIT_TRACE_CURL.

Lihat komit 73e57aa , komit 74c682d (23 Mei 2016) oleh Elia Pinto ( devzero2000) .
Dibantu-oleh: Torsten Bögershausen ( tboegi) , Ramsay Jones, Junio ​​C Hamano ( gitster) , Eric Sunshine ( sunshineco) , dan Jeff King ( peff) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit 2f84df2 , 06 Jul 2016)

http.c: mengimplementasikan GIT_TRACE_CURLvariabel lingkungan

Terapkan GIT_TRACE_CURLvariabel lingkungan untuk memungkinkan tingkat detail yang lebih besar GIT_CURL_VERBOSE, khususnya tajuk transportasi lengkap dan semua muatan data yang dipertukarkan.
Mungkin bermanfaat jika situasi tertentu memerlukan analisis debugging yang lebih menyeluruh.

Dokumentasi akan menyatakan:

GIT_TRACE_CURL

Mengaktifkan dump jejak penuh ikal dari semua data yang masuk dan keluar, termasuk informasi deskriptif, dari protokol transport git.
Ini mirip dengan melakukan curl --trace-asciidi baris perintah.

Opsi ini mengabaikan pengaturan GIT_CURL_VERBOSEvariabel lingkungan.


Anda dapat melihat opsi baru yang digunakan dalam jawaban ini , tetapi juga dalam tes Git 2.11 (Q4 2016):

Lihat komit 14e2411 , komit 81590bf , komit 4527aa1 , komit 4eee6c6 (07 Sep 2016) oleh Elia Pinto ( devzero2000) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit 930b67e , 12 Sep 2016)

Gunakan GIT_TRACE_CURLvariabel lingkungan baru alih-alih usang GIT_CURL_VERBOSE .

GIT_TRACE_CURL=true git clone --quiet $HTTPD_URL/smart/repo.git
VONC
sumber
Fitur ini keren! Satu-satunya titik adalah output ASCII (di mana mereka mencetak semua yang bukan (ch >= 0x20) && (ch < 0x80)sebagai titik .) dan tidak ada cara output hex untuk data http.
kinORnirvana
8

Git 2.22 (Q2 2019) memperkenalkan trace2dengan 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, trace2menyediakan 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_PERFatau 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_TR2dimaksudkan untuk menjadi pengganti GIT_TRACEdan mencatat data ringkasan perintah.

  • GIT_TR2_PERFdimaksudkan 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_EVENTadalah 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 trace2envvar 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 -cargumen 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 ( DIRdan 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_TRACEvariabel 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 trace2sistem 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_repositorytidak pernah NULL tidak akan tahan.

Mari kita mendorong trace2inisialisasi lebih jauh ke bawah pada common-main, tepat sebelum kita mengeksekusicmd_main() .


Git 2.24 (Q4 2019) memastikan juga bahwa output dari trace2subsistem 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

trace2dapat 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 trace2akan menulis ke direktori target.

Perilaku berikut ini diaktifkan ketika maxFiles diatur ke bilangan bulat positif:

  • Ketika trace2akan menulis file ke direktori target, periksa dulu apakah jejaknya harus dibuang atau tidak. Jejak harus dibuang jika:

    • ada file sentinel yang menyatakan terlalu banyak file
    • ATAU, jumlah file melebihi trace2.maxFiles.
      Dalam kasus terakhir, kami membuat file sentinel yang dinamai git-trace2-discarduntuk mempercepat pemeriksaan di masa mendatang.

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.maxFilesadalah 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.cdan builtin/push.cuntuk 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/technicaldipindahkan ke *.hfile 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.txtke trace2.hkarena 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.txtkarena 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().

VONC
sumber
4

Sudahkah Anda mencoba menambahkan -voperator verbose ( ) ketika Anda mengkloning?

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

JamesHalsall
sumber
2

Untuk versi git yang lebih lama (1,8 dan sebelumnya)

Saya tidak menemukan cara yang cocok untuk mengaktifkan debugging SSH di versi git dan ssh yang lebih lama. Saya mencari variabel lingkungan menggunakanltrace -e getenv ... dan tidak dapat menemukan kombinasi variabel GIT_TRACE atau SSH_DEBUG yang akan berfungsi.

Alih-alih, inilah resep untuk menyuntikkan 'ssh -v' sementara ke dalam git-> ssh:

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

Inilah output dari git versi 1.8.3 dengan ssh versi OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 mengkloning 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'
Qneill
sumber