Які відмінності між гіткою git, fork, fetch, merge, rebase та clone?


502

Я хочу зрозуміти різницю між гілкою, вилкою та клоном у Git?

Аналогічно, що це означає, коли я роблю а, git fetchа не a git pull?

Також, що rebaseозначає порівняно з merge?

Як я можу розігнати окремих людей, які здійснюють себе разом?

Як вони використовуються, чому їх використовують і що вони представляють?

Як зображений GitHub?


19
чи можете ви змінити прийняту відповідь на відповідь Майкла Дюрранта?
siride

11
Він, звичайно, може , але це мусить бути його вибором, і відверто кажучи, більшість людей, які приїжджають сюди (як я), хочуть чогось більш стислого, саме такої відповіді, яку він обрав, яка в цей час була самою собою =)
user1271772

Відповіді:


366

Клон - це просто копія сховища. На поверхні його результат еквівалентний тому svn checkout, де ви завантажуєте вихідний код з якогось іншого сховища. Різниця між централізованими VCS, такими як Subversion, і DVCS, як Git, полягає в тому, що в Git, коли ви клонуєтесь, ви фактично копіюєте все сховище джерела, включаючи всю історію та гілки. Тепер у вас є нове сховище на вашій машині, і будь-які зобов’язання, які ви зобов’язуєте, переходите до цього сховища. Ніхто не побачить жодних змін, поки ви не перенесите ці зобов'язання в інший сховище (або в оригінальний) або поки хтось не витягне комісії з вашого сховища, якщо він доступний для всіх.

Гілка - це те, що знаходиться в сховищі. Концептуально він являє собою нитку розвитку. Зазвичай у вас є головна гілка, але ви також можете мати гілку, де ви працюєте над деякою функцією xyz, та іншою, щоб виправити помилку abc. Після того, як ви перевірили філію, будь-які зобов’язання, які ви зробите, залишатимуться на цій гілці і не поділяться з іншими гілками, поки ви не зробите їх з ними або не відновите їх до відповідної галузі. Звичайно, Git здається трохи дивним, коли мова йде про гілки, поки ви не подивитеся на основоположну модель того, як гілки реалізуються. Замість того, щоб пояснити це сам (я вже говорив занадто багато, міркує), я посилаюсь на пояснення "інформатики" про те, як Git моделює гілки та зобов'язання, взяті з веб-сайту Git:

http://eagain.net/articles/git-for-computer-scientists/

Вилка насправді не є концепцією Git, це більше політична / соціальна ідея. Тобто, якщо деякі люди не задоволені тим, як іде проект, вони можуть взяти вихідний код і працювати над ним самостійно, окремо від оригінальних розробників. Це вважалося б виделкою. Git полегшує розгортання, оскільки кожен вже має власну "головну" копію вихідного коду, тому це так само просто, як нарізати зв'язки з оригінальними розробниками проектів і не вимагає експорту історії з спільного сховища, як, можливо, це стосується SVN .

EDIT: оскільки мені не було відомо про сучасне визначення поняття "fork", яке використовується на таких сайтах, як GitHub, перегляньте коментарі, а також відповідь Майкла Дюрранта нижче моєї для отримання додаткової інформації.


125
Вилка не обов'язково означає, що розробник не задоволений основним репо-репо. Зазвичай це означає, що інший розробник прочитав, але не записав, доступ до цього репо. Розробник може розщедрити репо, внести зміни, але оскільки він не може записатись на основне репо, він повинен подати свої зміни як виправлення. Отже, розгортання також є засобом заохочення до співпраці без надання доступу до запису.
brycemcd

5
Я думаю, це правда. Я лише коли-небудь бачив "вилку", що використовується в контексті створення нової, потенційно конкуруючої версії проекту.
siride

32
Можна сказати, що вилка - це гілка, яку не очікується об’єднання вгору за течією
masonk

6
Git hub використовує "fork" як fork. Це нове сховище, що зберігається на github, окремо від оригіналу. Однак, github також робить дуже простим виконання запитів на виклик. Запит на виклик, по суті, попросить власника оригінального сховища "витягнути" зміни з вашого вила репо, назад у джерело. Таким чином, кожен може використовувати керування джерелами та мати історію всіх змін, включаючи їх, але не кожному потрібен доступ для запису до оригінального репо.
mklauber

