Форк (fork, по-английски «вилка») — это копия чужого проекта, которую вы дальше развиваете сами. Чаще всего так называют копию репозитория на GitHub или GitFlic: вы нажимаете кнопку Fork, у вас в аккаунте появляется свой репозиторий с тем же кодом и историей, а свои правки вы можете предложить автору через pull request.
Тем же словом называют форк целого проекта, когда команда уходит со своим кодом, и системный вызов fork(), который копирует процесс в Unix. Если Git вам пока в новинку, сначала прочитайте Git простыми словами, там разобраны коммиты, ветки и пуш.
MerionGitlab CI/CD с нуля16 250 ₽4 месяца
PurpleSchoolОсновы Git3 999 ₽2 месяца
SkillboxОбучение Git22 500 ₽1 месяц
HexletОсновы GitБесплатно1 месяц
СлёрмGit: подготовка к курсам СлёрмаБесплатно1 месяц
НетологияПрофессия «Аналитик данных с нуля до middle»145 600 ₽12 месяцев
Что значит форк в программировании и не только

Слово пришло из английского, fork значит «развилка». Код шёл одной дорогой, а с какого-то коммита пошёл двумя. Глагол тоже прижился: форкнуть репозиторий значит сделать его форк, «форкнули проект» значит скопировали его и пошли своим путём.
| Значение | Где встречается | Что копируется |
|---|---|---|
| Форк репозитория | GitHub, GitFlic, GitLab, GitVerse | Репозиторий целиком: файлы, история коммитов, ветки |
| Форк проекта | Открытые программы и базы данных | Исходный код, вокруг которого собирается новая команда и новое имя |
| fork() в Unix | C, Python, системное программирование | Работающий процесс вместе с его памятью |
| Форк в блокчейне | Криптовалюты | Правила сети, которые с какого-то блока расходятся |
Дальше речь в основном про первое значение, потому что с ним сталкивается каждый, кто начинает работать с чужим кодом. Про блокчейн подробно рассказали в статье о блокчейн-разработчике.
Как сделать форк репозитория на GitHub
Нужен аккаунт на GitHub. Форкнуть можно любой публичный репозиторий, а приватный только тогда, когда у вас есть к нему доступ и владелец разрешил форки (справка GitHub о форках). Потренироваться удобно на учебном репозитории octocat/Spoon-Knife: его GitHub держит специально для этого.
На сайте GitHub кнопки подписаны по-английски, поэтому ниже они названы так же, как на экране. В русской справке GitHub форк переведён как «вилка», это машинный перевод того же слова.
- Откройте страницу репозитория, например github.com/octocat/Spoon-Knife.
- В правом верхнем углу нажмите Fork. Число рядом с кнопкой показывает, сколько форков у проекта уже есть.
- В поле «Owner» выберите, куда положить форк: в личный аккаунт или в организацию.
- В поле «Repository name» по умолчанию стоит имя оригинала. Поменяйте его, если хотите отличать свою копию.
- Поле «Description» заполнять не обязательно.
- Галочка «Copy the DEFAULT branch only» оставляет в форке только основную ветку. Для правок в чужом проекте её хватает, а без галочки скопируются все ветки.
- Нажмите Create fork. Откроется ваш репозиторий, а под его именем будет ссылка на оригинал.

То же самое делает одна команда GitHub CLI. Флаг --clone=true сразу скачивает форк на компьютер:
gh repo fork octocat/Spoon-Knife --clone=true
Все параметры форка описаны в справке GitHub «Fork a repository».
Форк на GitFlic
На российской платформе GitFlic кнопка подписана по-русски: «Форк», она тоже в правом верхнем углу страницы проекта. На странице создания можно назначить владельца, поменять название, язык программирования и приватность.
Одно ограничение стоит знать заранее: публичный форк приватного репозитория на GitFlic сделать нельзя. Об этом сказано в документации GitFlic.

