Я пошел и посмотрел, как работает git add -p
.Вы даже не хотите знать.
По сути, он анализирует вывод git diff
(на самом деле git diff-files -p
) и обрабатывает различия вручную.Он показывает вам кусок, если вы хотите, он добавляет его к запущенному diff и в конечном итоге запускает git apply --cached
с сгенерированным diff.
Я настоятельно рекомендую использовать любой доступный вам API, вместо того, чтобы пытатьсяубедите сценарий манипулирования патчем на 1600 строк сделать то, что вам нужно.
Известные части включают область вокруг @ hunk = coalesce_overlapping_hunks (@hunk) , где он только что завершил обработку цикла вопросов для всехханки, и вот-вот сожмем их в diff для вас, и около my% patch_modes = ... , где описано все взаимодействие с реальными инструментами git
;вы можете видеть, как он построен только на командах, которые я показал выше.