різниця між виделкою та гілкою на github


127

Якщо я розпрощаю проект, який розміщується на github. Я роздрібнюю всі гілки? Як я можу знати, на якій гілці базується моя вилка? Іншими словами, яку гілку буде завантажено на мій ПК?


1
Просте англійське пояснення: Гілка - це як вилка, що від батьківської вилки. Вилка - це як гілка, якій бракує батьківської гілки.
Кен Кін

Відповіді:


41

Усі гілки на GitHub будуть скопійовані виделкою. (Очевидно, що сюди не входять гілки, які ніколи не були натиснуті на GitHub.)

Але вилка - це операція GitHub-to-GitHub; нічого не копіюється на ваш ПК. Це не зовсім так, як клон Git . Якщо ви хочете запитати "що копіюється, коли я клоную проект?", Див. Посібник для git-clone(1).


153

Подумайте про це так:

Репо [сітори] відповідає співпраці колективу в одній або багатьох галузях. Усі доповідачі мають свою копію.

Кожна вилка головного репо відповідає твору дописувача. Вилка - це справді конструкція Github (не Git) для зберігання клона репо в обліковому записі користувача. Як клон, він буде містити всі гілки в основному репо в той момент, коли ви робили вилку.

Кожна гілка в межах вилки та / або в основному репо може відповідати декільком видам речей, залежно від того, як ви хочете працювати. Кожна гілка може посилатися на версію проекту, але також може відповідати різним каналам розвитку, як виправлення або експериментальна робота.

Запит тягнути (в екосистемі GitHub) відповідає завданню. Кожен раз, коли я хочу внести ізольоване закінчене завдання до основного репо, я створюю запит на витяг, відповідний комісіям, зробленим у цьому завданні. Ці комітети витягуються з моєї вилки або з моєї гілки до головної репо .

Фіксації являє собою набір змін в коді. Це одна з найцікавіших речей про Git. Ви не передаєте файли, ви переносите журнали змін.


4
сподобалось, як ви пояснили всі відповідні пов’язані біти, такі як зіставлення запиту на вилку / відділення. "ви не передаєте файли, ви передаєте журнали змін" ... я вже це знав, але ця фраза ідеальна!
harshvchawla

2
плюс-один для уточнення того, що вилка - це github, а не git. Дякую!
emery.noel

10

Fork - це клон на стороні GitHub (він клонує все).
Коли ви клонуєте репо, ви отримуєте всю історію згаданого репо з усіма його гілками.

Хоча теоретично ви можете змінити гілку за замовчуванням віддаленого репо , клон з репо GitHub в основному шукає головну гілку. Значення для зміни гілки "за замовчуванням" отримає клон GitHub, вам потрібно перейменувати головну гілку.


Тож коли я клоную роздвоєний репо (ефективно завантажую його на свій ПК), чи всі гілки на моєму ПК? Але в одній гілці були додані додаткові файли. Так у мого ПК будуть ці файли чи ні?
Джонатан.

1
@Jonathan: ваш ПК отримає всі гілки з усіма файлами. Але ваш робочий каталог (простір, де ви забуваєте одну з цих гілок) насправді буде єдиним простором, де ви побачите ці файли.
VonC

Отже, чи будуть інші файли фактично зберігатися у папці .git?
Джонатан.

@Jonathan: як вільні або запаковані об'єкти, див. Book.git-scm.com/7_how_git_stores_objects.html (об’єкти, які є блоб (ваші "файли"), дерево, коміт або тег: book.git-scm.com/ 1_the_git_object_model.html )
VonC

4

Якщо ви роздрібнюєте проект, ви робите копію всього проекту на свій рахунок git hub. ви нічого не справляєтеся з ПК

Щоб зробити копію на своєму ПК, вам потрібно її клонувати та витягувати всі речі, і ви отримаєте всі гілки та код цього проекту


2

Якщо ви створюєте роздрібнення проекту з веб-сайту Github, ви отримуєте всі гілки проекту вище.

Якщо ви клонуєтесь із щойно вичавленої виделки на ваш локальний ПК, originпульт дистанційного керування на вашому ПК буде вказувати на головну гілку вашого вила на Github.


Згідно зі сторінкою Help.GitHub Формування проекту - upstreamце те, що вам потрібно зробити; і вони говорять вам, як це зробити.
JC Саломон

2
Це віддалений, а не відділення.
Arrowmaster

1

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

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


1

Я хотів би поділитися прикладом із реального життя, коли ми використовуємо відділення та коли ми використовуємо Forks

У нас є GitLab у нашому магазині, і іноді нам доводиться працювати над пакетами проекту Laravel. Ми, як правило, створюємо гілку і підсилюємо зміни до гілки, яку ми тестували в нашому локальному середовищі розробників VM, працюючи з реальним проектом Laravel.

Скажімо, наш проект знаходиться за адресою

https://github.com/yardpenalty/mainproject.git

Використання філії:

Скажемо, гілка називається It_doesnt_matter

Після того, як у нас є філія так, як ми хочемо для виробництва, ми робимо остаточний поштовх до цієї гілки та створюємо запит на об'єднання, який потім переходить в UAT для тестування.

Злиття з It_doesnt_matter гілки тепер штовхнув на майстер - проект

у https://github.com/yardpenalty/mainproject.git

Скажімо, проект пакета знаходиться за адресою

https://github.com/yardpenalty/mypackage.git

Майте на увазі, що mainproject використовує цей пакет у виробництві, тому ми не можемо вносити зміни, просто натиснувши їх на цей пакет (серед інших причин). Скажімо, веб-розробник повинен редагувати цей пакет, щоб внести зміни у виробництво.

Проста гілка не працює, тому що ми не можемо побачити наші зміни, не опублікувавши пакет тощо.

Використання виделки: Зараз нам належить зробити трохи хитрощів з нашим пакетом, щоб ми створили клон виробничого пакету за допомогою вилки. Файли composer.json можна оновити, щоб вказувати на вилку, яка зараз знаходиться в шляху користувача або групи

Так ми створимо вилку в https://github.com/yardpenalty/mypackage.git

і зателефонуйте https://github.com/yardpenalty/yards/mypackage.git

Тепер ми можемо оновити наш файл composer.json, щоб вказати на цей пакет у наших "сховищах": [масив подібний таким і ми йдемо!

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]

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