У меня следующая проблема:
- версия
master
работает нормально - версия последнего тега перед
master
(скажемlast
) содержит ошибку - коллеге нужен патч для его
last
ревизии для этой определенной ошибки
Ладно. Давайте спросим у нашего друга git bisect
ревизию, в которой исправлена ошибка:
git bisect start
git bisect bad last
git bisect good master
Но это не сработает:
Некоторые хорошие обороты не являются предшественниками плохих оборотов.
git bisect в этом случае не может работать должным образом.
Может быть, вы перепутали хорошие и плохие обороты?
Какие-нибудь подсказки, чтобы преодолеть это? Я что-то пропустил в документации?
git bisect run ...
автоматизировать Рассекайте. Так что у меня нет возможности просто поменять местами словаgood
иbad
(это было слишком очевидно). Как с помощьюrun
найти первую хорошую ревизию?git bisect run
возвращает хороший или плохой код выхода, а не строку. Смотрите мой ответ, который я только что опубликовал ниже.Ответы:
Начиная с git 2.7, вы можете использовать аргументы --term-old и --term-new.
Например, вы можете определить фиксацию исправления проблемы следующим образом:
По мере того, как будете тестировать, скажите
git bisect fixed
или,git bisect unfixed
как нужно .Старый ответ для версий git до 2.7
Вместо того, чтобы временно приучать себя думать, что плохое означает хорошее, а хорошее означает плохое, почему бы не создать несколько псевдонимов?
В
~/.gitconfig
добавить следующее:Вы можете начать определение фиксации исправления проблемы следующим образом:
По мере того, как будете тестировать, скажите
git bisect-fixed
или,git bisect-unfixed
как нужно .источник
is the first bad commit
, поэтому кажется, что временное обучение все еще необходимо, не так ли?bisect-after = bisect bad
иbisect-before = bisect good
по вашей рекомендации. Теперь я могу использовать любой набор псевдонимов. Посмотрим, какие из них я предпочитаю больше после нескольких применений.Я бы просто "обманул" мерзавца и поменял местами хорошее <=> плохое.
Другими словами, считайте «плохой» чем-то, что не указывает на проблему, поэтому это не «хорошая» версия, на которой основывается ваш патч.
В любом случае, хорошее и плохое - довольно субъективные понятия, не так ли? :)
источник
Если вы используете,
git bisect run
как я,prove
команду Perl (которая запускает автоматические тесты), у вас нет возможности просто поменять местамиgood
иbad
. Об успешном выполнении тестов будет сообщено как код выхода.Я нашел допустимый синтаксис Bash, который отменяет код выхода программы, выполняемой
git bisect run
:Это дало мне первую ревизию, которая прошла все тесты
prove
.источник
Git теперь позволяет использовать
old
иnew
без предварительного определения их. Вы должны вызватьgit bisect start
без коммитов в качестве дополнительных аргументов, а затем правильно начать деление пополам, вызвавhttps://git-scm.com/docs/git-bisect#_alternate_terms
По сути, это то, что предлагал @MarcH.
источник
git bisect start --term-new fixed --term-old broken
Псевдонимы Git - хорошая идея, однако термины
fixed
иunfixed
имеют ту же проблему, чтоgood
и иbad
: вы не можете сделать так, чтобы они были совместимы как с регрессиями, так и с прогрессиями. Легко найти слова, которые работают в любом случае: просто возьмите их из исходной терминологии двоичного поиска, которая является нейтральной по своей природе, без предвзятого мнения о том, что хорошо, а что плохо. Например:Используя такие нейтральные термины, вы всегда можете ввести:
git bisect-high
(илиgit bisect-upper
, илиgit-bisect max
... на ваш выбор!) Независимо от того, ищете ли вы регресс или исправление .Жаль, что разработчики git bisect не могли просто повторно использовать какие-либо существующие термины. Пользовательский интерфейс, вообще говоря, не является проблемой Git: http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/
источник