4
Я оновив свою відповідь, щоб сказати людям подивитися на відповідь Майкла Дюрранта, щоб дізнатися більше про модель github.
siride

531

Git

Ця відповідь включає GitHub, як багато людей запитували про це теж.

Місцеві сховища

У Git (локально) є каталог ( .git), до якого ви здійснюєте фіксування своїх файлів, і це ваше "локальне сховище". Це відрізняється від таких систем, як SVN, де ви додаєте та передаєте в віддалений сховище негайно.

Git зберігає кожну версію файлу, який змінюється, зберігаючи весь файл. У цьому відношенні він також відрізняється від SVN тим, що ви можете перейти до будь-якої окремої версії, не «відтворюючи» її через зміни дельти.

Git взагалі не "блокує" файли і, таким чином, уникає функціоналу "ексклюзивного блокування" для редагування (старіші системи, такі як pvcs, приходять на думку), тому всі файли завжди можна редагувати, навіть коли вони не в мережі. Це насправді виконує дивовижну роботу по об'єднанню змін файлів (в одному файлі!) Разом під час витягування або вилучення / натискання у віддалений сховище, наприклад, GitHub. Єдиний раз, коли вам потрібно змінити вручну (фактично редагувати файл), це якщо дві зміни включають однакові рядки коду.


Гілки

Гілки дозволяють зберегти основний код ("головний" відділення), зробити копію (нову гілку), а потім працювати в цій новій гілці. Якщо робота займає певний час або майстер отримує багато оновлень з моменту створення гілки, тоді слід зробити об'єднання або повторне видалення (часто бажане для кращої історії та легшого вирішення конфліктів) проти ведучої гілки. Закінчивши, ви з’єднаєте зміни, внесені у гілці, у головне сховище. Багато організацій використовують гілки для кожного твору, будь то предмет, помилка чи заборгованість. Інші організації використовують гілки лише для великих змін, таких як оновлення версій.

Fork: за допомогою гілки ви керуєте гілкою та керуєте нею, тоді як за допомогою вилки хтось інший контролює прийняття коду.

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

Стандартний спосіб залучити гілку "в" до майстра - це зробити merge. Гілки можна також "переоцінити" для "очищення" історії. Це не впливає на поточний стан і робиться для того, щоб дати історію «чистішого».

В основному ідея полягає в тому, що ви розгалужуєтесь з певної точки (як правило, від майстра). З тих пір, як ви розгалужилися, сам "господар" з того часу перемістився вперед від цієї точки розгалуження. Це буде "чистішим" (легше вирішувати проблеми, а історію буде легше зрозуміти), якщо всі зміни, які ви внесли у галузь, будуть зіграні проти поточного стану майстра з усіма останніми змінами. Отже, процес такий: зберегти зміни; отримати "нового" головного, а потім знову застосувати (це частина перезавантаження) знову зміни проти цього. Майте на увазі, що повторне базування, як і об'єднання, може призвести до конфліктів, які вам доведеться вручну вирішувати (тобто редагувати та виправляти).

Одне зауваження, яке слід зазначити:
Обновлюйте лише те, якщо гілка локальна, і ви її ще не натиснули на віддалений!
Це головним чином тому, що повторне звільнення може змінити історію, яку бачать інші люди, яка може включати власні зобов'язання.

Відстеження гілок

Це гілки, які названі origin/branch_name(на відміну від справедливих branch_name). Коли ви натискаєте і тягнете код до / з віддалених сховищ, це насправді механізм, завдяки якому це відбувається. Наприклад, коли ви git pushназиваєте філію building_groups, ваша гілка переходить спочатку до, origin/building_groupsа потім переходить до віддаленого сховища. Аналогічно, якщо ви робите це git fetch building_groups, отриманий файл розміщується у вашій origin/building_groupsгілці. Потім ви можете об'єднати цю гілку у свою локальну копію. Наша практика полягає в тому, щоб завжди робити git fetchзлиття вручну, а не просто git pull(що робить обидва вищезазначені в один крок).

Отримання нових гілок.

