linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Open Source/fork-vs-clone

kb/oss ── Open Source ── beginner

Fork vs clone

Clone - это локальная копия репо. Fork - это копия **на сервере** под твоим аккаунтом. В open-source ты обычно делаешь fork (получаешь права записи на свою копию), потом clone форка (работаешь локально), и PR из форка в оригинал.

view as markdownaka: fork-or-clone, github-fork

Два слова, легко спутать. Это разные операции, на разных уровнях.

Clone - локальная копия

bash
git clone git@github.com:original/repo.git

Что делает: создаёт локальную копию репо на твоей машине. Удалённый репозиторий остаётся прежним. У тебя есть всё: история, ветки, теги. Но writes (push) - только если у тебя есть права в original/repo. Если нет - git push откажется.

Подробности - в clone.

Fork - копия на сервере

Делается через UI форджи: кнопка «Fork» на GitHub/GitLab/Bitbucket. Что происходит: GitHub создаёт под твоим аккаунтом полную копию репо:

Было:      github.com/original/repo
Стало:     github.com/original/repo
           github.com/you/repo        ← твоя копия

Это не локально. Это серверная операция: на GitHub теперь два репозитория, твой fork и оригинал. Ты полный владелец своего fork'а - можешь push'ить, делать ветки, удалять, что угодно. На оригинал твой fork никак не влияет.

Типичный flow в open-source

1. Fork (на GitHub UI):    original/repo → you/repo
2. Clone своего fork'а:    git clone git@github.com:you/repo.git
3. (опционально) добавить оригинал как upstream - см. [[upstream-vs-origin]]
4. Делать изменения, push в свой fork
5. На GitHub открыть PR: you:feature → original:main

Это и есть «fork-flow». В большинстве крупных open-source проектов внешним контрибьюторам нельзя пушить напрямую в оригинал - у них просто нет прав. Fork обходит это: у тебя есть права на свой fork, в нём ты делаешь работу, оригинал получает изменения только через PR.

Когда fork НЕ нужен

Если ты член команды оригинала с правами writer'а - fork не нужен. Цикл проще:

1. Clone оригинала
2. Branch внутри, push в оригинал
3. PR из ветки в main, всё внутри одного репо

В небольших командах работают именно так. Fork - это обход отсутствия прав, не «правильный способ».

Чем fork отличается от clone технически

ЧтоCloneFork
Где живётЛокально, твой дискНа сервере, твой GitHub-аккаунт
Кто инициируетgit clone командаUI на форджи
Влияет на оригиналНетНет
Нужен GitHubНет (работает с любым git URL)Да (forge-specific фича)
Сколько раз можноСколько хочешьОдин fork на аккаунт
Можно pull from upstreamДа (через upstream-vs-origin)Да (плюс кнопка Sync на GitHub)

Один fork - одна копия. Если хочешь несколько - нужен другой аккаунт или организация.

Sync fork с upstream

Со временем оригинал уходит вперёд, твой fork отстаёт. Sync:

Через UI: кнопка «Sync fork» на странице fork'а в GitHub. Сделает fast-forward, если возможно.

Через CLI:

bash
git fetch upstream
git switch main
git rebase upstream/main
git push origin main

CLI работает в любом setup'е, UI - только когда у вас обычный flow. Подробнее в upstream-vs-origin.

Когда fork против clone - это решение

  • Хочешь править свой проект: clone, ничего больше не надо.
  • Хочешь править чужой open-source: fork → clone своего форка.
  • Хочешь использовать чужой код, не править: clone. Fork - лишний шаг.
  • Хочешь сделать свою версию чужого проекта (например, после разногласий с автором): fork (можешь использовать как hard fork, развивать независимо).

Подводные камни

  • «Я форкнул, теперь push в оригинал». Нет: fork - это твоя копия, push в неё. В оригинал - через PR. См. upstream-vs-origin.
    • Fork устаревает. Через год без sync - много дней позади оригинала. Перед PR - обязательно fetch upstream + rebase.
    • Fork удалён с GitHub - все ветки и issue с ним. PR из него в оригинал тоже превратится в «invalid». Делай backup, если на форке есть незаслитые ветки.
  • Private fork публичного репо. На GitHub нельзя сделать fork публичного в приватный напрямую - нужен Import через UI или зеркалирование (mirror push). С GPL это легально, пока ты держишь модификации у себя: GPL накладывает обязанности (раскрыть исходник
    • сохранить копилефт) только в момент распространения бинаря или исходника наружу, личное использование не ограничено.

§ см. также

  • clonegit cloneСоздаёт локальную копию удалённого репозитория. Под капотом - `init` + добавление origin + `fetch` всей истории + `checkout` основной ветки. Самая первая команда при работе с чужим проектом.
  • upstream-vs-originupstream vs originДва общепринятых имени remote. `origin` - куда клонировал (обычно свой fork). `upstream` - «настоящий» проект, у которого ты сделал fork. Это просто конвенция: ничего магического, оба имени можно переименовать.
  • pull-requestPull Request (PR)Запрос на влитие ветки в основную с прохождением ревью и CI. На GitHub/GitLab/Bitbucket - стандартный механизм совместной работы. Технически это не команда Git, а функция хостинга, надстроенная над веткой и серией коммитов.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки