どうすればgit/git-shellに関するデバッグ情報を入手できますか?
問題がありました。user1
は問題なくリポジトリをクローンできましたが、user2
は空のリポジトリのみをクローンできました。 GIT_TRACE=1
を設定しましたが、有用なことは何も言われませんでした。
最後に、長い試行錯誤の後、ファイルのアクセス許可の問題であることが判明しました。適切なエラーメッセージがこの問題を回避する可能性があります。
さらに詳細な出力を行うには、次を使用します。
GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull Origin master
Gitには、Gitの問題のデバッグに使用できるかなり完全なトレースセットが組み込まれています。
それらをオンにするには、次の変数を定義できます。
GIT_TRACE
一般的なトレースの場合、GIT_TRACE_PACK_ACCESS
packfileアクセスのトレース用、GIT_TRACE_PACKET
ネットワーク操作のパケットレベルのトレース用、GIT_TRACE_PERFORMANCE
はパフォーマンスデータを記録します。GIT_TRACE_SETUP
は、リポジトリとそれが対話している環境の検出に関する情報、GIT_MERGE_VERBOSITY
は、再帰的マージ戦略のデバッグ用(値:0〜5)、GIT_CURL_VERBOSE
はすべてのcurlメッセージを記録します(curl -v
と同等)、GIT_TRACE_SHALLOW
は、浅いリポジトリのフェッチ/クローン作成をデバッグします。可能な値には次のものがあります。
true
、1
、または2
はstderrに書き込みます。/
で始まる絶対パス。詳細については、以下を参照してください: Git Internals-Environment Variables
SSHの問題については、次のコマンドを試してください。
echo 'ssh -vvv "$*"' > ssh && chmod +x ssh
GIT_SSH="$PWD/ssh" git pull Origin master
または、ssh
を使用して資格情報を検証します。
ssh -vvvT [email protected]
またはHTTPSポート経由:
ssh -vvvT -p 443 [email protected]
注:冗長レベルを下げるには、-v
の数を減らします。
$ 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
...
これを試してください:
GIT_TRACE=1 git pull Origin master
SSH経由の場合、次を使用できます。
デバッグレベル2および3のそれぞれ-vvまたは-vvvタイプのより高いデバッグレベルの場合:
# 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>
これは主に、サーバーの公開鍵と秘密鍵の問題を処理するのに役立ちます。このコマンドは、「git clone」だけでなく、任意のgitコマンドに使用できます。
Git 2.9.x/2.10(2016年第3四半期)には、別のデバッグオプションGIT_TRACE_CURL
が追加されています。
commit 73e57aa 、 commit 74c682d (2016年5月23日)by Elia Pinto(devzero2000
) 。
支援者: TorstenBögershausen(tboegi
) 、Ramsay Jones、 Junio C Hamano(gitster
) 、 エリックサンシャイン(sunshineco
) 、および ジェフキング(peff
) 。
( Jumio C Hamano-gitster
- in commit 2f84df2 、2016年7月6日)
http.c
:GIT_TRACE_CURL
環境変数を実装します
GIT_TRACE_CURL
環境変数を実装して、GIT_CURL_VERBOSE
の詳細度、特に完全なトランスポートヘッダーと交換されるすべてのデータペイロードを許可します。
特定の状況で、より徹底的なデバッグ分析が必要になる場合に役立ちます。
ドキュメント には次のように記載されています。
GIT_TRACE_CURL
Gitトランスポートプロトコルの記述情報を含む、すべての着信および発信データの完全なカールトレースダンプを有効にします。
これは、コマンドラインでcurl --trace-ascii
を実行することに似ています。このオプションは、
GIT_CURL_VERBOSE
環境変数の設定をオーバーライドします。
新しいオプションは this answer で使用されていますが、Git 2.11(2016年第4四半期)テストでも使用されています。
commit 14e2411 、 commit 81590bf 、 commit 4527aa1 、 commitを参照4eee6c6 (2016年9月7日)by Elia Pinto(devzero2000
) 。
( 浜野順夫-gitster
- in commit 930b67e 、2016年9月12日)
deprecated
GIT_TRACE_CURL
の代わりに、新しいGIT_CURL_VERBOSE
環境変数を使用します。
GIT_TRACE_CURL=true git clone --quiet $HTTPD_URL/smart/repo.git
クローンを作成するときに冗長(-v
)演算子を追加しようとしましたか?
git clone -v git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
古いgitバージョンとsshバージョンではSSHデバッグを有効にする適切な方法がありませんが見つかりました。 ltrace -e getenv ...
を使用して環境変数を探しましたが、動作するGIT_TRACEまたはSSH_DEBUG変数の組み合わせが見つかりませんでした。
代わりに、「ssh -v」をgit-> sshシーケンスに一時的に注入するレシピを次に示します。
$ echo '/usr/bin/ssh -v ${@}' >/tmp/ssh
$ chmod +x /tmp/ssh
$ PATH=/tmp:${PATH} git clone ...
$ rm -f /tmp/ssh
gitバージョン1.8. sshバージョンの出力OpenSSH_5.3p1、OpenSSL 1.0.1e-fips 11 Feb 201 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'
Git 2.22(2019年第2四半期)では、trace2
を導入し、 commit ee4512e byJeff Hostetler:
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の名前変更を参照してください。
以下は、old環境変数名を使用した、この新しいトレース機能でのinitialの動作です。
GIT_TR2
は、GIT_TRACE
の代わりになることを意図しており、コマンドの要約データを記録します。
GIT_TR2_PERF
は、GIT_TRACE_PERFORMANCE
の代替として意図されています。
コマンドプロセス、スレッド、レポ、絶対経過時間、相対経過時間の列で出力を拡張します。子プロセスの開始/停止、スレッドの開始/停止、およびスレッドごとの関数のネストのイベントを報告します。
GIT_TR2_EVENT
は新しい構造化形式です。イベントデータを一連のJSONレコードとして書き込みます。Trace2関数の呼び出しは、異なる
trace_printf*
またはtrace_performance*
ルーチンを呼び出すことなく、有効になっている3つの出力ターゲットのいずれかにログを記録します。
Josh Steadmon(steadmon
) による commit a4d3a28 (2019年3月21日)を参照してください。
( 浜野順夫-gitster
- in commit 1b40314 、2019年5月8日)
trace2
:ディレクトリターゲットへの書き込みTrace2環境変数の値が既存のディレクトリを参照する絶対パスである場合、指定されたディレクトリの下のファイル(プロセスごとに1つ)に出力を書き込みます。
trace2 SIDの最終コンポーネントに従ってファイルに名前が付けられ、その後に潜在的な衝突を回避するためのカウンターが続きます。これにより、関連する
trace2
envvarを一定のディレクトリ名に無条件に設定することにより、すべてのgit呼び出しのトレースを収集するのがより便利になります。
commit f672dee (2019年4月29日)、および commit 81567ca 、 commit 08881b9 、 commit bad229aも参照 、 commit 26c6f25 、 commit bce9db6 、 commit 800a7f9 、 commit a7bc01e 、 commit 39f4317 、 commit a089724 、 commit 1703751 (2019年4月15日)by Jeff Hostetler(jeffhostetler
) 。
( 浜野淳夫-gitster
- in commit 5b2d1c0 、2019年5月13日)
new documentation には、システムおよびグローバル設定ファイルからのみ読み込まれる config設定が含まれるようになりました (つまり、リポジトリのローカルおよびワークツリーの設定ファイルと-c
コマンドライン引数は尊重されません。)
Example :
$ 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
performance measure の場合:
$ 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(carenas
) による commit 6114a40 (2019年6月26日)を参照してください。
ÆvarArnfjörðBjarmason(avar
) による commit 3efa1c6 (2019年6月12日)を参照してください。
( Jumio C Hamano-gitster
- in commit e9eaaa4 、2019年7月9日)
これは、Git 2.22で行われた作業に従います: commit 4e0d3aa 、 commit e4b75d6 (2019年5月19日)by SZEDERGábor(szeder
) 。
( C浜野順夫-gitster
- in commit 463dca6 、2019年5月30日)
trace2
:環境変数の名前をGIT_TRACE2 *に変更ユーザーが設定することになっている環境変数の場合、
GIT_TR2*
env変数はあまりにも不明確で、一貫性がなく、見苦しいです。確立された
GIT_*
環境変数のほとんどは省略形を使用しません。また、いくつかの場合(GIT_DIR
、GIT_COMMON_DIR
、GIT_DIFF_OPTS
)は省略形(DIR
およびOPTS
)の略です。
しかし、TR
は何を表していますか?追跡、従来、トレーラー、トランザクション、転送、変換、移行、翻訳、移植、トランスポート、トラバーサル、ツリー、トリガー、切り捨て、信頼、または...?!Trace2機能は、その名前の接尾辞「2」が示すように、最終的にGitの元のトレース機能に取って代わります。
対応する環境変数がそれに続き、元のGIT_TRACE
変数の後、それらはGIT_TRACE2
と呼ばれることを期待するのは合理的です。 「GIT_TR
」というようなものはありません。すべてのtrace2固有の構成変数は、非常に賢明なことに、「
trace2
」ではなく「tr2
」セクションにあります。OTOHこれらの環境変数の名前から「トレース」の最後の3文字を省略しても、何も得られません。
したがって、すべての
GIT_TR2*
環境変数の名前をGIT_TRACE2*
に変更してから、安定したリリースに移行してください。