Содержание
Что такое форк в программировании?
Черновик готовит редакция с помощью ИИ. За стандарт издания отвечает главный редактор — Валерий Курземнек.
Форк в программировании: что это, зачем нужен и как сделать
Форк (от англ. fork — «ответвление») — это независимая копия проекта, которую разработчик создаёт из чужого кода, чтобы менять его отдельно от оригинала. Слово используют в двух разных смыслах: форк репозитория на GitHub (копия проекта в своём аккаунте) и системный вызов fork() в Unix (порождение дочернего процесса). Ниже разбираем оба, но начинаем с более частого — форка репозитория.
Форк репозитория на GitHub
Форк репозитория — это новый репозиторий, который наследует код и настройки видимости исходного «upstream»-репозитория, но принадлежит уже вам (по определению из документации GitHub). Вы получаете полную копию проекта со своей историей коммитов, ветками, issues и pull request’ами. С оригиналом форк остаётся связан: GitHub помнит, откуда он сделан, и позволяет предлагать изменения обратно.
Типичный сценарий: вы нашли открытый проект, хотите исправить баг или добавить функцию, но прав на запись в чужой репозиторий у вас нет. Вместо того чтобы просить доступ, вы форкаете проект, правите свою копию и отправляете автору pull request — запрос на слияние. Автор решает, принять ваши изменения или нет.
Зачем форкают репозитории
- Вклад в open-source. Форк + pull request — стандартный способ предложить правку в чужой проект без прямого доступа.
- Своя версия проекта. Если видение расходится с оригиналом, форк становится отправной точкой для самостоятельного продукта. Так из MySQL вырос MariaDB, из OpenOffice — LibreOffice.
- Эксперименты. Форк даёт песочницу: можно ломать и переписывать, не затрагивая исходный репозиторий.
- Страховка. Копия сохраняет проект, если оригинал забросят или удалят.
Форк, клон и ветка: в чём разница

Эти три понятия постоянно путают, потому что все они про «копию кода». Но работают они на разных уровнях: форк и клон копируют весь репозиторий, ветка живёт внутри одного. Ключевое отличие форка — только из него, а не из простого клона, изменения можно влить обратно в оригинал через pull request (по документации GitHub).
Форк — копия репозитория на сервере GitHub, в вашем аккаунте. Самостоятельный проект со своей страницей, issues и связью с upstream.
Клон — копия репозитория на вашем компьютере, полученная командой git clone. Уровень технологии Git, не платформы.
Ветка — указатель на коммит внутри одного репозитория. Параллельная линия разработки без отдельной копии проекта.
| Критерий | Форк (fork) | Клон (clone) | Ветка (branch) |
|---|---|---|---|
| Уровень | Платформа (GitHub) | Технология Git | Технология Git |
| Где хранится | Сервер, ваш аккаунт | Ваш компьютер | Внутри репозитория |
| Отдельный репозиторий | Да | Да (локально) | Нет |
| Связь с оригиналом | Есть (upstream) | Есть (remote origin) | Общая история |
| Pull request в оригинал | Да | Нет напрямую | Внутри одного репо |
| Когда использовать | Правка чужого проекта | Работа с кодом локально | Своя фича в своём проекте |
На практике шаги часто идут вместе: сначала форкают проект на GitHub, затем клонируют форк на локальную машину, а работу ведут в отдельной ветке.
Как сделать форк на GitHub: пошагово
Шаг 1. Форк на GitHub
Откройте страницу нужного репозитория. В правом верхнем углу нажмите кнопку Fork. Если у вас несколько аккаунтов или организаций, GitHub спросит, куда поместить копию. Через несколько секунд копия появится в вашем аккаунте.
Шаг 2. Клонирование на компьютер
Откройте свой форк, нажмите Code, скопируйте URL и выполните в терминале:
git clone URL cd имя-проекта
Шаг 3. Изменения и коммит
Внесите правки в редакторе, затем зафиксируйте их в локальном репозитории:
git add . git commit -m "Описание ваших изменений"
Шаг 4. Отправка в свой форк
Загрузите коммиты обратно на GitHub, в вашу копию:
git push origin main
Шаг 5. Pull request в оригинал
Если хотите предложить правки исходному проекту, на странице форка нажмите Pull request. Убедитесь, что базовый репозиторий — оригинал (upstream), опишите изменения и нажмите Create pull request. Дальше решение за автором оригинала.
Оригинал (upstream) → Fork (копия в вашем аккаунте) → git clone (локальная копия) → правки + commit → git push (в ваш форк) → Pull request → ревью автора → merge в оригинал.
Системный вызов fork() в Unix
Второй смысл слова «форк» не связан с Git. fork() — это системный вызов в Unix/Linux, который создаёт новый процесс, копируя текущий. Исходный процесс называют родительским (parent), новый — дочерним (child). Дочерний получает почти точную копию памяти и состояния родителя.
Ключевая деталь — что возвращает вызов. После fork() исполнение продолжается в обоих процессах, но с разными возвращаемыми значениями: в родительском fork() возвращает PID (идентификатор) созданного дочернего процесса, а в самом дочернем — 0. По этому значению программа понимает, в каком из двух процессов она сейчас выполняется. При ошибке возвращается −1.
В родителе: PID дочернего процесса (положительное число).
В ребёнке: 0.
При ошибке: −1, дочерний процесс не создан.
Память процессов независима: у родителя и ребёнка свои приватные образы, и изменение переменной в одном не видно в другом. Ради экономии ядро использует механизм copy-on-write (COW) — страницы памяти сначала общие и помечены только для чтения, а фактическое копирование происходит лишь в момент записи.
Итог
«Форк» — это два разных инструмента под одним словом. В Git и на GitHub форк — независимая копия репозитория, через которую вносят вклад в чужие проекты и запускают собственные ответвления. В операционных системах fork() — механизм порождения процессов. Общий смысл один: взять существующее и продолжить отдельной веткой. Для новичка достаточно запомнить связку форк → клон → правки → pull request — это базовый маршрут работы с открытым кодом.
Частые вопросы
Чем форк отличается от клона?
Форк — это копия репозитория на сервере GitHub в вашем аккаунте, связанная с оригиналом. Клон — копия на вашем компьютере, полученная командой git clone. Из форка можно отправить pull request в оригинал, из простого клона — нет.
Форк — это то же самое, что ветка?
Нет. Ветка (branch) живёт внутри одного репозитория и делит с ним историю. Форк — отдельный полноценный репозиторий со своими ветками, issues и pull request’ами.
Можно ли вернуть изменения из форка в оригинал?
Да, через pull request. Вы предлагаете свои коммиты автору исходного проекта, а он решает, влить их или нет. Это возможно именно потому, что форк сохраняет связь с upstream-репозиторием.
Что возвращает fork() в Unix?
Родительскому процессу — PID дочернего процесса, дочернему — 0, а при ошибке — −1. По этому значению код различает, в каком процессе он выполняется.
Легально ли форкать чужой проект?
Форк открытого репозитория на GitHub — штатное действие платформы. Но дальнейшее использование кода регулируется лицензией проекта: перед публикацией своей версии проверьте условия (MIT, GPL, Apache и т. д.).
Источники: Документация GitHub о форках, man-страница fork(2).