Отримання нових гілок: У початковій точці клона ви матимете всі гілки. Однак, якщо інші розробники додають гілки та відсувають їх до віддаленого, там повинен бути спосіб «дізнатися» про ці гілки та їх назви, щоб мати змогу їх зрушити локально. Це робиться через a, git fetchякий отримає всі нові та змінені гілки в локальне сховище, використовуючи гілки відстеження (наприклад, origin/). Після fetchредагування можна git branch --remoteперелічити гілки відстеження та git checkout [branch]фактично перейти на будь-яку задану.

Злиття

Об'єднання - це процес поєднання змін коду з різних гілок або з різних версій однієї гілки (наприклад, коли локальна гілка та віддалений не синхронізовані). Якщо хтось розробив роботу у філії і робота закінчена, готова і перевірена, то її можна об'єднати у masterгалузь. Це робиться шляхом git checkout masterпереходу на masterгілку, потім git merge your_branch. Злиття об'єднає всі різні файли та навіть різні зміни до одних і тих же файлів . Це означає, що він фактично змінить код всередині файлів, щоб об'єднати всі зміни.

При виконанні checkoutв masterньому також рекомендуються зробити , git pull origin masterщоб отримати саму останню версію віддаленого майстра об'єднано в локальні майстер. Якщо віддалений майстер змінився, тобто, moved forwardви побачите інформацію, яка відображає це під час цього git pull. Якщо це так (змінився головний майстер), то вам рекомендують, git checkout your_branchа потім rebaseйого освоїти, щоб ваші зміни насправді були «повторені» поверх «нового» головного. Тоді ви б продовжували оновлювати майстер, як показано в наступному абзаці.

Якщо конфліктів немає, то в master буде додано нові зміни. Якщо є конфлікти, це означає, що в одних і тих же файлах є зміни навколо подібних рядків коду, які він не може автоматично об'єднати. У цьому випадку git merge new_branchповідомлять, що мають бути вирішені конфлікти. Ви можете їх вирішити, відредагувавши файли (в яких будуть відбуватися обидві зміни), вибравши потрібні зміни, буквально видаливши рядки змін, які ви не хочете, а потім збережіть файл. Зміни позначені роздільниками, такими як ========і <<<<<<<<.

Після вирішення будь-яких конфліктів ви знову git addі git commitці зміни продовжите злиття (під час цього процесу ви отримаєте відгуки від git, щоб направити вас).

Якщо процес не працює належним чином, ви виявите, що git merge --abortце дуже зручно для скидання речей.

Інтерактивне звільнення та стискання / переупорядкування / видалення комітетів

Якщо ви виконували роботу в багатьох маленьких кроках, наприклад, ви здійснюєте код як "незавершений процес" щодня, можливо, ви захочете "розрізати" ці багато невеликих комісій на кілька більших комітетів. Це може бути особливо корисно, коли ви хочете робити огляди коду з колегами. Ви не хочете повторювати всі "кроки", які ви зробили (через коміти), ви просто хочете сказати, що ось кінцевий ефект (відмінності) всіх моїх змін для цієї роботи за один комітет.

Ключовим фактором, який слід оцінити при розгляді питання про те, чи потрібно це робити, чи є кілька команд проти одного і того ж файлу або файлів більше одного разу (краще в цьому випадку робити скріш-коміти). Це робиться за допомогою інтерактивного інструменту перезавантаження. Цей інструмент дозволяє вам робити скріш-коміти, видаляти коміти, перетворювати повідомлення тощо. Наприклад, git rebase -i HEAD~10( зауважте: це а ~, а не- ) відображає таке:

інтерактивний рисинг в Git

Будьте обережні, але використовуйте цей інструмент "обережно". Виконайте одну сквош / видалення / переупорядкування за один раз, вийдіть і збережіть цю комісію, а потім знову введіть інструмент. Якщо комісії не є суміжними, ви можете їх переупорядкувати (а потім при необхідності робити сквош). Ви також можете видалити комісії і тут, але вам потрібно бути впевненим у тому, що ви робите, коли це робите!

Вилки

У сховищах Git є два основні підходи до співпраці. Перший, детально описаний вище, безпосередньо через гілки, які люди тягнуть і штовхають з / до. Ці співробітники мають свої SSH ключі, зареєстровані у віддаленому сховищі. Це дозволить їм перейти безпосередньо до цього сховища. Недоліком є ​​те, що вам потрібно підтримувати список користувачів. Інший підхід - форкінг - дозволяє будь-кому "роздвоювати" сховище, в основному роблячи локальну копію у власному акаунті сховища Git. Потім вони можуть вносити зміни і після завершення надсилати "запит на витягнення" (насправді це більше "поштовх" від них та "потягнутий" запит для фактичного обслуговуючого репозиторія), щоб прийняти код.

