Приклад GIT
Внесок коду у PX4
Додавання функції до PX4 слідує за визначеним робочим процесом. Щоб поділитися своїми внесками в PX4, ви можете слідувати цьому прикладу.
Sign up for github if you haven't already
Fork the PX4-Autopilot repo (see here)
Клонуйте ваш форкнутий репозиторій на локальний комп'ютер
shcd ~/wherever/ git clone https://github.com/<your git name>/PX4-Autopilot.git
Зайдіть в новий каталог, ініціалізуйте та оновіть підмодулі, і додайте оригінальні upstream PX4-Autopilot
shcd 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 repositoryorigin
that points to your forked copy of the PX4 repository.Це може бути відмічено наступною командою:
shgit remote -v
Внесіть зміни, які ви хочете додати до основного.
Створіть нову гілку з значущим ім'ям, яке репрезентує вашу функцію
shgit checkout -b <your feature branch name>
you can use the command
git branch
to make sure you're on the right branch.Додайте зміни, які ви хочете бути частиною коміту, додавши відповідні файли
shgit add <file name>
If you prefer having a GUI to add your files see Gitk or
git add -p
.
sh
git commit -m "<your commit message>"
For a good commit message, please refer to the Source Code Management section.
Some time might have passed and the upstream main has changed. PX4 prefers a linear commit history and uses git rebase. Щоб включити найновіші зміни з початкової версії до локальної гілки, перейдіть до головної гілки
shgit checkout main
Потім зтягнути найновіші коміти з upstream main
shgit pull upstream main
Тепер ваш локальний головний репозиторій оновлений. Поверніться до своєї функціональної гілки та перебазуйте свою оновлену основну
shgit checkout <your feature branch name> git rebase main
Тепер ви можете відправляти свої локальні коміти у свій форкований репозиторій
shgit push origin <your feature branch name>
You can verify that the push was successful by going to your forked repository in your browser:
https://github.com/<your git name>/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 for comparison)
Готово! Відповідальні учасники PX4 тепер побачать ваш внесок і вирішать, чи хочуть вони інтегрувати його. Періодично перевіряйте, чи є у них питання по вашим змінам.
We recommend using PX4 make
commands to switch between source code branches. Це позбавить вас від необхідності запам’ятовувати команди для оновлення підмодулів і очищення артефактів збірки (файли збірки, які не видалено, призведуть до помилок «невідстежуваних файлів» після перемикання).
Переключитися між гілками:
Очистити поточну гілку, деініціалізувати підмодуль та видалити всі артефакти збірки:
shmake clean make distclean
Switch to a new branch or tag (here we first fetch the fictional branch "PR_test_branch" from the
upstream
remote):shgit fetch upstream PR_test_branch git checkout PR_test_branch
Отримати підмодулі для нової гілки:
shmake submodulesclean
Отримання конкретного релізу
Specific PX4 point releases are made as tags of the release branches, and are named using the format v<release>
. These are listed on Github here (or you can query all tags using git tag -l
).
To get the source code for a specific older release (tag):
Clone the PX4-Autopilot repo and navigate into PX4-Autopilot directory:
shgit clone https://github.com/PX4/PX4-Autopilot.git cd PX4-Autopilot
INFO
Ви можете повторно використовувати існуючий репозиторій, а не клонувати новий. In this case clean the build environment (see changing source trees):
shmake clean make distclean
:::
Код оформлення замовлення для конкретного тегу (наприклад, для мітки v1.13.0-beta2)
shgit checkout v1.13.0-beta2
Оновити підмодулі:
shmake 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/<release_number>
(e.g. release/v1.13
). The are listed here.
Щоб отримати гілку релізу:
Clone the PX4-Autopilot repo and navigate into PX4-Autopilot directory:
shgit clone https://github.com/PX4/PX4-Autopilot.git cd PX4-Autopilot
INFO
Ви можете повторно використовувати існуючий репозиторій, а не клонувати новий. In this case clean the build environment (see changing source trees):
shmake clean make distclean
:::
Отримати бажану гілку релізу. Наприклад, припустимо, що ви хочете джерело для PX4 v1.14:
shgit fetch origin release/1.14
Перевірте код гілки
shgit checkout release/1.14
Оновити підмодулі:
shmake submodulesclean
Оновити підмодулі
Існує кілька способів оновлення підмодуля. Either you clone the repository or you go in the submodule directory and follow the same procedure as in Contributing code to PX4.
Робити PR для оновлення підмодуля
Це необхідно після того, як ви зробили PR для репозиторію підмодуля X і виправлення помилки/додавання функції є в поточному основному основному підмодулю X. Оскільки прошивка все ще вказує на твердження до вашого оновлення, підмодуль запит на злиття обов'язковий таким чином, щоб підмодуль використовувався точками прошивки до найновішого коміту.
sh
cd Firmware
Створити нову гілку, яка описує виправлення / функцію оновлення підмодулів:
shgit checkout -b pr-some-fix
Перейти до підкаталогу підмодулів
shcd <path to submodule>
Підмодуль PX4 не обов'язково вказує на найновіший коміт. Тому для того, для того, щоб оформити замовлення основного і витягнути найновіший код першоджерела.
shgit checkout main git pull upstream main
Поверніться до каталогу прошивки та, як зазвичай, додайте, зафіксуйте та надішліть зміни.
shcd - git add <path to submodule> git commit -m "Update submodule to include ..." git push upstream pr-some-fix
Checkout pull requests
Ви можете перевірити чийсь запит на злиття (зміни ще не злиті), навіть якщо гілка зливання існує лише на форку з цієї людини. Зробіть наступне:
sh
git fetch upstream pull/<PR ID>/head:<branch name>
PR ID
is the number right next to the PR's title (without the #) and the <branch name>
can also be found right below the PR ID
, e.g. <the other persons git name>:<branch name>
. Після цього ви зможете побачити новостворену гілку локально за допомогою
sh
git branch
Потім перейдіть на цю гілку
sh
git checkout <branch name>
Common pitfalls
Force push to forked repository
Після завершення першого PR, люди зі спільноти PX4 переглянуть ваші зміни. У більшості випадків це означає, що ви повинні виправити свою місцеву гілку відповідно до розгляду. Після локальної зміни файлів гілку функцій потрібно знову базувати з останньою версією upstream/main. Однак після перебазування більше неможливо надіслати гілку функцій у ваш розгалужений репозиторій напряму, замість цього вам потрібно використати force push:
sh
git push --force-with-lease origin <your feature branch name>
Rebase merge conflicts
If a conflict occurs during a git rebase
, please refer to this guide.
Pull merge conflicts
If a conflict occurs during a git pull
, please refer to this guide.
Помилка збірки через застарілі 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