GitHub -- Fork и upstream
Fork — личная копия чужого репозитория в твоём аккаунте GitHub; upstream — оригинальный репозиторий, от которого сделан fork.
Зачем нужно
Fork нужен для contribution в open source: нет прав пушить напрямую в чужой репозиторий, поэтому создаётся собственная копия, вносятся изменения, затем отправляется Pull Request в оригинал. Связь с upstream позволяет синхронизировать fork с новыми изменениями в оригинале.
Где используется
- Contribution в open source проекты (Vue, React, любые npm-пакеты)
- Доработка чужих библиотек под свои нужды без PR в оригинал
- Работа с репозиторием организации без прямых прав на push
Основной контент
Схема работы
upstream (оригинал) fork (твоя копия на GitHub)
github.com/vuejs/vue → github.com/yourname/vue
↑ │
│ Pull Request ↓
└──────────────────── local clone
Fork репозитория
- Открыть репозиторий на GitHub
- Кнопка Fork → выбрать свой аккаунт
- GitHub создаёт копию в твоём аккаунте
Локальная работа
# 1. Клонировать свой fork (не оригинал!)
git clone https://github.com/yourname/vue.git
cd vue
# 2. Добавить upstream как remote
git remote add upstream https://github.com/vuejs/vue.git
# 3. Проверить remotes
git remote -v
# origin https://github.com/yourname/vue.git (fetch)
# origin https://github.com/yourname/vue.git (push)
# upstream https://github.com/vuejs/vue.git (fetch)
# upstream https://github.com/vuejs/vue.git (push)
Синхронизация с upstream
# Получить изменения из оригинала
git fetch upstream
# Обновить свою main-ветку
git switch main
git merge upstream/main
# или через rebase для чистой истории:
git rebase upstream/main
# Запушить обновления в свой fork
git push origin main
Полный цикл contribution
# 1. Синхронизировать с upstream
git fetch upstream
git switch main
git merge upstream/main
# 2. Создать ветку для изменений
git switch -c fix/typo-in-readme
# 3. Внести изменения
# ... редактируй файлы ...
git add README.md
git commit -m "docs: исправить опечатку в README"
# 4. Запушить в свой fork
git push origin fix/typo-in-readme
# 5. Создать Pull Request на GitHub:
# yourname/vue:fix/typo-in-readme → vuejs/vue:main
Частые ошибки
- Клонировать upstream вместо fork — нет прав на push в чужой репозиторий; клонируй свой fork (origin)
- Не синхронизировать с upstream — fork отстаёт от оригинала, при PR будут конфликты
- Пушить напрямую в main fork — создавай ветки для каждого изменения; main используй только для синхронизации с upstream
- Путаница origin и upstream —
origin= твой fork,upstream= оригинал