Лучший способ «взломать» библиотеку, не разветвляя ее

library platformio vscode

Я использую Visual Studio Code и PlatformIO. Я добавил несколько библиотек в свой проект с помощью platformio.ini:

lib_deps = 
    olikraus/U8g2@^2.34.4
    crankyoldgit/IRremoteESP8266@^2.8.4
    plerup/EspSoftwareSerial@^6.16.1
    rlogiacco/CircularBuffer@^1.3.3
    https://github.com/me-no-dev/ESPAsyncWebServer.git
    makuna/NeoPixelBus@^2.7.0
    adafruit/Adafruit BusIO@^1.13.2
    bblanchon/ArduinoJson@^6.19.4
    adafruit/Adafruit PN532@^1.2.2
    khoih-prog/ESPAsync_WiFiManager@^1.15.1
    https://github.com/guestisp/ESP32AsyncDNSServer.git

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

Недостаток в том, что каждый раз, когда я снова загружаю библиотеки (или настраиваю другую машину разработки), я теряю все свои изменения.

Я также могу переместить загруженную библиотеку в подпапку lib/ в дереве проекта, удалив зависимость от lib_deps.

Интересно, есть ли более надежный способ сделать это, например, применить патч после загрузки кода (подобно yocto).

, 👍0


1 ответ


2

Используйте локальный контроль версий и репозиторий по вашему выбору. Получите последнюю опубликованную версию библиотеки и внесите в нее свои изменения (я предполагаю, что вы уже делали это, возможно, несколько раз). Зарегистрируйте измененную версию библиотеки в локальном репозитории. Когда новая версия станет доступной, получите ее и объедините в локальный репозиторий.

Обновление:

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

Я пользуюсь старой школой управления исходным кодом — управлением файлами. rcs, в моем случае (не смейтесь). Я предполагаю, что ваши локальные изменения влияют только на один или несколько файлов библиотеки. Может ли такая простая вещь, как слияние на уровне файлов, решить вашу проблему (независимо от того, какой инструмент вы выберете для этого)?

,

Одна из проблем этого подхода заключается в том, что в итоге я получу вложенные репозитории. Каталог моего проекта уже является репозиторием git. Если я клонирую репозиторий библиотеки внутри, скажем, папки lib, он не будет помещен внутрь моего, поскольку он вложен. По крайней мере, мне это не удалось., @Mark

@Mark: вы можете клонировать библиотеку за пределами каталога вашего проекта, зафиксировать свои изменения там в выделенной ветке, а затем включить ее в свой проект как подмодуль git. В качестве альтернативы вы можете рассмотреть возможность использования [поддерева git] (https://www.atlassian.com/git/tutorials/git-subtree)., @Edgar Bonet

@EdgarBonet да, поддерево git помогло (и для меня это фактическое решение моего вопроса). Я знал только подмодули git, которые сложны для такого сценария., @Mark