Цей другий метод, використовуючи forks, не вимагає, щоб хтось підтримував список користувачів для сховища.


GitHub

GitHub (віддалене сховище) - це віддалене джерело, до якого ви зазвичай натискаєте та перетягуєте ці здійснені зміни, якщо у вас є (або додані до нього) подібне сховище, тому локальні та віддалені фактично досить чіткі. Ще один спосіб думати про віддалене сховище - це .gitструктура каталогу, яка живе на віддаленому сервері.

Коли ви 'розщедритися' - у графічному інтерфейсі веб-браузера GitHub ви можете натиснути цю кнопку Зображення кнопки виделки- ви створите копію ("клонування") коду у своєму акаунті GitHub. Перший раз, коли ви це зробите, це може бути дещо тонко, тому не забудьте переглянути, чий сховище вказано в базі коду - оригінальному власнику або "вилученому з", а ви, наприклад, так:

Зображення назви роздрібного сховища

Отримавши локальну копію, ви можете внести зміни за своїм бажанням (потягнувши і натиснувши їх на локальну машину). Коли ви закінчите, ви надсилаєте «запит на витягнення» оригінальному власнику / адміністратору сховища (це здається фантастичним, але насправді ви просто натискаєте на це Зображення кнопки запиту на запит:), і вони «затягують» його.

Більш розповсюдженою для команди, яка працює над кодом, є "клонування" сховища (натисніть на значок "копіювати" на головному екрані сховища). Потім локально введіть git cloneі вставте. Це налаштує вас локально, і ви також можете натиснути і перетягнути до (загального) місця GitHub.

Клони

Як зазначено в розділі на GitHub, клон - це копія сховища. Коли у вас є віддалене сховище, ви видаєте git cloneкоманду проти його URL-адреси, а потім ви отримуєте локальну копію або клонування сховища. У цього клона є все , файли, головна гілка, інші гілки, всі існуючі коміти, весь шебанг. Саме цей клон виконує ваші додавання та введення зобов’язань, а потім віддалений сховище - це те, на що ви підштовхуєте ці зобов’язання. Саме ця локальна / віддалена концепція робить Git (і подібні до нього системи, такі як Mercurial) DVCS ( розподілена система управління версіями) на відміну від більш традиційних CVS (System Versioning Systems), таких як SVN, PVCS, CVS тощо. Ви здійснюєте пряму передачу у віддалений сховище.

Візуалізація

Візуалізацію основних понять можна побачити на
веб- сайті http://marklodato.github.com/visual-git-guide/index-en.html та
http://ndpsoftware.com/git-cheatsheet.html#loc=index

Якщо ви хочете візуально відображати, як працюють зміни, ви не можете перемогти візуальний інструмент gitg( gitxдля macOS) за допомогою графічного інтерфейсу, який я називаю «карта метро» (напр., Лондонське метро), відмінно підходить для показу того, хто що робив, як змінюються, розходяться і зливаються речі тощо.

Ви також можете використовувати його, щоб додавати, вносити зміни та керувати своїми змінами!

Зображення інтерфейсу gitg / gitx

Хоча gitg / gitx досить мінімальна, кількість інструментів GUI продовжує збільшуватися. Багато користувачів Mac використовують вилку Brotherbard від gitx, а для Linux - чудовий варіант smart-git з інтуїтивно зрозумілим, але потужним інтерфейсом:

Зображення графічного інтерфейсу smart-git

Зауважте, що навіть за допомогою інструменту GUI, ви, ймовірно, будете робити багато команд у командному рядку.

Для цього у моєму ~/.bash_aliasesфайлі є такі псевдоніми (які викликаються з мого ~/.bashrcфайлу для кожного термінального сеансу):

# git
alias g='git status'
alias gcob='git checkout -b '
alias gcom='git checkout master'
alias gd='git diff'
alias gf='git fetch'
alias gfrm='git fetch; git reset --hard origin/master'
alias gg='git grep '
alias gits='alias | grep "^alias g.*git.*$"'
alias gl='git log'
alias gl1='git log --oneline'
alias glf='git log --name-status'
alias glp='git log -p'
alias gpull='git pull '
alias gpush='git push '

