Форк в программировании: что это и как сделать форк репозитория на GitHub

Форк — это копия чужого репозитория в вашем аккаунте: её можно менять и предлагать правки автору через pull request.

Показываем, как сделать форк на GitHub и GitFlic, как обновлять его из оригинала и чем он отличается от клона и ветки.

Отдельно разбираем fork() в C и Python на проверенном коде.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3100 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3754 экспертных мнения Подписаться на Телеграм-канал
Обложка: Форк в программировании: что это и как сделать форк репозитория на GitHub

Форк (fork, по-английски «вилка») — это копия чужого проекта, которую вы дальше развиваете сами. Чаще всего так называют копию репозитория на GitHub или GitFlic: вы нажимаете кнопку Fork, у вас в аккаунте появляется свой репозиторий с тем же кодом и историей, а свои правки вы можете предложить автору через pull request.

Тем же словом называют форк целого проекта, когда команда уходит со своим кодом, и системный вызов fork(), который копирует процесс в Unix. Если Git вам пока в новинку, сначала прочитайте Git простыми словами, там разобраны коммиты, ветки и пуш.

Что значит форк в программировании и не только

Рой копирует репозиторий в свой аккаунт

Слово пришло из английского, fork значит «развилка». Код шёл одной дорогой, а с какого-то коммита пошёл двумя. Глагол тоже прижился: форкнуть репозиторий значит сделать его форк, «форкнули проект» значит скопировали его и пошли своим путём.

Значение Где встречается Что копируется
Форк репозитория GitHub, GitFlic, GitLab, GitVerse Репозиторий целиком: файлы, история коммитов, ветки
Форк проекта Открытые программы и базы данных Исходный код, вокруг которого собирается новая команда и новое имя
fork() в Unix C, Python, системное программирование Работающий процесс вместе с его памятью
Форк в блокчейне Криптовалюты Правила сети, которые с какого-то блока расходятся

Дальше речь в основном про первое значение, потому что с ним сталкивается каждый, кто начинает работать с чужим кодом. Про блокчейн подробно рассказали в статье о блокчейн-разработчике.

Как сделать форк репозитория на GitHub

Нужен аккаунт на GitHub. Форкнуть можно любой публичный репозиторий, а приватный только тогда, когда у вас есть к нему доступ и владелец разрешил форки (справка GitHub о форках). Потренироваться удобно на учебном репозитории octocat/Spoon-Knife: его GitHub держит специально для этого.

На сайте GitHub кнопки подписаны по-английски, поэтому ниже они названы так же, как на экране. В русской справке GitHub форк переведён как «вилка», это машинный перевод того же слова.

  1. Откройте страницу репозитория, например github.com/octocat/Spoon-Knife.
  2. В правом верхнем углу нажмите Fork. Число рядом с кнопкой показывает, сколько форков у проекта уже есть.
  3. В поле «Owner» выберите, куда положить форк: в личный аккаунт или в организацию.
  4. В поле «Repository name» по умолчанию стоит имя оригинала. Поменяйте его, если хотите отличать свою копию.
  5. Поле «Description» заполнять не обязательно.
  6. Галочка «Copy the DEFAULT branch only» оставляет в форке только основную ветку. Для правок в чужом проекте её хватает, а без галочки скопируются все ветки.
  7. Нажмите Create fork. Откроется ваш репозиторий, а под его именем будет ссылка на оригинал.
Кнопка Fork на странице репозитория octocat/Spoon-Knife на GitHub
Учебный репозиторий octocat/Spoon-Knife: кнопка Fork справа вверху, рядом счётчик форков. На 31 октября 2026 года их было 161 тысяча

То же самое делает одна команда GitHub CLI. Флаг --clone=true сразу скачивает форк на компьютер:

gh repo fork octocat/Spoon-Knife --clone=true

Все параметры форка описаны в справке GitHub «Fork a repository».

Форк на GitFlic

На российской платформе GitFlic кнопка подписана по-русски: «Форк», она тоже в правом верхнем углу страницы проекта. На странице создания можно назначить владельца, поменять название, язык программирования и приватность.

Одно ограничение стоит знать заранее: публичный форк приватного репозитория на GitFlic сделать нельзя. Об этом сказано в документации GitFlic.

Кнопка «Форк» на странице проекта в GitFlic
На GitFlic кнопка подписана по-русски и стоит там же, справа вверху. Цифра рядом показывает, сколько форков у проекта
Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Как работать с форком на компьютере

Форк живёт на сервере. Чтобы править код в редакторе, его клонируют на компьютер, а потом подключают второй адрес, оригинал. Его принято называть 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»).

CheckroiCheckroiПодборка курсов по Git364 курса • 32 школыСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Форк, клон и ветка: в чём разница

Три слова путают постоянно, потому что во всех трёх случаях вы работаете «со своей копией». Разница в том, где эта копия лежит и кто ей распоряжается.

Форк Клон Ветка
Где живёт На сервере, в вашем аккаунте На вашем компьютере Внутри одного репозитория
Чем создаётся Кнопка Fork или gh repo fork git clone git switch -c или git branch
Нужны ли права на запись в оригинал Нет Нет, чтобы скачать Да, чтобы запушить ветку
Как правки попадают в оригинал Pull request из форка Через push в репозиторий, куда есть доступ Pull request внутри репозитория

GitHub в своей справке разводит их так: ветка живёт внутри одного репозитория, её берут, когда у вас есть доступ на запись, а форк считает отдельным репозиторием со своими настройками и правами (About forks).

  • Работаете в своей команде и у всех есть доступ к репозиторию: хватит веток.
  • Хотите поправить чужой открытый проект: делайте форк, внутри него ветку, а потом pull request. Как его оформить, чтобы приняли, разобрали в статье что такое pull request.
  • Просто хотите запустить чужой код у себя: форк не нужен, достаточно клона.

