Подтвердить что ты не робот

Как я могу сделать git am/git применить работу "нечеткой", как команда patch

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

Насколько я могу судить git-am apply, очень строгая интерпретация так отвергает все эти патчи.

Итак, мой рабочий процесс стал

$ git am ../the-patch.patch
# Fails because the patch doesn't apply cleanly
$ patch -p1 < ../the-patch.patch
# Applies most of the hunks, leaves .rej files for the ones that conflict
# Fix the conflicting hunks manually
$ git am --continue

Было бы неплохо, если бы мне не пришлось запускать патч командной строки, и просто это могло случиться как часть команды am.

Запуск с флагом --reject, кажется, создает файл .rej со всеми шестеренками в файле, если какой-либо конфликт, который не является тем, что я хочу.

Выполняется с флагом --3way с

fatal: sha1 information is lacking or useless (the-file.java).
Repository lacks necessary blobs to fall back on 3-way merge.
Cannot fall back to three-way merge.

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

Есть ли способ сделать git-am apply патч с нечетким совпадением, такой как команда raw patch, и создавать только файлы .rej, содержащие неработающие ханки?

4b9b3361

Ответ 1

Если я правильно понимаю вас, вы пытаетесь объединить код 1-го репо с другим, и вы не выполняете некоторые части кода. Затем вы исправляете его вручную, и теперь вы хотите, чтобы он был объединен без каких-либо ошибок.

В этом случае вы должны использовать git rerere

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

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

git config --global rerere.enabled true

Ответ 2

У этого есть задания запроса функции. Чтобы убедиться в этом, присоединитесь к списку рассылки Git (git @vger.kernel.org) и прочитайте его некоторое время, чтобы получить представление о культуре. В то же время проясните свои мысли, подготовив перед/после документации, как было предложено выше.

Когда вы почувствуете себя готовым, представитесь в списке и объясните свою идею. Обязательно рассмотрите вопрос о том, может ли эффект вашего предложения быть достигнут адекватно с помощью других средств. Если вы получите обнадеживающие слова, то последуйте за своей более подробной документацией. С обратной связью от вашего предложения в руке вы можете приступить к отправке ошибки функции-запроса, или вы можете найти себя на месте, чтобы создать патч для рассмотрения.

Ответ 3

На основе потока, который ссылается на @Nick Desaulniers выше, похоже, что использование параметра -3 для git apply/am будет работать, по крайней мере, в некоторой степени.

Например, здесь мой вывод с патчем, который не прошел с git apply:

$ git apply < patch_file.patch error: patch failed: file_being_patched.txt:489 error: file_being_patched.txt: patch does not apply $ git apply -3 < patch_file.patch error: patch failed: file_being_patched.txt:489 Falling back to three-way merge... Applied patch to 'file_being_patched.txt' cleanly.

Позор, который он по-прежнему дает ошибку (сложнее разобрать вывод в скриптах), и он не говорит, какой уровень fuzz был таким, как patch, так как уровень fuzz часто является хорошим показателем может ли команда патча ошибиться.