І у мене у ~/.gitconfigфайлі є такі "псевдоніми" git - чому вони такі?
Тож завершення філії (за допомогою клавіші TAB) працює!

Отже, це:

[alias]
  co = checkout
  cob = checkout -b

Приклад використання: git co [branch]<- заповнення вкладок для гілок буде працювати.

Інструмент навчання GUI

Ви можете знайти https://learngitbranching.js.org/ корисним для вивчення деяких базових понять. Знімок екрана: Відео: https://youtu.be/23JqqcLPss0введіть тут опис зображення

Нарешті, 7 ключових рятівників!

  1. Ви вносите зміни, додаєте і вводите їх (але не натискайте), а потім о! ти розумієш, що ти в майстру!

    git reset [filename(s)]
    git checkout -b [name_for_a_new_branch]
    git add [file(s)]
    git commit -m "A useful message"
    
    Voila!  You've moved that 'master' commit to its own branch !
  2. Ви зіпсуєте деякі файли під час роботи в локальній філії і просто хочете повернутися до того, що ви мали останній раз git pull:

    git reset --hard origin/master  # You will need to be comfortable doing this!
  3. Ви починаєте вносити зміни локально, редагуєте півдесятка файлів, а потім, о, лайно, ви все ще знаходитесь у головній (чи іншій) гілці:

    git checkout -b new_branch_name  # just create a new branch
    git add .                      # add the changes files
    git commit -m"your message"    # and commit them
  4. Ви зіпсуєте один конкретний файл у вашій поточній гілці і хочете в основному "скинути" цей файл (втратити зміни) до того, як він був останній раз, коли ви його витягнули з віддаленого сховища:

    git checkout your/directories/filename

    Це фактично скидає файл (як і багато команд Git, він недостатньо названий тим, що він робить тут).

  5. Ви вносите деякі зміни на місцевому рівні, хочете переконатися, що ви не втрачаєте їх під час виконання git resetабо rebase: Я часто роблю вручну копію всього проекту ( cp -r ../my_project ~/), коли я не впевнений, чи можу я зіпсуватись у Git чи втратити важливе зміни.

  6. Ви відмовляєтесь, але все псується:

    git rebase --abort # To abandon interactive rebase and merge issues
  7. Додайте до PS1підказки свою гілку Git (див. Https://unix.stackexchange.com/a/127800/10043 ), наприклад

    Зображення підказки

    Відділення є selenium_rspec_conversion.


1
20.02.12 Додано інформацію про merge vs. rebase
Майкл Дюррант

1
16.06.12 Додано розділ про клони, щоб зробити його більш повним.
Майкл Дюрант

4
Стільки тексту !! Я буду дотримуватися своєї простої Subversion :-)
Jonny

6
так? Користувач із підривом також може написати книгу про використання підриву. На мою думку, підрив - це стара технологія з меншою функціональністю. Я особисто вважаю, що git дуже простий у використанні. ymmv
Michael Durrant

3
Нічого собі, Мікель! ТАК - це все про обмін знаннями. Дякую за чудову роботу, безумовно +1
Michiel

143

Ось образ Олівера Стіла про те, як все це поєднується:

введіть тут опис зображення


6
Це зображення можна оновити, щоб додати "git clone", який я впевнений, що більшість людей знайомі в будь-якому випадку.
Контанго

3
@Gravitas, я дуже люблю цю графіку, але вона не говорить мені, коли файли перезаписуються та коли вони об’єднуються. Не могли б ви сказати мені, що для цих команд? Можливо, команди, що перезаписуються вгорі, і команди, що зливаються під дисками? Дякую.
zylstra

Як я розумію, git pull зніме з віддаленого все, що ви запитаєте (так, який би стовбур ви не просили) і миттєво з’єднає його у гілку, в якій ви знаходитесь, коли ви зробите запит. Pull - це запит високого рівня, який запускає 'fetch', а потім 'merge' за замовчуванням, або ребазування з '-rebase'. Можна обійтися і без цього, це просто зручність.
Контанго

Куди саме в цій діаграмі пішов би клон Git? Також git merge? Я дуже новачок, але мені подобається ця картина.
Мішель

2
Я побачу, чи можу я зробити оновлену версію діаграми.
Контанго

