Яка різниця між Forking та Cloning на GitHub?


187

Мені хотілося б знати відмінності між створенням Fork проекту та cloneйого виконанням.

Чи можу я надсилати запити на витяг через GitHub, лише якщо я відправив проект?


2
Можливий дублікат « Чи справді git forks» - це клони git?
j08691

2
Для людей, які тут приземляються, шукають пояснення "вилки" з Git (не GitHub). На Git немає команди "fork". Це більше концепція GitHub (не Git). Відмінність легко забувається.
ambassallo

Відповіді:


113

В основному, так. A fork- це лише прохання GitHub клонувати проект і реєструвати його під вашим іменем користувача ; GitHub також відслідковує взаємозв'язок між двома сховищами, тому ви можете візуалізувати коміти та переходи між двома проектами (та іншими вилами).

Ви все ще можете вимагати, щоб люди витягували з вашого клонованого сховища, навіть якщо ви не користуєтесь цим, forkале вам доведеться мати справу з тим, щоб зробити його загальнодоступним. Або надішліть розробникам патчі (див. git format-patch), Що вони можуть застосувати до своїх дерев.


4
Forks потребує набагато більше роботи, ніж оновлення. Клон можна оновити простим git pull. Вилка приймає кілька команд. І не дивно, що майже кожна вилка, яку я дивлюсь, застаріла. Вилки схожі на проблему сховища Maven на стероїдах. Замість однієї застарілої репо (Maven) їх є тисячі (Git).
jww

@jww звучить як найкраще просто приклеювати клон - навіщо тоді використовувати виделку?
серуп

@serup - тому, що роздвоєна копія може бути відредагована, git pullтому існують певні відносини. Якщо ви клонували всю копію, то її сиділи на вашій власній локальній машині і відключили від оригінального репо.
JonH

134

Коли ви говорите, що ви Forking сховище, ви в основному створюєте копію сховища під вашим ідентифікатором GitHub. Тут слід зазначити, що будь-які зміни, внесені до оригінального сховища, будуть відображені у ваших роздрібних сховищах (потрібно отримати та перезавантажити). Однак якщо ви внесете якісь зміни у своє роздрібнене сховище, вам доведеться явно створити запит на витяг до оригінального сховища. Якщо ваш запит тягнути схвалений адміністратором оригінального сховища , то ваші зміни будуть фіксуватися / злилися з існуючим оригінальним кодом базою. До цього ваші зміни відображатимуться лише в копії, яку ви отримали .

Коротко:

Модель Fork & Pull дозволяє будь-якому роздрібнити наявне сховище та натиснути зміни на свою особисту виделку, не вимагаючи доступу до джерельного сховища. Потім зміни повинні бути витягнуті у сховище джерела технічним обслуговувачем проекту.

Зауважте, що після розгортання ви можете клонувати локальне сховище (те, що є вашим іменем) локально на вашій машині. Внесіть зміни до нього та відправте його у своє роздрібне сховище. Однак, щоб відобразити зміни в оригінальному сховищі, ваш запит на виклик повинен бути затверджений.

Кілька інших цікавих дискусій -

Чи справді git forke - це клони git?

Як оновити сховище GitHub forked?


24
"Головне, що слід зазначити тут, - це те, що будь-які зміни, внесені до оригінального сховища, будуть відображені у ваших роздрібних сховищах." Це трохи вводить в оману. AFAIK, зміни, внесені до вихідного сховища після вилки, не відображаються автоматично у вилці; ці зміни потрібно перемістити вручну. Зміни, що відбулися перед виделкою, хоч і копіюються у новий, коли натискаєте кнопку виделки.
Ajedi32

"будь-які зміни, внесені до оригінального сховища, будуть відображені у ваших роздрібних сховищах" .. дійсно ?? Не сподіваюсь автоматично
KansaiRobot

Я працював над проектом клієнта і використовував для роботи модель клонування та push. Одного разу я розпрощався, і я одразу отримав повідомлення про те, що потрібно роздрібнити на репо. Я справді не розумію, як це вважається неправильним?
користувач3075740

зміни, внесені до вихідного сховища після вилки, не відображаються автоматично у вилці, але для цього перевірте крок 3 цього блогу: - help.github.com/articles/fork-a-repo
Suhas Chikkanna

