Форки: работа с чужими проектами

Учимся брать чужой проект, делать в нём изменения и предлагать их автору — основа open source.

Форк (fork) — ваша личная копия чужого репозитория на GitHub, в которую у вас есть полные права.

Зачем нужен форк

Допустим, вы нашли в open source проект и хотите исправить в нём баг. Напрямую запушить в чужой репозиторий вы не можете — у вас нет прав. Решение: нажать кнопку Fork на GitHub. Так появится копия проекта в вашем аккаунте, где вы — полноправный владелец. Там вы свободно работаете, а потом предлагаете изменения оригиналу через Pull Request.

Форк против клона

Форккопия репозитория в вашем аккаунте на GitHub, операция на сайте
Клонкопия репозитория на вашем компьютере, операция git

Типичный путь такой: форкаете на GitHub → клонируете свой форк к себе на машину.

git clone https://github.com/ВЫ/проект.git

Два remote: origin и upstream

Тут возникает тонкость. Ваш форк (origin) со временем отстанет от оригинального проекта, ведь там продолжают работу другие. Чтобы подтягивать свежие изменения из оригинала, добавляют второй remote — по соглашению его называют upstream:

git remote add upstream https://github.com/АВТОР/проект.git
git remote -v

Вывод:

origin	https://github.com/ВЫ/проект.git (fetch)
origin	https://github.com/ВЫ/проект.git (push)
upstream	https://github.com/АВТОР/проект.git (fetch)
upstream	https://github.com/АВТОР/проект.git (push)

Теперь origin — это ваш форк (туда пушите), а upstream — оригинал (оттуда тянете обновления).

Синхронизация форка

Подтянуть свежие изменения из оригинала в свою ветку main:

git fetch upstream
git switch main
git merge upstream/main
git push origin main

Так ваш форк снова актуален, и можно начинать новую правку от свежей базы.

Форк — основа open source

Модель «форк + Pull Request» — это то, как устроена вся открытая разработка. Вы не можете писать в чужой проект напрямую, но можете сделать его копию, улучшить и вежливо предложить улучшение автору. Так тысячи незнакомых людей совместно развивают огромные проекты вроде Linux или React, не имея прав на запись в главный репозиторий. Любой может предложить правку — а мейнтейнеры решают, принять её или нет.

Этикет контрибьютора

Прежде чем слать правку в чужой проект, загляните в файл CONTRIBUTING.md — в нём авторы описывают свои правила. Хороший тон: сначала обсудить идею в Issue, делать небольшие изменения, следовать стилю кода проекта и описывать суть правки в Pull Request. Уважение к чужим правилам сильно повышает шанс, что вашу работу примут.

Итог

  • Форк — личная копия чужого репозитория на GitHub, где у вас есть права.
  • Форк делается на сайте, клон — на компьютере; обычно сначала форк, потом клон.
  • Добавьте remote upstream на оригинал, чтобы подтягивать его обновления.
Проверьте себя
1. Что такое форк репозитория на GitHub?
AКопия проекта на вашем компьютере
BВаша личная копия чужого репозитория в вашем аккаунте на GitHub
CОтдельная ветка в оригинальном репозитории
DРезервная копия на сервере автора
2. Чем форк отличается от клона?
AЭто одно и то же
BФорк — копия на GitHub, клон — копия на вашем компьютере
CФорк работает только в приватных репозиториях
DКлон создаётся на сайте, а форк в терминале
3. Для чего к форку добавляют remote с именем upstream?
AЧтобы пушить свои изменения
BЧтобы подтягивать свежие обновления из оригинального репозитория
CЧтобы удалить форк
DЧтобы переименовать origin
Поддержать проект