Difference between revisions of "Creating A Patch/ru"
m (→Создание патча с помощью Git: Remove defunct git-svn note) |
|||
(14 intermediate revisions by 3 users not shown) | |||
Line 10: | Line 10: | ||
== Требования == | == Требования == | ||
Вам нужны версии Lazarus (или FPC) '''trunk/для разработки'''. Вы можете получить Lazarus(и FPC), используя SVN или Git. | Вам нужны версии Lazarus (или FPC) '''trunk/для разработки'''. Вы можете получить Lazarus(и FPC), используя SVN или Git. | ||
− | * | + | |
− | * | + | * Git: [[Getting Lazarus#Getting_Lazarus_from_the_GitLab_server|Getting Lazarus development version]]. This is the native repository. |
+ | * SVN: | ||
+ | svn checkout --depth files https://github.com/fpc/Lazarus/branches all | ||
+ | cd all | ||
+ | svn update --set-depth infinity main | ||
+ | |||
+ | svn checkout --depth files https://github.com/fpc/FPCSource/branches all | ||
+ | cd all | ||
+ | svn update --set-depth infinity main | ||
{{Warning|'''Если вы отправляете исправления, <u>не</u> создавайте их на основе стабильных версиий Lazarus/FPC. Обычно версия для разработки сильно отличается от стабильной версии, так как разработчики применили множество улучшений и исправлений.'''}} | {{Warning|'''Если вы отправляете исправления, <u>не</u> создавайте их на основе стабильных версиий Lazarus/FPC. Обычно версия для разработки сильно отличается от стабильной версии, так как разработчики применили множество улучшений и исправлений.'''}} | ||
Line 24: | Line 32: | ||
Предполагая, что вы извлекли Lazarus в ~/lazarus, откройте терминал и наберите "cd ~/lazarus". | Предполагая, что вы извлекли Lazarus в ~/lazarus, откройте терминал и наберите "cd ~/lazarus". | ||
− | == | + | ==Создание патча с использованием SVN== |
<syntaxhighlight lang="bash">svn diff > mypatch.diff</syntaxhighlight> | <syntaxhighlight lang="bash">svn diff > mypatch.diff</syntaxhighlight> | ||
− | + | Это включает в себя все измененные файлы во всем хранилище SVN. | |
− | + | Вы также можете определить отдельные файлы, чтобы убедиться, что туда не попал мусор, например. : | |
<syntaxhighlight lang="bash">svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff</syntaxhighlight> | <syntaxhighlight lang="bash">svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff</syntaxhighlight> | ||
− | {{Note| | + | {{Note| Если вы используете [https://tortoisesvn.net/about.html TortoiseSVN] в Windows, вы можете выбрать папку, в которую Lazarus был извлечен в Windows Explorer, а затем щелкнуть правой кнопкой мыши, чтобы выбрать TortoiseSVN-> Create Patch(Создать патч) ...}} |
− | + | См.также [[TortoiseSvn#Troubleshooting|Разрешение проблем]], если у вас имеются проблемы . | |
− | == | + | ==Создание патча с помощью Git== |
− | + | Во-первых, разрабатывайте свой код в отдельной ветке! | |
− | + | ||
+ | Пока ваша ветка разработки активна, вы можете создавать патчи всех ваших локальных коммитов: | ||
<syntaxhighlight lang="bash">git format-patch master</syntaxhighlight> | <syntaxhighlight lang="bash">git format-patch master</syntaxhighlight> | ||
− | + | Это создает набор исправлений с именами, такими как "0001-CommitMsg.patch", "0002-CommitMsg.patch" и так далее. | |
− | + | Если вы хотите, чтобы все изменения были внесены в один патч, либо объедините коммиты, используя "git rebase -i ...", либо используйте следующую команду: | |
<syntaxhighlight lang="bash">git format-patch master --stdout > mypatch.patch</syntaxhighlight> | <syntaxhighlight lang="bash">git format-patch master --stdout > mypatch.patch</syntaxhighlight> | ||
− | + | ==Отправка патча== | |
− | + | Теперь у вас есть патч. Я бы посоветовал еще раз просмотреть файл, чтобы убедиться, что он выглядит нормально (без неожиданных изменений). | |
− | |||
− | |||
− | == | ||
− | |||
− | + | Рекомендуемый способ отправки патча - через [http://bugs.freepascal.org bug tracker], подробности см. [[How_do_I_create_a_bug_report/ru|Как создать отчет об ошибке]]. Если есть отчет о проблеме, исправляемой вашим патчем, используйте ее, в противном случае создайте новую проблему. Загрузите файл, чтобы прикрепить его к проблеме. | |
− | == | + | ==Использование веток Git-репозитория напрямую== |
− | + | Можно использовать Git распределенным образом и для разработки Lazarus. | |
− | + | По крайней мере, разработчики JuhaManninen и Alexander Klenin ("Ask") готовы принимать код в Git-репозитории. | |
− | + | На практике хранилище должно быть разветвлено из зеркала Lazarus в GitHub. | |
− | + | Код должен быть в отдельной ветке и перебазирован от ветки "upstream". | |
− | + | Это еще не проверено, мы можем добавить больше деталей, когда кто-то на самом деле ответвится от репо и создаст код. | |
− | + | Ограничением этой модели является то, что код должен принадлежать к области компетенции разработчиков, работающих с Git. | |
− | + | Если код находится за пределами этой области, вы все равно можете использовать Git, но вы должны создавать патчи и отправлять их в bug tracker. | |
− | == | + | ==Применение патча== |
− | + | Это объясняет, как применить чей-то патч к вашему локальному репозиторию. Вы можете протестировать патч с помощью переключателя --dry-run следующим образом: | |
<syntaxhighlight lang="bash">patch --dry-run < somepatch.diff</syntaxhighlight> | <syntaxhighlight lang="bash">patch --dry-run < somepatch.diff</syntaxhighlight> | ||
− | + | Вывод патченной программы будет идентичен действительному исправлению, только это не изменит файлы исходного кода. Очень удобно для тестирования, без вероятности испортить ваш исходник. | |
− | === | + | ===Патч, созданный с помощью "svn diff"=== |
− | + | Для окончательного исправления используйте следующую командную строку: | |
<syntaxhighlight lang="bash">patch < somepatch.diff</syntaxhighlight> | <syntaxhighlight lang="bash">patch < somepatch.diff</syntaxhighlight> | ||
− | + | Если это не сработает, потому что макет пути вашей среды выполнения отличается от среды выполнения, в которой было создано исправление, вы можете указать ''patch'''у удалить всю информацию о путях: | |
<syntaxhighlight lang="bash">patch -p0 < somepatch.diff</syntaxhighlight> | <syntaxhighlight lang="bash">patch -p0 < somepatch.diff</syntaxhighlight> | ||
− | + | Любой инструмент с графическим интерфейсом для diff'ов в Windows также может обрабатывать эти патчи, включая TortoiseMerge. | |
− | === | + | ===Патч, созданный с помощью "git format-patch"=== |
====Git==== | ====Git==== | ||
− | Git | + | Сам Git применяет патч так: |
<syntaxhighlight lang="bash">git apply 0001-gitpatch.patch</syntaxhighlight> | <syntaxhighlight lang="bash">git apply 0001-gitpatch.patch</syntaxhighlight> | ||
====patch==== | ====patch==== | ||
− | + | Команда "patch" теперь поддерживает патчи в формате git с параметром -p1. Это проверено с патчем v.2.6.1 в Linux, старые версии могут не поддерживать его. | |
<syntaxhighlight lang="bash">patch -p1 < 0001-gitpatch.patch</syntaxhighlight> | <syntaxhighlight lang="bash">patch -p1 < 0001-gitpatch.patch</syntaxhighlight> | ||
− | "patch" | + | "patch" также доступен для Windows, но есть инструменты и для работы с графическим интерфейсом. |
====TortoiseMerge==== | ====TortoiseMerge==== | ||
− | TortoiseMerge | + | TortoiseMerge поддерживает исправление формата Git без проблем. |
− | + | Он устанавливается вместе с Tortoise SVN, но не встроен в проводник. Он должен быть открыт из меню «Пуск». | |
− | ToDo: | + | ToDo: добавить больше инструментов с графическим интерфейсом, которые поддерживают патчи формата Git |
− | === | + | ===Устранение неполадок=== |
− | + | Наконец, патчи могут иметь конец строки Unix/Linux (LF), в то время как ваш локальный файл имеет конец строки Windows (CR+LF) или наоборот. Вам придется преобразовать файл патча перед применением по крайней мере в Windows, так как прилагаемый файл patch.exe требователен к окончанию строки. | |
− | + | В Windows patch.exe, поставляемый с FPC/Lazarus, очень требователен; возможно, вам повезет больше с patch.exe, поставляемым Git: | |
<syntaxhighlight lang="dos">"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff</syntaxhighlight> | <syntaxhighlight lang="dos">"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff</syntaxhighlight> | ||
− | ... | + | ... или команда svn patch, доступная с SVN 1.7. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ==См.также== | |
− | [[ | + | * [[How_do_I_create_a_bug_report/ru|Как мне создать отчет об ошибке]] - общая информация о том, как отправлять сообщения об ошибках, что следует освещать в отчете об ошибках и как использовать систему отслеживания ошибок. |
− | [[ | + | * [[Tips on writing bug reports|Советы по написанию отчетов об ошибках]] - подробная информация о том, что следует освещать в отчете об ошибках. |
− | [[ | + | * [[Database bug reporting|Отчет об ошибках базы данных]] - cпециальная информация и примеры программ для ошибок базы данных. |
− | [[ | + | * [[Moderating_the_bug_tracker/ru|Модерирование багтрекера]] |
Latest revision as of 00:08, 14 January 2022
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
日本語 (ja) │
português (pt) │
русский (ru) │
slovenčina (sk) │
Если вы хотите отправить улучшения в код FPC или Lazarus, вам нужно отправить патч, который разработчики могут легко слить с исходным кодом.
Исключения:
- файлы перевода .po следует отправлять как целые файлы
- новые файлы должны быть отправлены как целые файлы с указанием места их размещения
Требования
Вам нужны версии Lazarus (или FPC) trunk/для разработки. Вы можете получить Lazarus(и FPC), используя SVN или Git.
- Git: Getting Lazarus development version. This is the native repository.
- SVN:
svn checkout --depth files https://github.com/fpc/Lazarus/branches all cd all svn update --set-depth infinity main
svn checkout --depth files https://github.com/fpc/FPCSource/branches all cd all svn update --set-depth infinity main
Предупреждение: Если вы отправляете исправления, не создавайте их на основе стабильных версиий Lazarus/FPC. Обычно версия для разработки сильно отличается от стабильной версии, так как разработчики применили множество улучшений и исправлений.
Отличия платформы
В инструкциях ниже предполагается, что вы открыли командную строку и переместились (команда cd) в каталог хранилища. Вот подробности:
Windows
Предполагая, что вы извлекли Lazarus в C:\lazarus, откройте командную строку (cmd.exe) и введите «cd \lazarus».
*nix systems
Предполагая, что вы извлекли Lazarus в ~/lazarus, откройте терминал и наберите "cd ~/lazarus".
Создание патча с использованием SVN
svn diff > mypatch.diff
Это включает в себя все измененные файлы во всем хранилище SVN.
Вы также можете определить отдельные файлы, чтобы убедиться, что туда не попал мусор, например. :
svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff
См.также Разрешение проблем, если у вас имеются проблемы .
Создание патча с помощью Git
Во-первых, разрабатывайте свой код в отдельной ветке!
Пока ваша ветка разработки активна, вы можете создавать патчи всех ваших локальных коммитов:
git format-patch master
Это создает набор исправлений с именами, такими как "0001-CommitMsg.patch", "0002-CommitMsg.patch" и так далее.
Если вы хотите, чтобы все изменения были внесены в один патч, либо объедините коммиты, используя "git rebase -i ...", либо используйте следующую команду:
git format-patch master --stdout > mypatch.patch
Отправка патча
Теперь у вас есть патч. Я бы посоветовал еще раз просмотреть файл, чтобы убедиться, что он выглядит нормально (без неожиданных изменений).
Рекомендуемый способ отправки патча - через bug tracker, подробности см. Как создать отчет об ошибке. Если есть отчет о проблеме, исправляемой вашим патчем, используйте ее, в противном случае создайте новую проблему. Загрузите файл, чтобы прикрепить его к проблеме.
Использование веток Git-репозитория напрямую
Можно использовать Git распределенным образом и для разработки Lazarus. По крайней мере, разработчики JuhaManninen и Alexander Klenin ("Ask") готовы принимать код в Git-репозитории.
На практике хранилище должно быть разветвлено из зеркала Lazarus в GitHub. Код должен быть в отдельной ветке и перебазирован от ветки "upstream". Это еще не проверено, мы можем добавить больше деталей, когда кто-то на самом деле ответвится от репо и создаст код.
Ограничением этой модели является то, что код должен принадлежать к области компетенции разработчиков, работающих с Git. Если код находится за пределами этой области, вы все равно можете использовать Git, но вы должны создавать патчи и отправлять их в bug tracker.
Применение патча
Это объясняет, как применить чей-то патч к вашему локальному репозиторию. Вы можете протестировать патч с помощью переключателя --dry-run следующим образом:
patch --dry-run < somepatch.diff
Вывод патченной программы будет идентичен действительному исправлению, только это не изменит файлы исходного кода. Очень удобно для тестирования, без вероятности испортить ваш исходник.
Патч, созданный с помощью "svn diff"
Для окончательного исправления используйте следующую командную строку:
patch < somepatch.diff
Если это не сработает, потому что макет пути вашей среды выполнения отличается от среды выполнения, в которой было создано исправление, вы можете указать patch'у удалить всю информацию о путях:
patch -p0 < somepatch.diff
Любой инструмент с графическим интерфейсом для diff'ов в Windows также может обрабатывать эти патчи, включая TortoiseMerge.
Патч, созданный с помощью "git format-patch"
Git
Сам Git применяет патч так:
git apply 0001-gitpatch.patch
patch
Команда "patch" теперь поддерживает патчи в формате git с параметром -p1. Это проверено с патчем v.2.6.1 в Linux, старые версии могут не поддерживать его.
patch -p1 < 0001-gitpatch.patch
"patch" также доступен для Windows, но есть инструменты и для работы с графическим интерфейсом.
TortoiseMerge
TortoiseMerge поддерживает исправление формата Git без проблем. Он устанавливается вместе с Tortoise SVN, но не встроен в проводник. Он должен быть открыт из меню «Пуск».
ToDo: добавить больше инструментов с графическим интерфейсом, которые поддерживают патчи формата Git
Устранение неполадок
Наконец, патчи могут иметь конец строки Unix/Linux (LF), в то время как ваш локальный файл имеет конец строки Windows (CR+LF) или наоборот. Вам придется преобразовать файл патча перед применением по крайней мере в Windows, так как прилагаемый файл patch.exe требователен к окончанию строки.
В Windows patch.exe, поставляемый с FPC/Lazarus, очень требователен; возможно, вам повезет больше с patch.exe, поставляемым Git:
"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff
... или команда svn patch, доступная с SVN 1.7.
См.также
- Как мне создать отчет об ошибке - общая информация о том, как отправлять сообщения об ошибках, что следует освещать в отчете об ошибках и как использовать систему отслеживания ошибок.
- Советы по написанию отчетов об ошибках - подробная информация о том, что следует освещать в отчете об ошибках.
- Отчет об ошибках базы данных - cпециальная информация и примеры программ для ошибок базы данных.
- Модерирование багтрекера