2015-06-29 2 views
3

You can pass a list of paths to git bisect так, что только совершает изменения этих файлы проверяются:мерзавца разрез`ать со списком * неинтересных * путями

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

$ git bisect start -- arch/i386 include/asm-i386 

Однако, я хотел бы сделать двойственный образом: игнорировать фиксации, что только потрогать гр ertain файлы, так что-то вроде

$ git bisect start --unrelated arch/i386 include/asm-i386 

пропускали фиксации, что касается arch/i386/foo.c и include/asm-i386/utils.s, но будут включать в себя обязательство, что касается arch/i386/bar.c и arch/amd64/baz.c (так как последний не находится под указываемыми путями и, таким образом, вся фиксация будет уместно) ,

Есть ли способ сделать это?

ответ

3

Способ сделать то, что вы хотите, это использовать bisect run <script>.
Используйте биссект, как вы делали до сих пор, и используйте деление пополам со сценарием.

Сценарий вернет соответствующий код для пропуска (или 125 для не тестируемых - гораздо более подходящий для вашего случая).

Обратите внимание, что сценарий (my_script в приведенном выше примере) должен выйти с кодом 0, если текущий исходный код хорошо, и выход с кодом в диапазоне от 1 до 127 (включительно), за исключением 125, если источник тока код плохой.

Любой другой код выхода прервет процесс bisect. Следует отметить, что программа, которая заканчивается через «exit (-1)», оставляет $? = 255, (см. Справочную страницу выхода (3)), поскольку значение нарезается « 0377».

Специальный код выхода 125 должен использоваться, когда текущий исходный код не может быть протестирован. Если сценарий завершен с этим кодом, текущая ревизия будет пропущена (см. Git bisect skip выше). 125 был выбран в качестве наивысшей разумной ценности для использования для этой цели, поскольку 126 и 127 используются оболочками POSIX для сигнализации определенного состояния ошибки (127 для команды не найдена, 126 для команды найденной, но не исполняемой --- эти данные делают неважно, поскольку они являются нормальными ошибками в сценарии, что касается «bisect run»).

1

Как говорит codeWizar, вероятно, вы должны использовать сценарий для этого метода

Запись:

git bisect start HEAD commit-id 

Есть script.sh вроде этого:

[ "$(git diff-tree --no-commit-id --name-only -r HEAD | sort)" = "path" ] && exit 125 
make && exit 0 || exit 1 

и запустить

git bisect run script.sh 

Линия:

[ "$(git diff-tree --no-commit-id --name-only -r HEAD | sort)" = "path" ] && exit 125 

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

Вы также можете указать несколько путей с \n внутри пути

+0

Но не возвращает ли это «неинтересный» для коммитов, которые содержат изменения в «пути», даже если есть изменения вне 'path'? – Cactus

+0

Правильно, я обновил свой ответ, используя 'git diff-tree -no-commit-id -name-only -r HEAD | sort', который дает вам список измененных файлов для HEAD – edi9999

+0

Во втором чтении это все еще неудовлетворительно, потому что для этого требуется, чтобы тестирование было полностью автоматизировано. В моем сценарии у меня есть в основном ручной процесс для определения того, является ли данное коммит «хорошим» или «плохим», и я не вижу способа для 'script.sh' сигнализировать, что« это коммит не должен быть пропущен » , но требует ручного тестирования ». – Cactus

Смежные вопросы