Рабочий процесс взносов
Это руководство проводит вас через полный процесс внесения вклада в XOOPS, от начальной настройки до объединенного pull request.
Предварительные требования
Заголовок раздела «Предварительные требования»Перед началом внесения вклада убедитесь, что у вас есть:
- Git установлен и настроен
- GitHub аккаунт (бесплатно)
- PHP 7.4+ для разработки XOOPS
- Composer для управления зависимостями
- Базовое знание рабочих процессов Git
- Знакомство с Кодексом поведения
Шаг 1: Заложить репозиторий
Заголовок раздела «Шаг 1: Заложить репозиторий»На веб-интерфейсе GitHub
Заголовок раздела «На веб-интерфейсе GitHub»- Перейдите в репозиторий (например,
XOOPS/XoopsCore27) - Нажмите кнопку Fork в верхнем правом углу
- Выберите, куда заложить (ваш личный аккаунт)
- Дождитесь завершения форка
Почему заложить?
Заголовок раздела «Почему заложить?»- Вы получаете собственную копию для работы
- Разработчикам не нужно управлять многими ветками
- Вы имеете полный контроль своего форка
- Pull Requests ссылаются на ваш форк и апстрим репо
Шаг 2: Клонировать ваш форк локально
Заголовок раздела «Шаг 2: Клонировать ваш форк локально»# Клонировать ваш форк (замените YOUR_USERNAME)git clone https://github.com/YOUR_USERNAME/XoopsCore27.gitcd XoopsCore27
# Добавить апстрим удаленный для отслеживания оригинального репозиторияgit remote add upstream https://github.com/XOOPS/XoopsCore27.git
# Проверить, что удаленные правильно установленыgit remote -v# origin https://github.com/YOUR_USERNAME/XoopsCore27.git (fetch)# origin https://github.com/YOUR_USERNAME/XoopsCore27.git (push)# upstream https://github.com/XOOPS/XoopsCore27.git (fetch)# upstream https://github.com/XOOPS/XoopsCore27.git (nofetch)Шаг 3: Установить окружение разработки
Заголовок раздела «Шаг 3: Установить окружение разработки»Установить зависимости
Заголовок раздела «Установить зависимости»# Установить зависимости Composercomposer install
# Установить зависимости разработкиcomposer install --dev
# Для разработки модуляcd modules/mymodulecomposer installНастроить Git
Заголовок раздела «Настроить Git»# Установить вашу идентичность Gitgit config user.name "Your Name"git config user.email "your.email@example.com"
# Опционально: установить глобальную конфигурацию Gitgit config --global user.name "Your Name"git config --global user.email "your.email@example.com"Запустить тесты
Заголовок раздела «Запустить тесты»# Убедиться, что тесты проходят в чистом состоянии./vendor/bin/phpunit
# Запустить конкретный набор тестов./vendor/bin/phpunit --testsuite unitШаг 4: Создать ветку функции
Заголовок раздела «Шаг 4: Создать ветку функции»Соглашение об именовании ветвей
Заголовок раздела «Соглашение об именовании ветвей»Следуйте этому шаблону: <type>/<description>
Типы:
feature/- Новая функцияfix/- Исправление ошибкиdocs/- Только документацияrefactor/- Рефакторинг кодаtest/- Добавление тестовchore/- Обслуживание, инструменты
Примеры:
# Ветка функцииgit checkout -b feature/add-two-factor-auth
# Ветка исправления ошибкиgit checkout -b fix/prevent-xss-in-forms
# Ветка документацииgit checkout -b docs/update-api-guide
# Всегда разветвляйте от upstream/main (или develop)git checkout -b feature/my-feature upstream/mainДержите ветку обновленной
Заголовок раздела «Держите ветку обновленной»# Перед началом работы синхронизируйте с апстримомgit fetch upstreamgit merge upstream/main
# Позже, если апстрим изменилсяgit fetch upstreamgit rebase upstream/mainШаг 5: Сделать ваши изменения
Заголовок раздела «Шаг 5: Сделать ваши изменения»Практики разработки
Заголовок раздела «Практики разработки»- Напишите код следуя стандартам PHP
- Напишите тесты для новой функциональности
- Обновите документацию при необходимости
- Запустите линтеры и форматеры кода
Проверки качества кода
Заголовок раздела «Проверки качества кода»# Запустить все тесты./vendor/bin/phpunit
# Запустить с покрытием./vendor/bin/phpunit --coverage-html coverage/
# Запустить PHP CS Fixer./vendor/bin/php-cs-fixer fix --dry-run
# Запустить PHPStan статический анализ./vendor/bin/phpstan analyse class/ src/Совершить хорошие изменения
Заголовок раздела «Совершить хорошие изменения»# Проверить что вы изменилиgit statusgit diff
# Подготовить конкретные файлыgit add class/MyClass.phpgit add tests/MyClassTest.php
# Или подготовить все измененияgit add .
# Совершить с описательным сообщениемgit commit -m "feat(auth): add two-factor authentication support"Шаг 6: Держать ветку синхронизированной
Заголовок раздела «Шаг 6: Держать ветку синхронизированной»Во время работы над функцией главная ветка может измениться:
# Получить последние изменения из апстримаgit fetch upstream
# Опция A: Переложить (предпочтительно для чистой истории)git rebase upstream/main
# Опция B: Объединить (проще но добавляет коммиты слияния)git merge upstream/main
# Если конфликты возникают, разрешить их затем:git add .git rebase --continue # или git merge --continueШаг 7: Отправить в свой форк
Заголовок раздела «Шаг 7: Отправить в свой форк»# Отправить вашу ветку в ваш форкgit push origin feature/my-feature
# На последующих отправкахgit push
# Если вы переложили, вам может понадобиться force push (используйте осторожно!)git push --force-with-lease origin feature/my-featureШаг 8: Создать pull request
Заголовок раздела «Шаг 8: Создать pull request»На веб-интерфейсе GitHub
Заголовок раздела «На веб-интерфейсе GitHub»- Перейдите в свой форк на GitHub
- Вы увидите уведомление о создании PR из вашей ветки
- Нажмите “Compare & pull request”
- Или вручную нажмите “New pull request” и выберите вашу ветку
Название и описание PR
Заголовок раздела «Название и описание PR»Формат названия:
<type>(<scope>): <subject>Примеры:
feat(auth): add two-factor authenticationfix(forms): prevent XSS in text inputdocs: update installation guiderefactor(core): improve performanceШаблон описания:
## ОписаниеКраткое объяснение того, что делает этот PR.
## Изменения- Изменено X с A на B- Добавлена функция Y- Исправлена ошибка Z
## Тип изменения- [ ] Новая функция (добавляет новую функциональность)- [ ] Исправление ошибки (исправляет проблему)- [ ] Нарушающее изменение (изменение API/поведения)- [ ] Обновление документации
## Тестирование- [ ] Добавлены тесты для новой функциональности- [ ] Все существующие тесты проходят- [ ] Проведено ручное тестирование
## Скриншоты (если применимо)Включите скриншоты before/after для изменений UI.
## Связанные проблемыCloses #123Related to #456
## Контрольный список- [ ] Код следует рекомендациям стиля- [ ] Проведена самопроверка собственного кода- [ ] Добавлены комментарии к сложному коду- [ ] Обновлена документация- [ ] Нет новых предупреждений- [ ] Тесты проходят локальноКонтрольный список проверки PR
Заголовок раздела «Контрольный список проверки PR»Перед отправкой убедитесь:
- Код следует стандартам PHP
- Тесты включены и проходят
- Документация обновлена (при необходимости)
- Нет конфликтов слияния
- Сообщения коммитов четкие
- Связанные проблемы упоминаются
- Описание PR детально
- Нет отладочного кода или консольных логов
Шаг 9: Ответить на обратную связь
Заголовок раздела «Шаг 9: Ответить на обратную связь»Во время рассмотрения кода
Заголовок раздела «Во время рассмотрения кода»- Внимательно прочитайте комментарии - Поймите обратную связь
- Задайте вопросы - Если неясно, запросите уточнение
- Обсудите альтернативы - Уважительно обсудите подходы
- Сделайте запрошенные изменения - Обновите вашу ветку
- Force-push обновленные коммиты - Если переписываете историю
# Сделайте измененияgit add .git commit --amend # Изменить последний коммитgit push --force-with-lease origin feature/my-feature
# Или добавьте новые коммитыgit commit -m "Address feedback on PR review"git push origin feature/my-featureОжидайте итерации
Заголовок раздела «Ожидайте итерации»- Большинству PR требуется несколько раундов обзора
- Будьте терпеливы и конструктивны
- Рассматривайте обратную связь как возможность учиться
- Разработчики могут предложить рефакторинг
Шаг 10: Слияние и очистка
Заголовок раздела «Шаг 10: Слияние и очистка»После одобрения
Заголовок раздела «После одобрения»Когда разработчики одобрят и объединят:
- GitHub автоматически объединяет или разработчик нажимает слияние
- Ваша ветка удаляется (обычно автоматически)
- Изменения находятся в апстриме
Локальная очистка
Заголовок раздела «Локальная очистка»# Переключиться на главную веткуgit checkout main
# Обновить главную с объединенными изменениямиgit fetch upstreamgit merge upstream/main
# Удалить локальную ветку функцииgit branch -d feature/my-feature
# Удалить из вашего форка (если не автоудалено)git push origin --delete feature/my-featureДиаграмма рабочего процесса
Заголовок раздела «Диаграмма рабочего процесса»graph LR A[Fork Repository] --> B[Clone Fork] B --> C[Create Branch] C --> D[Make Changes] D --> E[Commit & Push] E --> F[Create PR] F --> G{Review} G -->|Approved| H[Merge] G -->|Changes Needed| I[Update PR] I --> G H --> J[Cleanup] J --> K[Done]Обычные сценарии
Заголовок раздела «Обычные сценарии»Синхронизация перед началом
Заголовок раздела «Синхронизация перед началом»# Всегда начинайте свежимgit fetch upstreamgit checkout -b feature/new-thing upstream/mainДобавление дополнительных коммитов
Заголовок раздела «Добавление дополнительных коммитов»# Просто отправьте сноваgit add .git commit -m "feat: additional changes"git push origin feature/new-thingИсправление ошибок
Заголовок раздела «Исправление ошибок»# Последний коммит имеет неправильное сообщениеgit commit --amend -m "Correct message"git push --force-with-lease
# Вернуться в предыдущее состояние (осторожно!)git reset --soft HEAD~1 # Сохранить измененияgit reset --hard HEAD~1 # Отбросить измененияОбработка конфликтов слияния
Заголовок раздела «Обработка конфликтов слияния»# Переложить и разрешить конфликтыgit fetch upstreamgit rebase upstream/main
# Отредактировать конфликтные файлы для разрешения# Затем продолжитьgit add .git rebase --continuegit push --force-with-leaseЛучшие практики
Заголовок раздела «Лучшие практики»Делайте
Заголовок раздела «Делайте»- Держите ветки сосредоточенными на единственных проблемах
- Делайте маленькие логические коммиты
- Пишите описательные сообщения коммитов
- Часто обновляйте вашу ветку
- Тестируйте перед отправкой
- Документируйте изменения
- Быстро отвечайте на обратную связь
Не делайте
Заголовок раздела «Не делайте»- Работайте прямо на ветке main/master
- Объединяйте несвязанные изменения в одном PR
- Совершайте сгенерированные файлы или node_modules
- Force push после того, как PR публичный (используйте —force-with-lease)
- Игнорируйте отзывы кода
- Создавайте огромные PR (разбейте на меньшие)
- Совершайте чувствительные данные (API ключи, пароли)
Советы для успеха
Заголовок раздела «Советы для успеха»Общайтесь
Заголовок раздела «Общайтесь»- Спросите вопросы в проблемах перед началом работы
- Запросите руководство по сложным изменениям
- Обсудите подход в описании PR
- Быстро отвечайте на обратную связь
Следуйте стандартам
Заголовок раздела «Следуйте стандартам»- Просмотрите стандарты PHP
- Проверьте рекомендации отчётов об ошибках
- Прочитайте обзор взносов
- Следуйте рекомендациям pull request
Выучите кодовую базу
Заголовок раздела «Выучите кодовую базу»- Прочитайте существующий код паттернов
- Изучайте похожие реализации
- Поймите архитектуру
- Проверьте основные концепции
Связанная документация
Заголовок раздела «Связанная документация»- Кодекс поведения
- Рекомендации по pull request
- Отчёты об ошибках
- Стандарты кодирования PHP
- Обзор взносов
#xoops #git #github #contributing #workflow #pull-request