Sign in Join
Wiki copytemporary

Creating A Patch/ru: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Если вы хотите отправить улучшения в код FPC или Lazarus, вам нужно отправить патч, который разработчики могут легко слить с исходным кодом.
22
33Исключения:
44
551. файлы перевода .po следует отправлять как целые файлы
662. новые файлы должны быть отправлены как целые файлы с указанием места их размещения
77
88## Требования
99
1010Вам нужны версии Lazarus (или FPC) **trunk/для разработки**. Вы можете получить Lazarus(и FPC), используя SVN или Git.
1111
1212- Git: [[Getting Lazarus|Getting Lazarus development version]]. This is the native repository.
1313- SVN:
1414
1515`svn checkout --depth files `[`https://github.com/fpc/Lazarus/branches`](https://github.com/fpc/Lazarus/branches)` all`\
1616`cd all`\
1717`svn update --set-depth infinity main`
1818
1919`svn checkout --depth files `[`https://github.com/fpc/FPCSource/branches`](https://github.com/fpc/FPCSource/branches)` all`\
2020`cd all`\
2121`svn update --set-depth infinity main`
2222
23-> **Warning:** **Если вы отправляете исправления, <u>не</u> создавайте их на основе стабильных версиий Lazarus/FPC. Обычно версия для разработки сильно отличается от стабильной версии, так как разработчики применили множество улучшений и исправлений.**
23+> **Warning:** **Если вы отправляете исправления, не создавайте их на основе стабильных версиий Lazarus/FPC. Обычно версия для разработки сильно отличается от стабильной версии, так как разработчики применили множество улучшений и исправлений.**
2424
2525## Отличия платформы
2626
2727В инструкциях ниже предполагается, что вы открыли командную строку и переместились (команда cd) в каталог хранилища. Вот подробности:
2828
2929### Windows
3030
3131Предполагая, что вы извлекли Lazarus в C:\lazarus, откройте командную строку (cmd.exe) и введите «cd \lazarus».
3232
3333### *nix systems
3434
3535Предполагая, что вы извлекли Lazarus в ~/lazarus, откройте терминал и наберите "cd ~/lazarus".
3636
3737## Создание патча с использованием SVN
3838
3939``` bash
4040svn diff > mypatch.diff
4141```
4242
4343Это включает в себя все измененные файлы во всем хранилище SVN.
4444
4545Вы также можете определить отдельные файлы, чтобы убедиться, что туда не попал мусор, например. :
4646
4747``` bash
4848svn diff ide/main.pp ideintf/objectinspector.pp > mypatch.diff
4949```
5050
5151> **Note:** Если вы используете [TortoiseSVN](https://tortoisesvn.net/about.html) в Windows, вы можете выбрать папку, в которую Lazarus был извлечен в Windows Explorer, а затем щелкнуть правой кнопкой мыши, чтобы выбрать TortoiseSVN-\> Create Patch(Создать патч) ...
5252
5353См.также [[TortoiseSvn|Разрешение проблем]], если у вас имеются проблемы .
5454
5555## Создание патча с помощью Git
5656
5757Во-первых, разрабатывайте свой код в отдельной ветке!
5858
5959Пока ваша ветка разработки активна, вы можете создавать патчи всех ваших локальных коммитов:
6060
6161``` bash
6262git format-patch master
6363```
6464
6565Это создает набор исправлений с именами, такими как "0001-CommitMsg.patch", "0002-CommitMsg.patch" и так далее.
6666
6767Если вы хотите, чтобы все изменения были внесены в один патч, либо объедините коммиты, используя "git rebase -i ...", либо используйте следующую команду:
6868
6969``` bash
7070git format-patch master --stdout > mypatch.patch
7171```
7272
7373## Отправка патча
7474
7575Теперь у вас есть патч. Я бы посоветовал еще раз просмотреть файл, чтобы убедиться, что он выглядит нормально (без неожиданных изменений).
7676
7777Рекомендуемый способ отправки патча - через [bug tracker](http://bugs.freepascal.org), подробности см. [[How do I create a bug report/ru|Как создать отчет об ошибке]]. Если есть отчет о проблеме, исправляемой вашим патчем, используйте ее, в противном случае создайте новую проблему. Загрузите файл, чтобы прикрепить его к проблеме.
7878
7979## Использование веток Git-репозитория напрямую
8080
8181Можно использовать Git распределенным образом и для разработки Lazarus. По крайней мере, разработчики JuhaManninen и Alexander Klenin ("Ask") готовы принимать код в Git-репозитории.
8282
8383На практике хранилище должно быть разветвлено из зеркала Lazarus в GitHub. Код должен быть в отдельной ветке и перебазирован от ветки "upstream". Это еще не проверено, мы можем добавить больше деталей, когда кто-то на самом деле ответвится от репо и создаст код.
8484
8585Ограничением этой модели является то, что код должен принадлежать к области компетенции разработчиков, работающих с Git. Если код находится за пределами этой области, вы все равно можете использовать Git, но вы должны создавать патчи и отправлять их в bug tracker.
8686
8787## Применение патча
8888
8989Это объясняет, как применить чей-то патч к вашему локальному репозиторию. Вы можете протестировать патч с помощью переключателя --dry-run следующим образом:
9090
9191``` bash
9292patch --dry-run < somepatch.diff
9393```
9494
9595Вывод патченной программы будет идентичен действительному исправлению, только это не изменит файлы исходного кода. Очень удобно для тестирования, без вероятности испортить ваш исходник.
9696
9797### Патч, созданный с помощью "svn diff"
9898
9999Для окончательного исправления используйте следующую командную строку:
100100
101101``` bash
102102patch < somepatch.diff
103103```
104104
105105Если это не сработает, потому что макет пути вашей среды выполнения отличается от среды выполнения, в которой было создано исправление, вы можете указать *patch*'у удалить всю информацию о путях:
106106
107107``` bash
108108patch -p0 < somepatch.diff
109109```
110110
111111Любой инструмент с графическим интерфейсом для diff'ов в Windows также может обрабатывать эти патчи, включая TortoiseMerge.
112112
113113### Патч, созданный с помощью "git format-patch"
114114
115115#### Git
116116
117117Сам Git применяет патч так:
118118
119119``` bash
120120git apply 0001-gitpatch.patch
121121```
122122
123123#### patch
124124
125125Команда "patch" теперь поддерживает патчи в формате git с параметром -p1. Это проверено с патчем v.2.6.1 в Linux, старые версии могут не поддерживать его.
126126
127127``` bash
128128patch -p1 < 0001-gitpatch.patch
129129```
130130
131131"patch" также доступен для Windows, но есть инструменты и для работы с графическим интерфейсом.
132132
133133#### TortoiseMerge
134134
135135TortoiseMerge поддерживает исправление формата Git без проблем. Он устанавливается вместе с Tortoise SVN, но не встроен в проводник. Он должен быть открыт из меню «Пуск».
136136
137137ToDo: добавить больше инструментов с графическим интерфейсом, которые поддерживают патчи формата Git
138138
139139### Устранение неполадок
140140
141141Наконец, патчи могут иметь конец строки Unix/Linux (LF), в то время как ваш локальный файл имеет конец строки Windows (CR+LF) или наоборот. Вам придется преобразовать файл патча перед применением по крайней мере в Windows, так как прилагаемый файл patch.exe требователен к окончанию строки.
142142
143143В Windows patch.exe, поставляемый с FPC/Lazarus, очень требователен; возможно, вам повезет больше с patch.exe, поставляемым Git:
144144
145145```dos
146146"C:\Program Files (x86)\Git\bin\patch.exe" -p0 < mypatch.diff
147147```
148148
149149... или команда svn patch, доступная с SVN 1.7.
150150
151151## См.также
152152
153153- [[How do I create a bug report/ru|Как мне создать отчет об ошибке]] - общая информация о том, как отправлять сообщения об ошибках, что следует освещать в отчете об ошибках и как использовать систему отслеживания ошибок.
154154- [[Tips on writing bug reports|Советы по написанию отчетов об ошибках]] - подробная информация о том, что следует освещать в отчете об ошибках.
155155- [[Database bug reporting|Отчет об ошибках базы данных]] - cпециальная информация и примеры программ для ошибок базы данных.
156156- [[Moderating the bug tracker/ru|Модерирование багтрекера]]
157157
158158---
159159*From the Free Pascal wiki, page "Creating A Patch/ru", as it stood on 2022-01-13 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history