Модель Fork и Pull Request
Рабочий процесс с форками — это стандартная модель совместной работы для проектов с открытым исходным кодом. Вместо того чтобы отправлять изменения напрямую в оригинальный репозиторий, вы создаёте собственную копию (форк), вносите изменения там, а затем предлагаете эти изменения обратно через pull request.
Зачем делать форк?
В большинстве open source проектов у вас нет права на push в основной репозиторий. Форк решает эту проблему:
- Вы получаете собственную копию репозитория, которой полностью управляете
- Вы можете свободно экспериментировать, не затрагивая оригинальный проект
- Вы предлагаете изменения через pull request, которые мейнтейнеры могут рассмотреть
Рабочий процесс с форками
1. Форк 2. Клон 3. Ветка
(GitHub) (ваш компьютер) (ваш компьютер)
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Оригинал │ │ Ваш │ │ feature │
│ Репо │──→ │ Форк │──→ │ ветка │
│ (upstream)│ │ (origin) │ │ │
└──────────┘ └──────────┘ └──────────┘
4. Коммит 5. Push 6. Pull Request
(ваш компьютер) (в ваш форк) (GitHub)
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Локальные│ │ Ваш │ │ Оригинал │
│ Коммиты │──→ │ Форк │──→ │ Репо │
│ │ │ (origin) │ PR │ (upstream)│
└──────────┘ └──────────┘ └──────────┘
Пошагово
1. Сделайте форк репозитория
На GitHub (или GitLab и т.д.) нажмите кнопку Fork. Это создаст копию репозитория под вашим аккаунтом.
2. Клонируйте ваш форк
git clone https://github.com/YOUR-USERNAME/project.git
cd project
Это настроит origin, указывающий на ваш форк.
3. Добавьте upstream-репозиторий
Подключитесь к оригинальному репозиторию, чтобы оставаться в курсе обновлений:
git remote add upstream https://github.com/ORIGINAL-OWNER/project.git
Теперь у вас два удалённых репозитория:
git remote -v
origin https://github.com/YOUR-USERNAME/project.git (fetch)
origin https://github.com/YOUR-USERNAME/project.git (push)
upstream https://github.com/ORIGINAL-OWNER/project.git (fetch)
upstream https://github.com/ORIGINAL-OWNER/project.git (push)
4. Создайте feature-ветку
Всегда работайте в ветке, никогда не напрямую в main:
git checkout -b fix-typo-in-readme
5. Внесите изменения и закоммитьте
# редактируйте файлы...
git add .
git commit -m "Fix typo in README introduction"
6. Отправьте в ваш форк
git push -u origin fix-typo-in-readme
7. Откройте Pull Request
На GitHub перейдите в ваш форк и нажмите "Compare & pull request". Напишите понятное описание ваших изменений и отправьте.
Синхронизация с оригиналом
Оригинальный репозиторий продолжает получать новые коммиты. Чтобы синхронизировать ваш форк:
git fetch upstream
git checkout main
git merge upstream/main
git push origin main
Это получает изменения из оригинального репозитория в ваш локальный main, а затем отправляет их в ваш форк.
Ключевые концепции
- origin — Ваш форк (у вас есть право на push)
- upstream — Оригинальный репозиторий (обычно вы только загружаете отсюда)
- Feature-ветки — Всегда создавайте ветку от
mainдля каждого изменения - Pull request — Механизм для предложения изменений обратно в upstream
- Синхронизация — Регулярно загружайте из upstream, чтобы ваш форк оставался актуальным
Когда использовать рабочий процесс с форками
- Участие в проектах с открытым исходным кодом
- Когда у вас нет права на запись в оригинальный репозиторий
- Когда требуется строгий code review перед слиянием
- В больших командах, где прямой push-доступ должен быть ограничен