8

Вилка Vs. Клон - два слова, які обоє означають копію

Будь ласка, дивіться цю діаграму. (Спочатку від http://www.dataschool.io/content/images/2014/Mar/github1.png ).

.-------------------------.     1. Fork     .-------------------------.
| Your GitHub repo        | <-------------- | Joe's GitHub repo       |
| github.com/you/coolgame |                 | github.com/joe/coolgame |
| ----------------------- | 7. Pull Request | ----------------------- |
| master -> c224ff7       | --------------> | master -> c224ff7 (c)   |
| anidea -> 884faa1 (a)   |                 | anidea -> 884faa1 (b)   |
'-------------------------'                 '-------------------------'
    |                 ^
    | 2. Clone        |
    |                 |
    |                 |
    |                 |
    |                 |
    |                 | 6. Push (anidea => origin/anidea)
    v                 |
.-------------------------.
| Your computer           |  3. Create branch 'anidea'
| $HOME/coolgame          |
| ----------------------- |  4. Update a file
| master -> c224ff7       |
| anidea -> 884faa1       |  5. Commit (to 'anidea')
'-------------------------'

(a) - after you have pushed it
(b) - after Joe has accepted it
(c) - eventually Joe might merge 'anidea' (make 'master -> 884faa1')

Вилка

  • Копія на ваше віддалене репо (хмара), яке пов'язує його з Джо
  • Потім копію, яку ви можете клонувати до місцевого репо і F *% $ - вище
  • Коли ви закінчите, ви можете повернутися до пульта
  • Потім ви можете запитати Джо, чи хоче він використовувати його у своєму проекті, натиснувши кнопку "pull-request"

Клон

  • копія на місцеве репо (жорсткий диск)

Зауважте, що справжньою перевагою DVCS є те, що для цього вам не потрібно конкретного дозволу доступу до репортажу Джо. Якщо Джо хоче, щоб ви частіше вносили свій внесок, він може надати вам права на доступ: ви можете підштовхнути anideaправо до його репо і зберегти ваші справи по актуалізації вил. ОТОХ, якщо вам не вдасться домовитись з Джо, ви можете просто продовжувати розвивати та користуватися виделкою (і побачити, чи зможете ви згодом змусити його передумати).
Алоїз Магдал

6

Просто для додання іншим, примітка, специфічна для розгортання.

Добре усвідомити, що технічно клонування РЕПО та розпалювання репо - це одне й те саме. Зробіть:

git clone $some_other_repo

і ви можете постукатись по спині --- ви щойно роздвояли якесь репо.

Git як VCS - це насправді все, що стосується клонування . Крім "просто перегляду" за допомогою віддаленого інтерфейсу, такого як cgit, дуже мало спільного з git repo, що не передбачає форсування клонування репо в якийсь момент.

Однак,

  • коли хтось каже, що я розігнав репо X , він означає, що вони створили клон репо десь з наміром викрити його іншим, наприклад, показати деякі експерименти або застосувати інший механізм контролю доступу (наприклад, щоб дозволити людям без Доступ до Github, але разом із внутрішнім обліковим записом компанії).

    Факти, що: репо, найімовірніше, створено за допомогою іншої команди, ніж те git clone, що він, швидше за все, розміщений десь на сервері, на відміну від чийогось ноутбука, і, швидше за все, має дещо інший формат (це "голе репо", тобто без робочого дерева) це лише технічні деталі.

    Той факт, що він, ймовірно, буде містити різний набір гілок, тегів чи комірок - це, мабуть, причина, чому вони це зробили в першу чергу.

    (Що робить Github, коли натискаєш "виделку", це просто клонування за допомогою доданого цукру: він клонує репо для тебе, кладе його під свій обліковий запис, десь записує "розщелене", додає віддалений з назвою "вище за течією", і найголовніше, грає приємну анімацію.)

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

Краса Git полягає в тому, що це робить все це ідеально поєднаним між собою: всі ці репости поділяють загальну частину ланцюга блоку фіксації, так що можна безпечно (див. Примітку нижче) об'єднувати зміни вперед і назад між усіма цими репостами, як вважаєте за потрібне.


Примітка: "безпечно" до тих пір, поки ви не перепишете загальну частину ланцюга і до тих пір, поки зміни не будуть суперечливими.

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