Содержание
  1. Форк репозитория на GitHub
  2. Форк, клон и ветка: в чём разница
  3. Как сделать форк на GitHub: пошагово
  4. Системный вызов fork() в Unix
  5. Итог
  6. Частые вопросы
СправочникОбновлено · 07.2026

Что такое форк в программировании?

7 мая 2024 · 6 минут чтения

Форк в программировании: что это, зачем нужен и как сделать

Форк (от англ. 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 (локальная копия) → правки + commitgit push (в ваш форк) → Pull request → ревью автора → merge в оригинал.

Системный вызов fork() в Unix

Второй смысл слова «форк» не связан с Git. fork() — это системный вызов в Unix/Linux, который создаёт новый процесс, копируя текущий. Исходный процесс называют родительским (parent), новый — дочерним (child). Дочерний получает почти точную копию памяти и состояния родителя.

Ключевая деталь — что возвращает вызов. После fork() исполнение продолжается в обоих процессах, но с разными возвращаемыми значениями: в родительском fork() возвращает PID (идентификатор) созданного дочернего процесса, а в самом дочернем — 0. По этому значению программа понимает, в каком из двух процессов она сейчас выполняется. При ошибке возвращается −1.

Что вернёт fork()

В родителе: 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).

Читайте также

3 материала