"будь-які зміни, внесені до оригінального сховища, будуть відображені у ваших роздрібних сховищах" - ви маєте на увазі, що це неможливо після клонування?
змінна

26
  • Проект Forked знаходиться у вашому онлайн-сховищі (репо).
  • Клонований проект є на вашій локальній машині (я зазвичай клонуюсь після розпалювання репо).

Ви можете взяти на себе зобов’язання в режимі онлайн-репо (або взяти на себе місцеве репо, а потім натиснути на онлайн-репо), а потім надіслати запит на тягу.

Керівник проекту може прийняти його, щоб отримати зміни в його основній інтернет-версії.


13

Клон - це те, де ви маєте належне дублювання та розділення між двома (можливо різними) версіями сховища. Коли в одну редакцію вноситься поправка, новий вміст повинен бути активно скопійований на інший репо, використовуючи команду push. І зміни в інших репо знайшли.

Коли ви розгортаєте репо, на сервері не потрібно дублювати вміст, оскільки обидві репозитори будуть використовувати той самий вміст [фіксованого об’єкта] з того самого сервера. «Трюк» полягає в управлінні різними точками зору користувача, щоб кожен користувач вважав, що має повну особисту копію репо. Натискання та виклики між виделками - це просто оновлення покажчиків користувача.

На нижчому рівні git робить те ж саме всередині. Якщо у вас є три різних файли, кожен з яких містить Hello World, то git просто "розкручує" свою єдину копію блоку Hello World і пропонує її в кожному з трьох місць, якщо потрібно.

Можливість розщедритися на сервері означає, що велика кількість зберігання Github в середньому не така велика, оскільки кожне тіло ділиться одним єдиним базовим репо.


5

У двох словах, Форкінг - це, мабуть, те саме, що "клонування під вашим ідентифікатором / профілем GitHub". Вилка в будь-який час краща, ніж клон, за кількома винятками, очевидно. Роздрібний сховище завжди контролюється / порівнюється з оригінальним сховищем на відміну від клонованого сховища. Це дозволяє відстежувати зміни, ініціювати запити на витяг, а також вручну синхронізувати зміни, зроблені в оригінальному сховищі, з роздвоєним.


5

Хоча відповідь @ AniketThakur дуже хороша. На таке питання ще ніхто не відповів.

Чи можу я надсилати запити на витяг через GitHub, лише якщо я відправив проект?

Ні. Якщо ви є учасником сховища, ви можете: зробити локальний клон. Зробіть місцеву гілку. Додати комісії до цієї гілки. Натисніть локальну гілку назад до github (створюючи віддалену гілку в процесі). Складіть запит на витягнення з проханням об'єднати цю гілку у головну гілку (або будь-яку гілку, яка вам подобається)


3

Якщо ви зробили те, на що натякнув запитуючий (забув розщедритися і просто локально клонував репо, внесли зміни і тепер потрібно надіслати запит на витягнення), ви можете повернутися до шляху:

  1. роздрібніть репо, на яке потрібно надіслати запит на тягу
  2. натисніть локальні зміни на пульт
  3. видати запит на тягу

2

Ще одна дивна тонка різниця в GitHub полягає в тому, що зміни в виделках не враховуються в журналі активності, поки ваші зміни не будуть виведені в оригінальний репо. Більше того, щоб змінити вилку на належний клон, мабуть, вам потрібно зв’язатися із службою підтримки Github.

З Чому мої внески не відображаються :

Коміт був зроблений виделкою

Комісії, зроблені виделкою, не враховуються до ваших внесків. Щоб змусити їх рахувати, потрібно виконати одне з наступних дій:

Відкрийте запит на потягнення, щоб ваші зміни були об'єднані в батьківський сховище. Щоб вилучити вилку і перетворити її в окремий сховище на GitHub, зверніться до служби підтримки GitHub . Якщо fork має власні форки, повідомте про підтримку, чи слід вилки переміщуватись із вашим сховищем у нову мережу чи залишатись у поточній мережі. Для отримання додаткової інформації див. " Про виделки ".


2

У двох словах, "fork" створює копію проекту, розміщеного на вашому власному акаунті GitHub.

"Clone" використовує програмне забезпечення git на вашому комп'ютері для завантаження вихідного коду, і вся історія версій на цьому комп'ютері

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.