Рейтинг:1

Как ориентироваться на конкретную версию патча запроса на слияние (MR) на основе форка

флаг br

Я обновляю ядро ​​с 9.1.7 к 9.2.5, однако есть патч, который я не знаю, как обновить.

это относительный вопрос. Файл 2897638-48.патч в настоящее время используется. Тем временем работа над патчем продолжалась, и он был интегрирован в систему «запроса на слияние на основе форка (MR)».

Я открывал вопрос в прошлом по общему использованию системы MR, читайте Вот этот и документацию сайта Drupal, так что, по крайней мере, я знаю, как получить последний файл патча. Однако это не применимо, потому что я предполагаю, что это было целью для 9.3 версия.

Чтение список коммитов Я хотел бы попробовать установить патч при фиксации eaa43b0c10c6fff8595d72d23c0f40a028bf0a71 ("Очистка остатков"), потому что мне кажется, что это последний перед переключением на ветку 9.3.

Однако я не знаю, могу ли я получить файл .patch этой конкретной версии и как.

Рейтинг:2
флаг nr

Существует несколько способов применить одноразовый патч к проекту PHP на основе Composer. Классический способ заключается в использовании cweagans/композитор-патчи, как вы узнали.

эта статья подробно объясняет, как использовать Composer Patches для исправления ядра Drupal.

Вы можете использовать этот метод для применения этот патч, что является подходом, рекомендованным @catch в этот комментарий, включив это в свой композитор.json:

    "дополнительный": {
      "enable-patching": правда,
        "патчи": {
          "друпал/ядро": {
            «Разрешить настройку открытых идентификаторов сортировки Views»: «https://git.drupalcode.org/project/drupal/-/merge_requests/54.diff»
          }

Как упоминает @catch:

@Giuseppe87 вы можете использовать https://git.drupalcode.org/project/drupal/-/merge_requests/54.diff - хотя, чтобы применить стабильный патч, лучше загрузить его в каталог /patches в вашей кодовой базе, а затем добавить локальный путь патча в файл composer.

Чтобы следовать этим инструкциям, откройте Терминал и CD в корневой каталог вашего проекта Drupal 9.2, затем выполните следующие команды:

Патчи $ mkdir
$ cd патчи
$ wget https://git.drupalcode.org/project/drupal/-/merge_requests/54.diff
$ mv 54.diff configure-views-exposed-sort-identifiers.patch

Чтобы использовать локальный файл патча в своем проекте, а не удаленный патч на Drupal.org, ваш композитор.json будет выглядеть так:

    "дополнительный": {
      "enable-patching": правда,
        "патчи": {
          "друпал/ядро": {
            «Разрешить настройку открытых идентификаторов сортировки Views»: «patches/configure-views-exposed-sort-identifiers.patch»
          }

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

Есть еще один, относительно новый, метод установки патчей путем открытия Форк выпуска и мой первоначальный ответ рекомендовал этот метод, но здесь это не обязательно.

РЕДАКТИРОВАТЬ: После прочтения ваших комментариев ниже, похоже, ваша проблема в том, что !54 никогда не применялся к ветке 9.2 до перебазирования.

Возвращаясь к MR на GitHub, вы можете откатить последние два коммита, выбрав «Версия 9» MR:

Версия 9 запроса на слияние 54

Но даже в этом случае цель установлена ​​на 9.3, и неясно, как ее изменить с помощью веб-интерфейса.

Вам нужно будет следовать Git-инструкции для клонирования ядра Drupal в локальную среду разработки:

$ git клон https://git.drupalcode.org/project/drupal.git
$ cd друпал

Затем вернитесь в свою очередь задач и просмотрите инструкции, чтобы проверить ветку для вилки задач:

Инструкции по проверке ветки для вилки задачи

$ git remote add drupal-2897638 [email protected]:issue/drupal-2897638.git
$ git fetch друпал-2897638

Также проверьте ветку 9.2.x:

$ git checkout -b '9.2.x' --track drupal-2897638/'9.2.x'

Теперь вы хотите сгенерировать разницу между состоянием проекта при фиксации eaa43b0c и 9.2.х ветвь:

$ git оформить заказ eaa43b0c
$ git diff drupal-2897638/9.2.x > configure-views-exposed-sort-identifiers.patch

Это создаст патч между указанной вами фиксацией и веткой 9.2.x.

Тем не менее, это все еще может быть не то, что вы хотите. Патч, сгенерированный этим методом, состоит из более чем 230 000 строк кода:

$ wc -l configure-views-exposed-sort-identifiers.patch                    
230134 configure-views-exposed-sort-identifiers.patch

Возможно, указанный вами коммит git всегда основывался на ветке 9.3.x. Похоже, предстоит проделать еще много работы, чтобы воссоздать основную работу для этого патча и аккуратно применить его к ветке 9.x.

Трудно сказать наверняка, потому что eaa43b0c уже на 93 000 строк кода опережает ветку 9.3.x:

$ git diff 9.3.x | wc -l
93794

Легко принять как должное, сколько труда люди вложили в это программное обеспечение с открытым исходным кодом, на которое мы все полагаемся. Если вам требуются функциональные возможности, предоставляемые этим патчем, самый простой способ получить их — обновить проект Drupal до ветки 9.3.x немного раньше, чем вы бы предпочли. Тогда патч будет применяться корректно, и вам не нужно будет разбираться в этих 93 000 строк кода.

И последнее замечание — diff, сгенерированный Merge Request 54, составляет менее 1000 строк кода:

$ wc -l 54.diff                                                          
936 54.разн.

Возможно, вы сможете проверить ветку 9.x и применить каждое из этих 936 изменений вручную, чтобы сгенерировать файл исправления в вашей локальной сети. Это все равно потребует много работы, но, возможно, меньше работы, чем некоторые другие варианты.

Это не обычная ситуация; большинство Composer Patches на порядки меньше этого монстра.

Удачи!

Giuseppe avatar
флаг br
извините, мне не ясен ваш ответ: как я могу применить патч к конкретной ветке, если у меня нет файла для этой версии?
hotwebmatter avatar
флаг nr
@ Джузеппе, я обновил свой ответ. Дайте мне знать, если это сработает для вас!
Giuseppe avatar
флаг br
Спасибо за подробный ответ, но он не решает мою проблему. Я уже знал, как применить патч на «https://git.drupalcode.org/project/drupal/-/merge_requests/54.diff», поскольку я связался с исходным вопросом. Проблема в том, что файл работает с `9.3`, мне нужно заставить его работать с `9.2` и я не знаю, как (и возможно ли вообще) получить в мерж-реквесте файл, который хоть в какой-то момент существовал совместим с этой версией.
hotwebmatter avatar
флаг nr
@Giuseppe В этом случае у вас есть два варианта: вы можете открыть новую [ветвь задачи] (https://www.drupal.org/project/drupalorg/issues/3152637) и создать запрос на слияние с 9.2 в качестве родительской ветки. , или вы можете (возможно, проще) «git clone» репозиторий и использовать «git diff» для создания правильного файла исправления. У меня нет времени обновлять свой ответ сейчас, но, возможно, я смогу сделать это позже. Ваша настоящая проблема в том, что этот конкретный патч настолько огромен, что его очень трудно просмотреть.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.