Git Биссектричный список коммитов - PullRequest
0 голосов
/ 08 мая 2020

Я стараюсь не писать здесь свой собственный инструмент пополам, но я подумал, что сначала проверю здесь.

В принципе, я хочу разделить пополам только коммиты, перечисленные в git log --merges (т.е. я хочу выяснить, какой PR привел к проблеме). Однако git bisect, похоже, использует все коммиты, а не только коммиты слияния PR. Это проблематично, c, потому что проверка того, является ли фиксация хорошей или плохой, чрезвычайно обременительна для чего-либо, кроме фиксации слияния PR (которые предварительно созданы в артефакте). совершает, как предложено здесь является неоптимальным и не является истинным двоичным поиском коммитов слияния. Например, я использовал подход git skip, и это путь, взятый пополам (это список коммитов слияния, звездочка - это фиксация слияния проблем, числа - путь, пройденный пополам):

  6e473285b96b62d6f4d95b36b23099f1ac55bdc9
  7ef96ab33ca8ca1b0a936d3cb40afec69637b289
* fa56ec958635e1e4db655e7768597ebefb475627 4 
  7a2e6c2087d58403f0801178f58ee8478f8e575b 5 DONE, bad merge commit is fa56ec9
  a86c9e98f94a4c619ef2b0a987886c02397d8eda 3 
  466469d32acf50769dc2db8bb97ce898e07a1018
  fb9c84883b726e733631f7b46fa0074e7a685ffc
  dd5d343188a27848d7e563b458cdef4bb295e321 2
  918d903a543402e6acc9eba9d5f38f1ebff6329d
  dfffce27f96415189775286adfd4222aba72e761
  07ceb2ba9620bbf4360b9b461c587ed2d18ccabb
  31813de9c7efb6765a18657f235379d1049fbbea
  460a2f8061e4d1b1d6faf81e0f8b3e1af011f096 1 <-- bisect starting at sub-optimal commit because of git skip
  93d5da46d01f180c8b4d36c8b302bf0763a79955
  fd01fd2381ec47954fc37488df9fbe773e9cf68a
  2cf6e83fc63d95c5ab50a4c23be12188b2983910
  b7bd87fde16d9905b4d368a605b7678184577b0e
  6e473285b96b62d6f4d95b36b23099f1ac55bdc9
  7ef96ab33ca8ca1b0a936d3cb40afec69637b289
* fa56ec958635e1e4db655e7768597ebefb475627 3
  7a2e6c2087d58403f0801178f58ee8478f8e575b 4 DONE
  a86c9e98f94a4c619ef2b0a987886c02397d8eda 2
  466469d32acf50769dc2db8bb97ce898e07a1018
  fb9c84883b726e733631f7b46fa0074e7a685ffc
  dd5d343188a27848d7e563b458cdef4bb295e321
  918d903a543402e6acc9eba9d5f38f1ebff6329d 1 <-- optimal starting commit
  dfffce27f96415189775286adfd4222aba72e761
  07ceb2ba9620bbf4360b9b461c587ed2d18ccabb
  31813de9c7efb6765a18657f235379d1049fbbea
  460a2f8061e4d1b1d6faf81e0f8b3e1af011f096
  93d5da46d01f180c8b4d36c8b302bf0763a79955
  fd01fd2381ec47954fc37488df9fbe773e9cf68a
  2cf6e83fc63d95c5ab50a4c23be12188b2983910
  b7bd87fde16d9905b4d368a605b7678184577b0e

Я могу сгенерировать список коммитов, которые я хочу разделить пополам с помощью git log --merges, но возможно ли каким-то образом скормить этот список git bisect, чтобы он мог оптимально разделить пополам, или мне не повезло?

1 Ответ

0 голосов
/ 09 мая 2020

Нет, Git не предоставляет возможность делить пополам только коммиты слияния. git bisect предназначен для поиска фактического коммита, который является проблемным c, а не только одного из набора. Следовательно, он не позволяет искать только слияния. Одно слияние может внести сотни потенциально значимых изменений, которые могли вызвать проблему (подумайте о ядре Linux), поэтому во многих случаях точное определение одного слияния мало что вам скажет.

В этом случае, Единственным недостатком здесь является то, что вам нужно искать еще один коммит, что в целом не так болезненно. Лучшее, что вы можете сделать в этом случае, - это использовать либо тот подход, который вы использовали, либо сценарий, который выходит из 125 для пропуска коммитов без слияния, которые используются с git bisect run, и я лично не стал бы рассматривать недостатки (с небольшим количеством лишние итерации) настолько ужасны, что стоит написать свой собственный инструмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...