# Приклад 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.git
```
- 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 -m ""
```
For a good commit message, please refer to 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.git) 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.git
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.git
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
```