Клон и форк вдобавок работают вместе: форк почти всегда клонируют, иначе код останется только в браузере. В больших командах правила для форков, веток и слияний настраивает отдельный человек, Git-специалист.

Форк проекта: когда команда уходит со своим кодом

Развилка рельсов как схема форка проекта

У открытой программы лицензия разрешает взять код и выпускать свою версию под другим именем. Так появляются форки проектов. Причины бывают разные: разработчики разошлись с владельцем во взглядах на развитие, проект сменил хозяина или его забросили.

Технически такой форк начинается с той же кнопки или того же git clone. Отличается судьба: у проекта появляется своё имя, свои релизы, и с оригиналом он со временем расходится всё дальше.

Функция fork() в C и Python

В системном программировании fork() означает вызов операционной системы, который создаёт новый процесс копированием текущего. Новый процесс называют дочерним, а исходный родительским. Вызов возвращается дважды: в родителе приходит номер дочернего процесса, в потомке приходит 0, а при ошибке родитель получает -1 и новый процесс не создаётся (man fork(2)).

С fork() рано или поздно сталкивается каждый, кто пишет системные программы под Linux, например разработчик на Си.

CheckroiCheckroiПодборка курсов по Linux158 курсов • 30 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Пример на 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-скрипта через командную строку.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Частые ошибки и что с ними делать

Рой доволен: форк обновлён без конфликтов

Ошибки с форками почти всегда одни и те же. Ниже симптом, причина и что сделать.

  1. «fatal: ‘upstrem’ does not appear to be a git repository». Опечатка в имени удалённого репозитория. Проверьте имена командой git remote -v и повторите git fetch upstream.
  2. Pull request тянет чужие коммиты или конфликтует. Форк отстал от оригинала, а правки вы делали прямо в main. Обновите main из upstream и заводите под каждую задачу отдельную ветку от свежей main.
  3. Push в оригинал не проходит. Прав на запись в чужой репозиторий у вас нет, и это нормально. Пушьте в свой форк (git push origin имя-ветки), а в оригинал отправляйте pull request.
  4. После синхронизации форк на GitHub не обновился. Вы сделали fetch и merge только локально. Нужен git push origin main или кнопка Update branch на сайте.
  5. В Python пропал вывод дочернего процесса. Без flush=True строка потомка может не напечататься, если вывод перенаправлен в файл или в другую программу. os._exit() завершает процесс без сброса буферов вывода, так прямо сказано в документации os._exit(). Решение: flush=True в print или sys.stdout.flush() перед выходом.

Отдельно про приватные репозитории. Если у человека забирают доступ к приватному репозиторию, его форки этого репозитория удаляются, а локальные клоны остаются у него на компьютере. Так описано в справке GitHub о форках, и это повод не хранить секреты в коде даже в закрытом проекте.

Где освоить Git системно

Форк делается за минуту, а дальше начинается работа с ветками, слияниями и ревью. В командной разработке это ежедневные действия. Если хотите разобраться без пробелов, посмотрите курсы, где Git и GitHub проходят на практике. Ниже подборка таких курсов с ценами и отзывами учеников.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Gitlab CI/CD с нуля
Перейти на сайт курса
MerionMerion16 250 ₽1354 ₽/мес.4 месяцаОбзор курса
Gitlab CI/CD
Перейти на сайт курса
Слёрм (Slurm)Слёрм25 000 ₽6250 ₽/мес.58 часовОбзор курса
Основы Git
Перейти на сайт курса
PurpleSchoolPurpleSchool3999 ₽2749 ₽/мес.2 месяцаОбзор курса
Обучение Git
Перейти на сайт курса
SkillboxSkillbox22 500 ₽ - 1 месяцОбзор курса
Основы Git
Перейти на сайт курса
HexletHexletБесплатно - 1 месяцОбзор курса

Больше программ — в полном каталоге курсов по Git

Часто задаваемые вопросы

Что такое форк простыми словами?

Это копия чужого проекта, которую вы развиваете сами. Чаще всего так называют копию репозитория на GitHub или GitFlic: она лежит в вашем аккаунте, а свои правки можно предложить автору через pull request.

Что значит форкнуть репозиторий?

Значит нажать кнопку Fork на странице чужого репозитория и получить его копию у себя в аккаунте, с файлами, историей коммитов и ветками. Оригинал при этом не меняется.

Чем форк отличается от клона?

Форк создаётся на сервере и живёт в вашем аккаунте на GitHub, клон скачивается на компьютер командой git clone. Обычно их используют вместе: сначала форк, потом клон форка, чтобы править код в редакторе.

Обновляется ли форк сам, когда меняется оригинал?

Нет. Форк обновляют вручную: на сайте через меню Sync fork и кнопку Update branch или в командной строке через git fetch upstream, git merge upstream/main и git push origin main.

Можно ли сделать форк приватного репозитория?

На GitHub можно, если у вас есть доступ к репозиторию и владелец разрешил форки. Форк приватного репозитория тоже будет приватным. На GitFlic сделать публичный форк приватного репозитория нельзя.

Что такое fork() в программировании?

Это системный вызов в Unix, который создаёт копию текущего процесса. В родительском процессе он возвращает номер дочернего, в дочернем возвращает 0, а при ошибке -1. В Python то же делает os.fork(), на Windows этой функции нет.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!