Как работать с форком на компьютере
Форк живёт на сервере. Чтобы править код в редакторе, его клонируют на компьютер, а потом подключают второй адрес, оригинал. Его принято называть upstream, а сам форк Git после клонирования называет origin.
Ниже только то, что нужно для форка. Команды clone, fetch, merge и push подробно разбирают в базовых курсах по Git.
Вот вся последовательность:
# 1. Скачать свой форк
git clone https://github.com/ВАШ-ЛОГИН/Spoon-Knife.git
cd Spoon-Knife
# 2. Подключить оригинал
git remote add upstream https://github.com/octocat/Spoon-Knife.git
git remote -v
# 3. Забрать новое из оригинала и влить в свою main
git fetch upstream
git checkout main
git merge upstream/main
# 4. Отправить обновление в форк на GitHub
git push origin main
После git remote -v в списке должно быть четыре строки: origin и upstream, у каждого по адресу для fetch и для push. Когда в оригинале появились новые коммиты, git merge upstream/main отвечает так:
Updating 1c6eb17..9f20e10
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
Fast-forward значит, что своих коммитов в main у вас не было и Git просто передвинул ветку вперёд. Если были, Git сделает слияние и может попросить разрешить конфликт. Что делать с конфликтом, мы разбирали в статье про коммиты, ветки и слияние.
Шаг 4 легко забыть. Синхронизация через командную строку обновляет только копию на компьютере, форк на GitHub останется прежним, пока вы не сделаете
git push.
Без командной строки форк обновляют на сайте: над списком файлов вашего форка есть меню Sync fork, в нём кнопка Update branch. Если правки из оригинала конфликтуют с вашими, GitHub предложит открыть pull request и разобраться там (справка «Syncing a fork»).
Форк, клон и ветка: в чём разница
Три слова путают постоянно, потому что во всех трёх случаях вы работаете «со своей копией». Разница в том, где эта копия лежит и кто ей распоряжается.
| Форк | Клон | Ветка | |
|---|---|---|---|
| Где живёт | На сервере, в вашем аккаунте | На вашем компьютере | Внутри одного репозитория |
| Чем создаётся | Кнопка Fork или gh repo fork |
git clone |
git switch -c или git branch |
| Нужны ли права на запись в оригинал | Нет | Нет, чтобы скачать | Да, чтобы запушить ветку |
| Как правки попадают в оригинал | Pull request из форка | Через push в репозиторий, куда есть доступ | Pull request внутри репозитория |
GitHub в своей справке разводит их так: ветка живёт внутри одного репозитория, её берут, когда у вас есть доступ на запись, а форк считает отдельным репозиторием со своими настройками и правами (About forks).
- Работаете в своей команде и у всех есть доступ к репозиторию: хватит веток.
- Хотите поправить чужой открытый проект: делайте форк, внутри него ветку, а потом pull request. Как его оформить, чтобы приняли, разобрали в статье что такое pull request.
- Просто хотите запустить чужой код у себя: форк не нужен, достаточно клона.
Клон и форк вдобавок работают вместе: форк почти всегда клонируют, иначе код останется только в браузере. В больших командах правила для форков, веток и слияний настраивает отдельный человек, Git-специалист.
Форк проекта: когда команда уходит со своим кодом

