Въведение в Git: работа с отдалечено репозитори

guide

Отдалеченото хранилище на Git

Досега работихме само в локалното хранилище. Всеки разработчик ще работи в своето локално хранилище, но в крайна сметка идва момент, в който ще трябва да “избута” кода в някое отдалечено хранилище. След като кодът попадне в отдалеченото хранилище, вече и други разработчици ще могат да го виждат и модифицират.

Пример на едно отдалечено и три локални хранилища

GitHub
За примерите тук ще използваме за отдалечено хранилище GitHub. Разбира се може да се използват и други услуги като GitLab или BitBucket.

Ново репозитори в GitHub

Отидете на https://github.com/ и създайте акаунт.

След като се регистрирате кликнете върху Стартиране на проект, за да създадете ново Git хранилище в GitHub. Дайте име на хранилището и щракнете върху „Създаване на репозитори“.
Например може да дадете име като git-blog-demo.

Това ще създаде отдалечено хранилище в GitHub и когато отворите хранилището, ще се отвори страницата със хранилището:

URL адресът на хранилището е маркираната част https://github.com/aditya-sridhar/git-blog-demo.git

За да насочите локалното си хранилище към отдалеченото хранилище, използвайте следната команда:

git remote add origin [repository url]

Git Push

git push origin <branch-name>

Изтласкайте (изпратете, Push) вашия branch, за да го качите някъде другаде:

Това ще качи вашия branch в отдалеченото репо наименувано origin (знайте, че това е URL, който може да е дефиниран първоначално по време на клонирането – за това повече по-долу, или при създаването на ново отдалечено репо).

След успешно натискане, вашите съотборници вече ще могат да изтеглят вашия branch, за да преглеждат вашите commit-и (вижте git pull по-долу).

😎 Като пряк път можете да въведете думата HEAD вместо име на branch, за да използвате автоматично branch-а, в който се намирате в момента. HEAD винаги се отнася до най-новата ви контролна точка, тоест най-новия commit за текущия branch.

Както бе споменато по-рано, всичко в git може да се разглежда като контролна точка. Ето списък на видовете контролни точки, за които знаете вече (отново технически се наричат ​​„препратки“ и „ревизии“):

  • HEAD
  • <branch-name>, e.g. master
  • <commit-hash>, e.g. e093542d01d11c917c316bfaffd6c4e5633aba58 (or e093542 for short)

Има още и:

  • <tag-name>, напр. v1.0.0
  • stash

И накрая, специални символи като ^, ~ и @ {} могат да се използват за промяна на препратки. Те са доста полезни.

За да изтласкате целия код от локалното хранилище в отдалеченото хранилище, използвайте следната команда:

git push -u origin master

Това изтласква кода от главния клон в локалното хранилище към главния клон в отдалеченото хранилище.

Git clone

Клонирайте вече съществуващо репозитори:

git clone https://github.com/cooperka/emoji-commit-messages.git

Това ще изтегли .git хранилище от интернет (в нашият случай от GitHub) на вашия компютър и ще извлече най-новата/последна “снимка” на репото (всички файлове) във вашата работна директория. По подразбиране всичко ще бъде запазено в папка със същото име като на репото (в този случай emoji-commit-messages).

✨ URL адресът, който ще посочите тук, се нарича remote origin / отдалечен източник (мястото, от което първоначално са изтеглени файловете). Този термин ще бъде използван и по-късно.

Git status

Вижте текущото състояние на вашия проект:

git status

Това ще отпечата основната информация, като например кои файлове са модифицирани наскоро.

Трябва да проверявате състоянието си по всяко време, когато сте объркани. Git ще отпечата допълнителна информация в зависимост от това какво се случва в момента, за да ви помогне да се ориентирате.

Git merge (с отдалечено репо)

Обединяване на промените на някой друг:

Това ще вземе всички commits, които съществуват в branch-а other-branch-name, и ще ги интегрира във вашия собствен текущ branch.

⚠️ Това използва всички данни за branch-ове, които се съхраняват локално, така че първо изпълнете git fetch, за да изтеглите най-новата информация – виж по-долу.

Например, ако някой друг добави няколко commits към главния branch – master на origin, можете да направите следното, за да изтеглите промените им и да актуализирате собствения си локален главен branch:

git checkout master      # Make sure you’re on the right branch.

git fetch                # Download any new info from origin.

git merge origin/master  # Merge the ‘origin/master’ branch

                           into your current branch.

Името origin/master тук буквално означава контролна точка за origin/master на вашия компютър. Git използва тази нотация, за да разграничи едноименните клонове (напр. Master), разположени на различни места (например вашите собствени branches спрямо origin’s branches).

Допълнителни команди

Git pull

Като пряк път можете да използвате командата pull за едновременно извличане и обединяване на всичко. Това е по-често използвано от обединяването ръчно, както е по-горе:

git pull origin master

Тук разделяме думите origin и master (без наклонена черта, както е по-горе). Не искаме да използваме origin/master контролната точка намираща се на собствения ни компютър, (защото това са съхранявани файлове офлайн и вероятно са остарели). Вместо това искаме да извлечем директно от главния клон на отдалечената крайна точка, наречен origin. Внимавайте; разликата е важна!

За по-задълбочено разбиране как работи сливането и как се разрешават конфликти (със забавни снимки и графики), вижте официалните документи за обединяване.

git pull се използва за изтегляне на последните промени от отдалеченото хранилище в локалното хранилище. Кодът на отдалеченото хранилище се актуализира непрекъснато от различни разработчици, поради което git pull е необходимо:

git pull origin master

Git clone

git clone се използва за клониране на съществуващо отдалечено хранилище във вашия компютър. Командата за това е:

git clone [repository url]

Git fetch

Вземане на най-актуалната информация за дадено репо:

git fetch

Това ще изтегли последната информация за репото от произход (като всички различни клонове, съхранявани в GitHub).

Това не променя нито един от вашите локални файлове – просто актуализира данните за проследяване, съхранени в папката .git.