Git 2.22(2019年第2四半期)にはtrace2、Jeff Hostetlerによるコミットee4512eが導入されています。
trace2:新しい結合トレース機能を作成する
gitの新しい統合トレース機能を作成します。
最終的な目的は、現在のルーチンtrace_printf*とtrace_performance*ルーチンを統一された一連のgit_trace2*ルーチンに置き換えることです。
通常のprintfスタイルの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_TRACE2_EVENT。
後述のGit 2.22名前変更を参照してください。
以下は 古い環境変数名を使用した、この新しいトレース機能に関する最初の作業です。
GIT_TR2は、GIT_TRACEコマンドの概要データを置き換えて記録することを目的としています。
GIT_TR2_PERFはの代替として意図されていGIT_TRACE_PERFORMANCEます。
コマンドプロセス、スレッド、リポジトリ、絶対および相対経過時間の列で出力を拡張します。子プロセスの開始/停止、スレッドの開始/停止、およびスレッドごとの関数の入れ子のイベントを報告します。
GIT_TR2_EVENT新しい構造化フォーマットです。イベントデータを一連のJSONレコードとして書き込みます。
trace2関数への呼び出しは、異なるを呼び出す必要なしに有効にされた3つの出力ターゲットのいずれかにログを記録します trace_printf*trace_performance*ルーチンやルーチンます。
Josh Steadmon()によるcommit a4d3a28(2019年3月21日)を参照してください。(合併によりJunio C浜野- -で1b40314コミットsteadmon
gitster、2019年5月8日)を
trace2:ディレクトリターゲットへの書き込み
trace2環境変数の値が既存のディレクトリを参照する絶対パスである場合、指定されたディレクトリの下のファイル(プロセスごとに1つ)に出力を書き込みます。
ファイルはtrace2 SIDの最後のコンポーネントに従って名前が付けられ、その後に潜在的な衝突を回避するためのカウンターが続きます。
これにより、関連するtrace2envvarを無条件に定数のディレクトリ名に設定することにより、すべてのgit呼び出しのトレースを収集するのがより便利になります。
参照してくださいf672deeコミット(2019年4月29日)を、そして81567caをコミットし、08881b9をコミットし、bad229aをコミットし、26c6f25をコミットし、bce9db6をコミットし、800a7f9をコミットし、a7bc01eをコミットし、39f4317をコミットし、a089724をコミットし、1703751コミットにより(2019年4月15日)のジェフ・ホステットラー(jeffhostetler)。
(合併によりJunio C浜野- gitster-で5b2d1c0コミット、2019年5月13日)を
新しいドキュメントが今含んで唯一のシステムとグローバル設定ファイルから読み込まれコンフィグ設定(つまりリポジトリローカルおよび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(2019年第3四半期)に記載されているように、使用する環境変数は GIT_TRACE2です。
Carlo Marcelo ArenasBelón()によるコミット6114a40(2019年6月26日)を参照してください。
参照してください3efa1c6コミットにより(2019年6月12日)をÆvarアインホルトBjarmason( )。 (合併によりJunio C浜野- -でe9eaaa4コミットし、2019年7月9日)carenas
avar
gitster
これは、Git 2.22で行われた作業に従います:commit 4e0d3aa、commit e4b75d6(2019年5月19日)、SZEDERGábor(szeder)。
(による合併Junio C浜野- gitster-で463dca6コミット、2019年5月30日)を
trace2:環境変数の名前をGIT_TRACE2 *に変更します
ユーザーによって設定されることになっている環境変数の場合、 GIT_TR2* env変数は不明確で、一貫性がなく、醜いです。
設立のほとんどGIT_*の環境変数は省略形を使用して、行う(そのいくつかの場合ではありませんGIT_DIR、GIT_COMMON_DIR、GIT_DIFF_OPTS)それは略語は(何をかなり明らかだDIRとOPTS)のために立っています。
しかし、何のTR略ですか?追跡、従来、トレーラー、トランザクション、転送、変換、移行、翻訳、移植、トランスポート、トラバーサル、ツリー、トリガー、切り捨て、信頼、または...?!
名前の「2」サフィックスが示すように、trace2ファシリティは、最終的にはGitの元のトレースファシリティを置き換えることになっています。
対応する環境変数が同様に続き、元のGIT_TRACE変数の後に呼び出されることを期待するのは妥当GIT_TRACE2です。そのようなことはありません 'GIT_TR '。
すべてのtrace2固有の構成変数は、 ' trace2'ではなく' 'セクションにありtr2ます。
OTOH、これらの環境変数の名前から「トレース」の最後の3文字を省略しても、何も得られません。
したがって、安定したリリースに移行する前GIT_TR2*にGIT_TRACE2*、すべての環境変数の名前をに変更しましょう。
Git 2.24(2019年第3四半期)では、Gitリポジトリの初期化が改善されています。
Jeff King()によるcommit 22932d9、commit 5732f2b、commit 58ebccb(2019年8月6日)を参照してください。(合併によりJunio C浜野- -でb4a1eecコミットし、2019年9月9日)peff
gitster
common-main:trace2初期化の遅延
初期化します trace2共通のmain()関数でシステムすべてのプログラム(組み込みでないプログラムでも)でトレースを有効にします。
ただしtrace2、トレースするかどうかを決定するためにディスク上の構成を実際に読み取る必要があるため、起動は比較的重いです。
これにより、他の共通メイン初期化との予期しない相互作用が発生する可能性があります。たとえば、を呼び出す前に構成コードが表示されinitialize_the_repository()、通常の不変条件はthe_repository NULLになることのないは保持されません。
trace2common-mainで、初期化をさらに実行の直前にプッシュしてみましょうcmd_main()。
Git 2.24(2019年第4四半期)では、trace2サブシステムからの出力がよりきれいにフォーマットされるようになりました。
参照742ed63をコミットし、e344305をコミットし、c2b890aをコミットし、(2019年8月9日)ad43e37をコミットし、04f10d3をコミットし、da4589cをコミット(2019年8月8日)、および371df1bをコミット(2019年7月31日に)によってジェフ・ホステットラー(jeffhostetler)。
(合併によりJunio C浜野- gitster-で93fc876コミットし、2019年9月30日)を
そして、まだGit 2.24
参照87db61aをコミットし、83e57b0コミット(2019年10月4日)を、および2254101をコミットし、3d4548eをコミット(2019年10月3日)のことでジョシュSteadmon( )steadmon。
(合併によりJunio C浜野- gitster-でコミットd0ce4d9、2019年10月15日)
trace2:ターゲットディレクトリにファイルが多すぎる場合、新しいトレースを破棄します
サインオフ:Josh Steadmon
trace2ターゲットディレクトリにファイルを書き込むことができます。
頻繁に使用すると、このディレクトリがファイルでいっぱいになり、トレース処理システムに問題が発生する可能性があります。
このパッチは、ターゲットディレクトリに書き込むtrace2.maxFilesファイルの最大数を設定する構成オプション()を追加しますtrace2。
がmaxFiles正の整数に設定されている場合、次の動作が有効になります。
別のトレース処理システムが生成されたトレースを処理していることが前提です。センチネルファイルを処理して削除したら、新しいトレースファイルを再度生成しても安全です。
のデフォルト値trace2.maxFilesは0で、ファイル数のチェックが無効になります。
設定は、新しい環境変数で上書きすることもできます:GIT_TRACE2_MAX_FILES。
また、Git 2.24(2019年第4四半期)では、git pushステージについてtrace2を教えています。
Josh Steadmon()によるcommit 25e4b80、commit 5fc3118(2019年10月2日)を参照してください。(合併によりJunio C浜野- -で3b9ec27コミットし、2019年10月15日)をsteadmon
gitster
push:trace2インストルメンテーションを追加する
サインオフ:Josh Steadmon
でtrace2領域を追加transport.cし、builtin/push.cプッシュのさまざまな段階で過ごし、より良いトラック時間に:
- 参照の一覧表示
- サブモジュールの確認
- サブモジュールをプッシュする
- 参照のプッシュ
Git 2.25(2020年第1四半期)では、一部がDocumentation/technicalヘッダー*.hファイルに移動されています。
参照6c51cb5をコミットし、d95a77dをコミットし、bbcfa30コミット、f1ecbe0をコミット、4c4066dコミット、7db0305をコミットし、f3b9055をコミットし、971b1f2をコミットし、13aa9c8をコミットし、c0be43fをコミットし、19ef3ddコミット、301d595をコミットし、3a1b341をコミットし、126c1ccコミット、d27eb35コミット、405c6b1をコミットし、コミットd3d7172、コミット3f1480b、コミット266f03e、コミット13c4d7e(2019年11月17日)by Heba Waly(HebaWaly)。
(合併によりJunio C浜野- gitster-で26c816aコミット 2019年12月16日)
trace2:ドキュメントを移動 trace2.h
サインオフ:Heba Waly
開発者が別のdocファイルで探すのではなく、コードの横にある使用法情報を見つけやすくなるため、関数のドキュメントをからDocumentation/technical/api-trace2.txtに移動しtrace2.hます。
Documentation/technical/api-trace2.txttrace2.hに追加されたdocファイルへのリンクを使用して、ファイルがそのまま別のdocファイルにある方が適切と思われる詳細がいっぱいなので、関数のドキュメントセクションのみが削除されます。また、ヘッダーファイル内のドキュメントとの同期を維持するのが難しい冗長な情報が含まれないように、関数docは削除されています。
(つまり再編成が別のコマンドの副作用を持っていたものの、中)2020年3月(Gitの2.25.2で説明して固定cc4f2ebコミットにより(2020年2月14日)のジェフ・キング(peff)。
(で合併Junio C浜野- gitster-でコミット1235384、2020年2月17日))
Git 2.27(2020年第2四半期):環境変数のロギングを可能にする Trace2の拡張機能。
Josh Steadmon()によるcommit 3d3adaa(2020年3月20日)を参照してください。(合併によりJunio C浜野- -で810dc64コミット、2020年4月22日)をsteadmon
gitster
trace2:Gitに環境変数をログに記録するように教える
サインオフ:Josh Steadmon
Acked-by:Jeff Hostetler
trace2を介して、Gitは既に興味深い構成パラメーターをログに記録できます(trace2_cmd_list_config()関数を参照)。ただし、多くの構成パラメーターは環境変数を介したオーバーライドも許可しているため、これは不完全な状況を与える可能性があります。
より完全なログを可能にするためtrace2_cmd_list_env_vars()に、既存のconfig param logging実装をモデルにした新しい関数とサポート実装を追加します。
Git 2.27(2020年第2四半期)で、追跡対象の「」start_progress()としてとのstop_progress()呼び出しも使用するように進行状況メーターを示すコードパスを教えregionます。
参照してください98a1364コミットにより(2020年5月12日)をEmily Shaffer(nasamuffin)に。
(による合併Junio C浜野- gitster-にd98abceコミット、2020年5月14日)を
trace2:ログの進行時間とスループット
サインオフ:Emily Shaffer
「git fetch」のような1つの操作だけで、トレースにスループットを書き留める方法を教えるのではなく、進行状況ライブラリ自体にツールを追加することで、低速に見えるかもしれない幅広いユーザー操作について学ぶことができます。
進行状況を表示する操作は実行に時間がかかる可能性が高く、パフォーマンスを監視する必要があると思われます。
オブジェクト数とデータ転送サイズを表示することにより、操作が期待どおりにスケーリングされていることを確認するために、いくつかの派生測定を行うことができるはずです。
そして:
Git 2.27(2020年第2四半期)では、進捗状況APIを追跡可能な領域として使用できるようにするための最近の変更に対する直前の修正。
Derrick Stolee()によるcommit 3af029c(2020年5月15日)を参照してください。(合併によりJunio C浜野- -で85d6e28コミットderrickstolee
gitster、2020年5月20日)を
progress:呼び出しtrace2_region_leave()後にのみ呼び出す_enter()
サインオフ:Derrick Stolee
Progress APIのユーザーはstart_progress()条件付きで呼び出し、display_progress()とstop_progress()関数に、start_progress()呼び出されていない場合は何もしません。
に呼び出しを追加したとき trace2_region_enter()へのstart_progress()、progress API関数からの他のtrace2 API呼び出しへの呼び出しはstart_progress()、progress構造体で呼び出されていない場合、これらのtrace2呼び出しがスキップされることを確認する必要があります。
具体的には、呼び出すことはありませんtrace2_region_leave()からstop_progress()、私たちが呼び出されていないときstart_progress()のマッチングと呼ばれてきたと思われます、trace2_region_enter()。
GIT_CURL_VERBOSEて、Git 2.9.x / 2.10が必要GIT_TRACE_CURLです。以下の私の答えを参照してください。