Ответ 1
Для более подробного вывода используйте следующее:
GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull origin master
Как я могу получить отладочную информацию о 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
для отслеживания доступа к пакетному файлу,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 - Переменные среды
Для проблем 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
чтобы уменьшить уровень -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, вы можете использовать следующее:
Для более высокого уровня отладки для типа -vv или -vvv для уровня отладки 2 и 3 соответственно:
# 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, а не только git clone '.
Git 2.9.x/2.10 (Q3 2016) добавляет еще один вариант отладки: GIT_TRACE_CURL
.
См. Commit 73e57aa, совершите 74c682d (23 мая 2016 года) Элиа Пинто (devzero2000
).
Помощник: Торстен Бёгерсхаузен (tboegi
), Рамсей Джонс, Юнио С Хамано (gitster
), Эрик Саншайн (sunshineco
) и Джефф Кинг (peff
).
(Слияние с Юнио С Хамано - gitster
- в совершении 2f84df2, 06 июля 2016 года)
http.c
: реализовать переменную средыGIT_TRACE_CURL
GIT_TRACE_CURL
переменную средыGIT_TRACE_CURL
чтобы обеспечить большую степень детализацииGIT_CURL_VERBOSE
, в частности, полный транспортный заголовок и всю полезную нагрузку данных.
Это может быть полезно, если в конкретной ситуации может потребоваться более тщательный отладочный анализ.
В документации будет указано:
GIT_TRACE_CURL
Позволяет скручивать полный откат всех входящих и исходящих данных, включая описательную информацию, протокола передачи git.
Это похоже на выполнениеcurl --trace-ascii
в командной строке.Этот параметр переопределяет настройку переменной среды
GIT_CURL_VERBOSE
.
Вы можете увидеть эту новую опцию, используемую в этом ответе, но также и в тестах Git 2.11 (Q4 2016):
См. Commit 14e2411, совершите 81590bf, совершите 4527aa1, совершите 4eee6c6 (07 Sep 2016) от Elia Pinto (devzero2000
).
(Слияние с Юнио С Хамано - gitster
- в совершении 930b67e, 12 Sep 2016)
Используйте новую переменную среды
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
Я не смог найти подходящего способа включить отладку SSH в старых версиях git и 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.3 с версией ssh OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 февраля 2013 г. клонирование репозитория 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 (Q2 2019) представляет trace2
с commit ee4512e Джеффом Хостетлером:
trace2
: создать новое комбинированное средство трассировкиСоздайте новое унифицированное средство трассировки для git.
Возможное намерение состоит в том, чтобы заменить текущие подпрограммыtrace_printf*
иtrace_performance*
унифицированным набором подпрограммgit_trace2*
.В дополнение к обычному API в стиле printf,
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
и logs сводные данные.
GIT_TR2_PERF
предназначен для заменыGIT_TRACE_PERFORMANCE
.
Он расширяет вывод столбцами для командного процесса, потока, репо, абсолютное и относительное истекшее время. Он сообщает о событиях для запуск/остановка дочернего процесса, запуск/остановка потока и функция для каждого потока вложенности.
GIT_TR2_EVENT
- это новый структурированный формат. Он записывает данные о событии в виде серия записей JSON.Вызовы функций trace2 регистрируются в любой из 3 включенных выходных целей без необходимости вызова различных подпрограмм
trace_printf*
илиtrace_performance*
.
См. коммит a4d3a28 (21 марта 2019 г.) Джоша Стедмона (steadmon
) .
(Merged by Junio C Hamano -- [TG423] -- in commit 1b40314, 08 May 2019)
trace2
: запись в каталог цели
Если значение переменной среды trace2 представляет собой абсолютный путь, относящийся к существующему каталогу, запишите выходные данные в файлы (по одному на процесс) под указанным каталогом.
Файлы будут именоваться в соответствии с последним компонентом SID trace2, за которым следует счетчик, чтобы избежать возможных конфликтов.
Это делает более удобным собирать следы для каждого вызова git безоговорочно устанавливая соответствующийtrace2
envvar постоянным имя каталога.См. также
commit f672dee (29 апреля 2019 года) и коммит 81567ca , коммит 08881b9 , коммит bad229a , коммит 26c6f25 ,commit bce9db6 ,commit 800a7f9 ,commit a7bc01e ,commit 39f4317 ,commit a089724 , совершить 1703751 (15 апреля 2019 г.) Джеффа Хостетлера (jeffhostetler
).
(Merged by Junio C Hamano -- [TG427] -- in commit 5b2d1c0, 13 May 2019)
новая документация
теперь включает в себя параметры конфигурации, которые считываются только из системы и глобальных файлов конфигурации (что означает, что локальные файлы конфигурации и файлы конфигурации рабочего дерева и аргументы командной строки -c
не учитываются).
Пример :
$ 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 (Q3 2019), используемая переменная окружения -
GIT_TRACE2
. См. коммит 6114a40
(26 июня 2019 г.) от Карло Марсело Аренаса Белона (carenas
).
См. коммит 3efa1c6
(12 июня 2019 г.), автор Æвар Арнфьорд Бьярмасон (avar
).
(Merged by Junio C Hamano -- [TG436] -- in commit e9eaaa4, 09 Jul 2019)
Это следует за работой, проделанной в Git 2.22:
commit 4e0d3aa
commit e4b75d6(19 мая 2019 г.) SZEDER Gábor (szeder
). .
(Merged by Junio C Hamano -- [TG438] -- in commit 463dca6, 30 May 2019)
trace2
: переименование переменных среды в GIT_TRACE2 *
Для переменной окружения, которую должны устанавливать пользователи, переменные
GIT_TR2*
просто слишком неясны, противоречивы и уродливы.
Most of the established
Средство trace2, как следует из названия суффикса "2", должен в конечном итоге заменить оригинальную трассировку Git.GIT_*
environment variables don't use abbreviations, и in case of the few that do (GIT_DIR
,GIT_COMMON_DIR
,GIT_DIFF_OPTS
) it quite obvious what the abbreviations (DIR
иOPTS
) stand for.
But what doesTR
stand for? Track, traditional, trailer, transaction, transfer, transformation, transition, translation, transplant, transport, traversal, tree, trigger, truncate, trust, or...?!Разумно ожидать, что соответствующие переменные среды следуйте примеру, и после оригинальных
GIT_TRACE
переменных они называетсяGIT_TRACE2
; нет такого понятия, как "GIT_TR
".
Все специфичные для trace2 конфигурационные переменные очень разумно Раздел "trace2
", а не "tr2
".ОТО,
мы ничего не получаем, опуская последние три символы "следа" от имен этих переменных среды . Итак, давайте переименуем все переменные окружения
GIT_TR2*
вGIT_TRACE2*
, прежде чем они доберутся до стабильного выпуска.Git 2.24 (Q3 2019) улучшает инициализацию репозитория Git.
См.
commit 22932d9 ,commit 5732f2b ,commit 58ebccb (06 августа 2019 г.) от Джеффа Кинга (peff
) ..
(Merged by Junio C Hamano -- [TG456] -- in commit b4a1eec, 09 Sep 2019)
common-main: задержка инициализации trace2
Мы инициализируем систему
trace2
в общей функции main(), чтобы Все программы (даже те, которые не являются встроенными) будут включать трассировку.Но запуск
trace2
относительно тяжелый, так как мы должны прочитать Конфигурация на диске, чтобы решить, следует ли отслеживать.
Это может вызвать неожиданные взаимодействия с другими общими основными инициализации. Например, мы докажем код конфигурации перед вызовомinitialize_the_repository()
, и обычный инвариант, которыйthe_repository
никогда не будет равен NULL, не будет удерживаться.Давайте протолкнем инициализацию
trace2
дальше вниз в общем, чтобы незадолго до того, как мы выполнимcmd_main()
.
Git 2.24 (Q4 2019) также гарантирует, что вывод подсистемы trace2
теперь отформатирован более красиво.
Смотрите коммит 742ed63, коммит e344305, коммит c2b890a (09 августа 2019 г.), коммит ad43e37, коммит 04f10d3, зафиксировать da4589c (8 августа 2019 г.) и зафиксировать 371df1b (31 июля 2019 г.) от Джеффа Хостетлера (jeffhostetler
).
.
(Merged by Junio C Hamano -- [TG465] -- in commit 93fc876, 30 Sep 2019)
И еще Git 2.24
Смотрите коммит 87db61a, коммит 83e57b0 (04 октября 2019 г.) и коммит 2254101, коммит 3d4548e (03 октября 2019 г.) от Джош Стедмон (steadmon
).
(Merged by Junio C Hamano -- [TG467] -- in commit d0ce4d9, 15 Oct 2019)
trace2
: отменить новые трассировки, если в целевом каталоге слишком много файловSigned-off-by: Josh Steadmon
trace2
может записывать файлы в целевой каталог.
При интенсивном использовании этот каталог может заполняться файлами, что создает трудности для систем обработки трассировки.Этот патч добавляет опцию конфигурации (
trace2.maxFiles
) для установки максимального количества файлов, которыеtrace2
будет записывать в целевой каталог.Следующее поведение активируется, когда для
maxFiles
задано положительное целое число:
Когда
trace2
записывает файл в целевой каталог, сначала проверьте, следует ли отбрасывать следы. Следы должны быть удалены, если:
- есть сторожевой файл, объявляющий, что файлов слишком много
- ИЛИ, количество файлов превышает
trace2.maxFiles
.
В последнем случае мы создаем сторожевой файл с именемgit-trace2-discard
для ускорения будущих проверок.Предполагается, что отдельная система обработки трасс имеет дело с генерируемыми трассами; как только он обработает и удалит файл-страж, будет безопасно снова генерировать новые файлы трассировки.
Значение по умолчанию для
trace2.maxFiles
равно нулю, что отключает проверку количества файлов.Конфигурацию также можно переопределить с помощью новой переменной среды:
GIT_TRACE2_MAX_FILES
.
А в Git 2.24 (Q4 2019) учат trace2 о стадиях git push
.
Смотрите коммит 25e4b80, коммит 5fc3118 (02 октября 2019 г.) от Джоша Стедмона (steadmon
).
(Merged by Junio C Hamano -- [TG480] -- in commit 3b9ec27, 15 Oct 2019)
push
: добавить инструментарий trace2Signed-off-by: Josh Steadmon
Добавьте области trace2 в
transport.c
иbuiltin/push.c
, чтобы лучше отслеживать время, затрачиваемое на различных этапах нажатия:
- Список ссылок
- Проверка подмодулей
- Толкаем субмодули
- Нажав ссылки