Поиск…


Синтаксис

  • git bisect <subcommand> <options>

  • git bisect start <bad> [<good>...]

  • git bisect reset

  • git bisect good

  • git bisect bad

Бинарный поиск (git bisect)

git bisect позволяет вам найти, какая фиксация ввела ошибку, используя двоичный поиск.

Начните с дебазации сеанса путем предоставления двух ссылок на фиксацию: хорошая фиксация перед ошибкой и неудачная фиксация после ошибки. Как правило, плохой фиксацией является HEAD .

# start the git bisect session
$ git bisect start

# give a commit where the bug doesn't exist
$ git bisect good 49c747d

# give a commit where the bug exist
$ git bisect bad HEAD

git запускает двоичный поиск: он разделяет ревизию пополам и переключает репозиторий на промежуточную ревизию. Проверьте код, чтобы определить, хороша или плохая ревизия:

# tell git the revision is good,
# which means it doesn't contain the bug
$ git bisect good

# if the revision contains the bug,
# then tell git it's bad
$ git bisect bad

git продолжит выполнение двоичного поиска по каждому оставшемуся подмножеству плохих версий в зависимости от ваших инструкций. git представит единственную ревизию, которая, если бы ваши флаги не были неправильными, будет представлять собой именно ту версию, где была введена ошибка.

Впоследствии помните, чтобы запустить git bisect reset чтобы завершить сеанс bisect и вернуться в HEAD.

$ git bisect reset

Если у вас есть скрипт, который может проверить наличие ошибки, вы можете автоматизировать процесс с помощью:

$ git bisect run [script] [arguments]

Где [script] - это путь к вашему скрипту, а [arguments] - это любые аргументы, которые должны быть переданы вашему скрипту.

Выполнение этой команды будет автоматически выполняться через двоичный поиск, выполняя git bisect good или git bisect bad на каждом шаге в зависимости от кода выхода вашего скрипта. Выход с 0 указывает на good , а выход с 1-124, 126 или 127 указывает на плохое. 125 указывает, что сценарий не может протестировать эту ревизию (которая приведет к git bisect skip ).

Полуавтоматически найдите ошибочную фиксацию

Представьте, что вы находитесь на master ветке, и что-то не работает должным образом (регрессия была введена), но вы не знаете, где. Все, что вы знаете, это то, что работало в последнем выпуске (например, с тегом или вы знаете хеш-код фиксации, давайте возьмем old-rel здесь).

Git помогает вам, обнаружив ошибочную фиксацию, которая вводила регрессию с очень небольшим количеством шагов (двоичный поиск).

Прежде всего начните деление пополам:

git bisect start master old-rel

Это скажет git, что master - это сломанная ревизия (или первая сломанная версия), а old-rel - последняя известная версия.

Теперь Git проверит отдельную голову в середине обоих коммитов. Теперь вы можете провести тестирование. В зависимости от того, работает ли это или нет

git bisect good

или же

git bisect bad

, В случае, если эта фиксация не может быть протестирована, вы можете легко git reset и протестировать ее, git willl позаботится об этом.

После нескольких шагов git выведет ошибочный хеш фиксации.

Чтобы прервать процесс bisect, просто выполните

git bisect reset

и git восстановит предыдущее состояние.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow