Что такое fork (форк) в контексте Git и GitHub/GitLab?

Ответ

Fork (форк) — это полная копия чужого репозитория на вашу учетную запись на платформе (GitHub, GitLab, Bitbucket). Это создает персональную удаленную точку для работы, позволяющую вносить изменения без прямого доступа к исходному проекту.

Отличие от git clone:

  • git clone создает локальную копию репозитория на вашем компьютере.
  • Fork сначала создает удаленную копию на платформе, которую затем можно клонировать локально.

Типичный рабочий процесс (workflow) для внесения вклада:

  1. Нажать кнопку "Fork" на странице исходного (upstream) репозитория на GitHub.
  2. Клонировать свой форк на локальную машину:
    git clone https://github.com/YOUR-USERNAME/REPOSITORY-NAME.git
  3. Добавить исходный репозиторий как удаленный upstream для синхронизации:
    git remote add upstream https://github.com/ORIGINAL-OWNER/REPOSITORY-NAME.git
  4. Создать ветку, внести изменения, сделать коммиты и отправить (push) их в свой форк.
  5. Создать Pull Request (PR) из ветки вашего форка в основную ветку исходного репозитория.

Важно: Форк не обновляется автоматически. Чтобы синхронизировать его с исходным проектом, нужно выполнить:

git fetch upstream
git merge upstream/main  # или rebase
git push origin main

Ответ 18+ 🔞

А, ну это ж классика, блядь! Форк, ёпта! Ситуация, знакомая каждому, кто хоть раз пытался не просто спиздить чужой код, а сделать это красиво, с возможностью потом сказать: "Смотрите, какой я молодец, я вам улучшил!"

Представь, ты гуляешь по Гитхабу, видишь чей-то репозиторий — красивый, ухоженный, но тебе в голову приходит гениальная идея, как его улучшить, или, что чаще, какую-то дичь туда добавить. Но ты же не можешь просто так прийти и начать там хуярить коммиты, как у себя дома. Тебя нахуй пошлют, и будут правы.

Вот тут-то и появляется наш спаситель — кнопка Fork. Это как взять чужую квартиру, но не вломившись в неё с ломом, а сделав её точную копию у себя в личном виртуальном пространстве. Получается твоя личная песочница, где ты можешь делать что угодно: перекрашивать стены, ломать перегородки, ставить унитаз в гостиную — исходному проекту от этого ни жарко ни холодно. Чистейшей воды волшебство, ядрёна вошь!

Теперь про отличия, а то народ путает, как мудаки.

  • git clone — это когда ты просто скачиваешь репозиторий к себе на комп. Как будто скопировал папку с флешки. Всё, локально есть, но связь с оригиналом — хуй с горы. Ты можешь там менять файлы, но отправить изменения обратно в чужой проект — нихуя не выйдет, если ты не имеешь прав.
  • Fork — это сначала создание твоей личной, официальной копии на самом Гитхабе. А уже потом эту свою копию ты клонируешь (git clone) к себе на машину. Это как получить не просто ксерокс документа, а его зарегистрированную у нотариуса копию, с которой уже можно работать официально.

Типичный сценарий, как не просрать всё и сделать правильно:

  1. Увидел репозиторий — жми кнопку "Fork". Гитхаб скопирует всё к тебе в аккаунт. Всё, теперь у тебя есть свой собственный проект-клон.
  2. Тащи эту свою копию к себе на комп:
    git clone https://github.com/ТВОЙ-НИКНЕЙМ/НАЗВАНИЕ-РЕПО.git

    Клонируешь всегда свой форк, а не оригинал! Это важно, ебать мои старые костыли.

  3. Чтобы не отстать от жизни и знать, что там в оригинале нового натворили, нужно добавить его как источник для обновлений. Делается это командой:
    git remote add upstream https://github.com/АВТОР-ОРИГИНАЛА/НАЗВАНИЕ-РЕПО.git

    upstream — это просто название, можешь назвать original или родительский_хуй, но все используют upstream, так что не выёбывайся.

  4. Работаешь в своей копии: создаёшь новую ветку, пишешь код, коммитишь, пушишь в свой форк на Гитхабе.
  5. Когда твой шедевр готов, на Гитхабе жмёшь кнопку "Pull Request". Это такое вежливое письмо автору оригинала: "Здравствуйте, я тут кое-что улучшил в вашем проекте, не хотите ли взглянуть и, если понравится, влить это к себе?".

И главный подвох, про который все забывают: форк не обновляется сам по себе! Оригинал живёт своей жизнью, а твоя копия так и будет пылиться в прошлом. Чтобы синхронизировать свою копию с актуальным состоянием оригинала, нужно выполнить нехитрый ритуал:

git fetch upstream          # Скачать все изменения из оригинала
git merge upstream/main     # Влить эти изменения в свою локальную ветку (или rebase, если ты мазохист)
git push origin main        # Отправить обновлённую историю в свой форк на Гитхабе

Вот и вся магия. Теперь ты не просто какой-то левый чел с локальной копией, а уважаемый контрибьютор с собственным форком. Почти как свой в доску, только на расстоянии Pull Request'а.