# Приклад GIT ## Внесок коду у PX4 Додавання функції до PX4 слідує за визначеним робочим процесом. Щоб поділитися своїми внесками в PX4, ви можете слідувати цьому прикладу. - [Sign up](https://github.com/signup) for github if you haven't already - Fork the PX4-Autopilot repo (see [here](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo)) - Клонуйте ваш форкнутий репозиторій на локальний комп'ютер ```sh cd ~/wherever/ git clone https://github.com//PX4-Autopilot.git ``` - Зайдіть в новий каталог, ініціалізуйте та оновіть підмодулі, і додайте оригінальні upstream PX4-Autopilot ```sh cd PX4-Autopilot git submodule update --init --recursive git remote add upstream https://github.com/PX4/PX4-Autopilot ``` - You should have now two remote repositories: One repository is called `upstream` that points to PX4/PX4-Autopilot, and one repository `origin` that points to your forked copy of the PX4 repository. - Це може бути відмічено наступною командою: ```sh git remote -v ``` - Внесіть зміни, які ви хочете додати до основного. - Створіть нову гілку з значущим ім'ям, яке репрезентує вашу функцію ```sh git checkout -b ``` you can use the command `git branch` to make sure you're on the right branch. - Додайте зміни, які ви хочете бути частиною коміту, додавши відповідні файли ```sh git add ``` If you prefer having a GUI to add your files see [Gitk](https://git-scm.com/book/en/v2/Git-in-Other-Environments-Graphical-Interfaces) or [`git add -p`](https://nuclearsquid.com/writings/git-add/). - ```sh git commit -s -m "feat(ekf2): add height fusion timeout" ``` Use [conventional commits](https://www.conventionalcommits.org/) format: `type(scope): description`. For details on types and scopes, see the [Source Code Management](../contribute/code.md#commits-and-commit-messages) section. - Some time might have passed and the [upstream main](https://github.com/PX4/PX4-Autopilot) has changed. PX4 prefers a linear commit history and uses [git rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing). Щоб включити найновіші зміни з початкової версії до локальної гілки, перейдіть до головної гілки ```sh git checkout main ``` Потім зтягнути найновіші коміти з upstream main ```sh git pull upstream main ``` Тепер ваш локальний головний репозиторій оновлений. Поверніться до своєї функціональної гілки та перебазуйте свою оновлену основну ```sh git checkout git rebase main ``` - Тепер ви можете відправляти свої локальні коміти у свій форкований репозиторій ```sh git push origin ``` - You can verify that the push was successful by going to your forked repository in your browser: `https://github.com//PX4-Autopilot.git` Там ви маєте побачити повідомлення, що нова гілка була відправлена у вашу репозиторію-форк. - Тепер настав час створити запит на злиття (PR). On the right hand side of the "new branch message" (see one step before), you should see a green button saying "Compare & Create Pull Request". Потім у ньому має бути перелік ваших змін, і ви можете (обов’язково) додати змістовний заголовок (у випадку PR з одним комітом, зазвичай це повідомлення коміту) і повідомлення (пояснити, що ви зробили, з якої причини. Check [other pull requests](https://github.com/PX4/PX4-Autopilot/pulls) for comparison) - Готово! Відповідальні учасники PX4 тепер побачать ваш внесок і вирішать, чи хочуть вони інтегрувати його. Періодично перевіряйте, чи є у них питання по вашим змінам. ## We recommend using PX4 `make` commands to switch between source code branches. Це позбавить вас від необхідності запам’ятовувати команди для оновлення підмодулів і очищення артефактів збірки (файли збірки, які не видалено, призведуть до помилок «невідстежуваних файлів» після перемикання). Переключитися між гілками: 1. Очистити поточну гілку, деініціалізувати підмодуль та видалити всі артефакти збірки: ```sh make clean make distclean ``` 2. Switch to a new branch or tag (here we first fetch the fictional branch "PR_test_branch" from the `upstream` remote): ```sh git fetch upstream PR_test_branch git checkout PR_test_branch ``` 3. Отримати підмодулі для нової гілки: ```sh make submodulesclean ``` ## Отримання конкретного релізу Specific PX4 point releases are made as tags of the [release branches](#get-a-release-branch), and are named using the format `v`. These are [listed on Github here](https://github.com/PX4/PX4-Autopilot/releases?q=release&expanded=true) (or you can query all tags using `git tag -l`). To get the source code for a _specific older release_ (tag): 1. Clone the PX4-Autopilot repo and navigate into _PX4-Autopilot_ directory: ```sh git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot ``` :::info Ви можете повторно використовувати існуючий репозиторій, а не клонувати новий. In this case clean the build environment (see [changing source trees](#changing-source-trees)): ```sh make clean make distclean ``` ::: 2. Код оформлення замовлення для конкретного тегу (наприклад, для мітки v1.13.0-beta2) ```sh git checkout v1.13.0-beta2 ``` 3. Оновити підмодулі: ```sh make submodulesclean ``` ## Щоб отримати гілку релізу Releases branches are branched of `main`, and used to backport necessary changes from main into a release. The branches are named using the format `release/` (e.g. `release/v1.13`). The are [listed here](https://github.com/PX4/PX4-Autopilot/branches/all?query=release). Щоб отримати гілку релізу: - Clone the PX4-Autopilot repo and navigate into _PX4-Autopilot_ directory: ```sh git clone https://github.com/PX4/PX4-Autopilot cd PX4-Autopilot ``` :::info Ви можете повторно використовувати існуючий репозиторій, а не клонувати новий. In this case clean the build environment (see [changing source trees](#changing-source-trees)): ```sh make clean make distclean ``` ::: - Отримати бажану гілку релізу. Наприклад, припустимо, що ви хочете джерело для PX4 v1.14: ```sh git fetch origin release/1.14 ``` - Перевірте код гілки ```sh git checkout release/1.14 ``` - Оновити підмодулі: ```sh make submodulesclean ``` ## Оновити підмодулі Існує кілька способів оновлення підмодуля. Either you clone the repository or you go in the submodule directory and follow the same procedure as in [Contributing code to PX4](#contributing_code). ## Робити PR для оновлення підмодуля Це необхідно після того, як ви зробили PR для репозиторію підмодуля X і виправлення помилки/додавання функції є в поточному основному основному підмодулю X. Оскільки прошивка все ще вказує на твердження до вашого оновлення, підмодуль запит на злиття обов'язковий таким чином, щоб підмодуль використовувався точками прошивки до найновішого коміту. ```sh cd Firmware ``` - Створити нову гілку, яка описує виправлення / функцію оновлення підмодулів: ```sh git checkout -b pr-some-fix ``` - Перейти до підкаталогу підмодулів ```sh cd ``` - Підмодуль PX4 не обов'язково вказує на найновіший коміт. Тому для того, для того, щоб оформити замовлення основного і витягнути найновіший код першоджерела. ```sh git checkout main git pull upstream main ``` - Поверніться до каталогу прошивки та, як зазвичай, додайте, зафіксуйте та надішліть зміни. ```sh cd - git add git commit -m "Update submodule to include ..." git push upstream pr-some-fix ``` ## Checkout pull requests Ви можете перевірити чийсь запит на злиття (зміни ще не злиті), навіть якщо гілка зливання існує лише на форку з цієї людини. Зробіть наступне: ```sh git fetch upstream pull//head: ``` `PR ID` is the number right next to the PR's title (without the #) and the `` can also be found right below the `PR ID`, e.g. `:`. Після цього ви зможете побачити новостворену гілку локально за допомогою ```sh git branch ``` Потім перейдіть на цю гілку ```sh git checkout ``` ## Common pitfalls ### Force push to forked repository Після завершення першого PR, люди зі спільноти PX4 переглянуть ваші зміни. У більшості випадків це означає, що ви повинні виправити свою місцеву гілку відповідно до розгляду. Після локальної зміни файлів гілку функцій потрібно знову базувати з останньою версією upstream/main. Однак після перебазування більше неможливо надіслати гілку функцій у ваш розгалужений репозиторій напряму, замість цього вам потрібно використати force push: ```sh git push --force-with-lease origin ``` ### Rebase merge conflicts If a conflict occurs during a `git rebase`, please refer to [this guide](https://docs.github.com/en/get-started/using-git/resolving-merge-conflicts-after-a-git-rebase). ### Pull merge conflicts If a conflict occurs during a `git pull`, please refer to [this guide](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line#competing-line-change-merge-conflicts). ### Помилка збірки через застарілі git теги The build error `Error: PX4 version too low, expected at least vx.x.x` occurs if git tags are out of date. Це можна вирішити шляхом отримання тегів репозиторію upstream : ```sh git fetch upstream --tags ```