Лучший способ «взломать» библиотеку, не разветвляя ее
Я использую 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).
@Mark, 👍0
1 ответ
Используйте локальный контроль версий и репозиторий по вашему выбору. Получите последнюю опубликованную версию библиотеки и внесите в нее свои изменения (я предполагаю, что вы уже делали это, возможно, несколько раз). Зарегистрируйте измененную версию библиотеки в локальном репозитории. Когда новая версия станет доступной, получите ее и объедините в локальный репозиторий.
Обновление:
Одна из проблем этого подхода заключается в том, что в итоге я получу вложенные репозитории.
Я пользуюсь старой школой управления исходным кодом — управлением файлами. rcs, в моем случае (не смейтесь). Я предполагаю, что ваши локальные изменения влияют только на один или несколько файлов библиотеки. Может ли такая простая вещь, как слияние на уровне файлов, решить вашу проблему (независимо от того, какой инструмент вы выберете для этого)?
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Ошибка "collect2.exe: error: ld returned 1 exit status"
- Не удалось найти заголовки из установленной библиотеки platformio
- Добавить библиотеку в проект CLion
- Создайть библиотеку при использовании PlatformIO
- Почему игнорируется параметр чувствительности (порог)
- Как получить исходные файлы для библиотек Arduino?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
Одна из проблем этого подхода заключается в том, что в итоге я получу вложенные репозитории. Каталог моего проекта уже является репозиторием git. Если я клонирую репозиторий библиотеки внутри, скажем, папки
lib
, он не будет помещен внутрь моего, поскольку он вложен. По крайней мере, мне это не удалось., @Mark@Mark: вы можете клонировать библиотеку за пределами каталога вашего проекта, зафиксировать свои изменения там в выделенной ветке, а затем включить ее в свой проект как подмодуль git. В качестве альтернативы вы можете рассмотреть возможность использования [поддерева git] (https://www.atlassian.com/git/tutorials/git-subtree)., @Edgar Bonet
@EdgarBonet да, поддерево git помогло (и для меня это фактическое решение моего вопроса). Я знал только подмодули git, которые сложны для такого сценария., @Mark