У открытой программы лицензия разрешает взять код и выпускать свою версию под другим именем. Так появляются форки проектов. Причины бывают разные: разработчики разошлись с владельцем во взглядах на развитие, проект сменил хозяина или его забросили.
- LibreOffice вырос из OpenOffice.org, сейчас его развивает некоммерческая The Document Foundation (о проекте на сайте LibreOffice).
- MariaDB делают изначальные разработчики MySQL, и задумывалась она как замена MySQL без переделки приложений (о проекте на сайте MariaDB).
Технически такой форк начинается с той же кнопки или того же git clone. Отличается судьба: у проекта появляется своё имя, свои релизы, и с оригиналом он со временем расходится всё дальше.
Функция fork() в C и Python
В системном программировании fork() означает вызов операционной системы, который создаёт новый процесс копированием текущего. Новый процесс называют дочерним, а исходный родительским. Вызов возвращается дважды: в родителе приходит номер дочернего процесса, в потомке приходит 0, а при ошибке родитель получает -1 и новый процесс не создаётся (man fork(2)).
С fork() рано или поздно сталкивается каждый, кто пишет системные программы под Linux, например разработчик на Си.
Пример на C:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void) {
int x = 10;
pid_t pid = fork();
if (pid == -1) {
perror("fork");
return 1;
}
if (pid == 0) {
x = x + 5;
printf("Потомок: x = %d\n", x);
return 0;
}
wait(NULL);
printf("Родитель: x = %d\n", x);
return 0;
}
Вывод:
Потомок: x = 15
Родитель: x = 10
Потомок поменял x, а у родителя осталось 10: после fork у каждого процесса своя копия памяти. В Linux её копируют не сразу, а при первой записи (copy-on-write), поэтому сам вызов дешёвый. Если C у вас ещё не настроен, начните с инструкции как выбрать и установить компилятор C.
В Python то же самое делает os.fork(). Работает он только в Unix-подобных системах, на Windows этой функции нет (документация модуля os):
import os
x = 10
pid = os.fork()
if pid == 0:
x += 5
print("Потомок: x =", x, flush=True)
os._exit(0)
os.waitpid(pid, 0)
print("Родитель: x =", x)
Вывод тот же, что у примера на C. Зачем там flush=True, объясняем в следующем разделе. Как запускать такие файлы, рассказали в статье о запуске Python-скрипта через командную строку.
Частые ошибки и что с ними делать

Ошибки с форками почти всегда одни и те же. Ниже симптом, причина и что сделать.
- «fatal: ‘upstrem’ does not appear to be a git repository». Опечатка в имени удалённого репозитория. Проверьте имена командой
git remote -vи повторитеgit fetch upstream. - Pull request тянет чужие коммиты или конфликтует. Форк отстал от оригинала, а правки вы делали прямо в main. Обновите main из
upstreamи заводите под каждую задачу отдельную ветку от свежей main. - Push в оригинал не проходит. Прав на запись в чужой репозиторий у вас нет, и это нормально. Пушьте в свой форк (
git push origin имя-ветки), а в оригинал отправляйте pull request. - После синхронизации форк на GitHub не обновился. Вы сделали
fetchиmergeтолько локально. Нуженgit push origin mainили кнопка Update branch на сайте. - В Python пропал вывод дочернего процесса. Без
flush=Trueстрока потомка может не напечататься, если вывод перенаправлен в файл или в другую программу.os._exit()завершает процесс без сброса буферов вывода, так прямо сказано в документации os._exit(). Решение:flush=Trueвprintилиsys.stdout.flush()перед выходом.
Отдельно про приватные репозитории. Если у человека забирают доступ к приватному репозиторию, его форки этого репозитория удаляются, а локальные клоны остаются у него на компьютере. Так описано в справке GitHub о форках, и это повод не хранить секреты в коде даже в закрытом проекте.
Где освоить Git системно
Форк делается за минуту, а дальше начинается работа с ветками, слияниями и ревью. В командной разработке это ежедневные действия. Если хотите разобраться без пробелов, посмотрите курсы, где Git и GitHub проходят на практике. Ниже подборка таких курсов с ценами и отзывами учеников.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Gitlab CI/CD с нуля Перейти на сайт курса | 16 250 ₽ | 1354 ₽/мес. | 4 месяца | Обзор курса | |
| Gitlab CI/CD Перейти на сайт курса | 25 000 ₽ | 6250 ₽/мес. | 58 часов | Обзор курса | |
| Основы Git Перейти на сайт курса | 3999 ₽ | 2749 ₽/мес. | 2 месяца | Обзор курса | |
| Обучение Git Перейти на сайт курса | 22 500 ₽ | - | 1 месяц | Обзор курса | |
| Основы Git Перейти на сайт курса | Бесплатно | - | 1 месяц | Обзор курса |
Больше программ — в полном каталоге курсов по Git




