Вивчіть основи Git менш ніж за 10 хвилин

Так, заголовок - це приманка. Ви ніяк не зможете зрозуміти основи технології git всього за 10 хвилин. Але ви можете наблизитись приблизно за 25 хвилин. І це мета цієї статті.

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

Давайте розпочнемо!

Що таке контроль версій?

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

Гм ... Гаразд ... Але чому це?

Ось чому:

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

Так що таке Git?

Git - це система контролю версій для відстеження змін у комп'ютерних файлах та координації роботи над цими файлами серед кількох людей. Git - це розподілена система контролю версій . Отже, Git не обов'язково покладається на центральний сервер для зберігання всіх версій файлів проекту. Натомість кожен користувач «клонує» копію сховища (колекції файлів) і має повну історію проекту на своєму жорсткому диску. Цей клон має всі метадані оригіналу, тоді як сам оригінал зберігається на власному сервері або сторонній службі хостингу, як GitHub.

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

У наведеному вище прикладі всі три картки представляють різні версії одного файлу. Ми можемо вибрати, яку версію файлу ми хочемо використовувати в будь-який момент часу. Тож я можу переходити туди-сюди до будь-якої версії файлу в континуумі git time.

Git також допомагає вам синхронізувати код між кількома людьми. Тож уявіть, що ви та ваш друг співпрацюєте над проектом. Ви обидва працюєте над однаковими файлами проекту. Тепер Git приймає ті зміни, які ви та ваш друг внесли самостійно, та об’єднує їх в єдине сховище “ Master ”. Отже, використовуючи Git, ви можете переконатися, що ви обоє працюєте над останньою версією сховища. Тому вам не доведеться турбуватися про те, що ви надсилаєте свої файли один одному та працюєте із смішною кількістю копій оригінального файлу. А співпраця на великі відстані стає настільки ж простою, як HTML?

Робочий процес Git:

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

Що таке сховище?

Сховище аки репо не що інше, як набір вихідного коду.

У робочому процесі Git є чотири основні елементи.

Робочий каталог , область проходження , локальне сховище та віддалене сховище .

Якщо ви розглядаєте файл у своєму робочому каталозі, він може знаходитись у трьох можливих станах.

  1. Його можна інсценувати. Це означає, що файли з оновленими змінами позначені як привласнені до локального сховища, але ще не зафіксовані.
  2. Його можна модифікувати . Це означає, що файли з оновленими змінами ще не зберігаються в локальному сховищі.
  3. Це може бути скоєно . Це означає, що зміни, внесені у ваш файл, надійно зберігаються в локальному сховищі.
  • git add - це команда, яка використовується для додавання файлу, що знаходиться в робочому каталозі, до проміжної області.
  • git commit - це команда, яка використовується для додавання всіх файлів, які індексуються до локального сховища.
  • git pushце команда, яка використовується для додавання всіх віддалених файлів у локальному сховищі до віддаленого сховища. Отже, у віддаленому сховищі всі файли та зміни будуть видимі кожному, хто має доступ до віддаленого сховища.
  • git fetch це команда, яка використовується для отримання файлів з віддаленого сховища в локальне сховище, але не в робочий каталог.
  • git merge це команда, яка використовується для отримання файлів з локального сховища в робочий каталог.
  • git pullце команда, яка використовується для отримання файлів із віддаленого сховища безпосередньо в робочий каталог. Це еквівалентно a git fetchта a git merge.

Тепер, коли ми знаємо, що таке Git та його основні термінології, давайте подивимось, як ми можемо розмістити файл під git . Ми зробимо це правильно і важко. Без будь-яких додатків графічного інтерфейсу.

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

Крок 0: Створіть обліковий запис GitHub. Дух.

Якщо у вас його ще немає, ви можете зробити його тут.

Крок 1: Переконайтеся, що на вашому комп'ютері встановлено Git.

Якщо ви перебуваєте на Mac , запустіть термінал і введіть таку команду:

$ git --version

Це запропонує відкрити інсталятор, якщо у вас ще немає git. Тож налаштуйте його за допомогою інсталятора. Якщо у вас вже є git, він просто покаже, яку версію git ви встановили.

If you are running Linux(deb), enter the following in the terminal:

$ sudo apt install git-all

If you are on Windows:

$ get a mac

Just kidding… Relax… The amount of people I triggered… Phew…

Go to this link or this link for more info on how to get it.

Step 2: Tell Git who you are.

Introduce yourself. Slide in. Seriously, mention your Git username and email address, since every Git commit will use this information to identify you as the author.

$ git config --global user.name "YOUR_USERNAME" 
$ git config --global user.email "[email protected]"
$ git config --global --list # To check the info you just provided

Step 3: Generate/check your machine for existing SSH keys. (Optional)

Why you ask? Using the SSH protocol, you can connect and authenticate to remote servers and services. With SSH keys, you can connect to GitHub without supplying your username or password at each visit.

Follow this link to learn more about SSH.

Go hereto check if you have an existing SSH key.

Go here to generate a SSH Key.

Go hereto add the SSH key to your GitHub account.

And finally go here to test its connection.

If you did setup SSH, every git command that has a link you replace it by:

Instead of : //github.com/username/reponame
You use : [email protected]/username/reponame.git
 Note : You can use both ways alternatively

I’ll be using SSH protocol in this tutorial.

Step 4: Let’s Git

Create a new repository on GitHub. Follow this link.

Now, locate to the folder you want to place under git in your terminal.

$ cd Desktop/MuskCult

Initialize Git:

And to place it under git, enter:

$ touch README.md # To create a README file for the repository$ git init # Initiates an empty git repository

Now go edit the README.md file to provide information about the repository.

Add files to the Staging Area for commit:

Now to add the files to the git repository for commit:

$ git add . # Adds all the files in the local repository and stages them for commit
OR if you want to add a specific file
$ git add README.md # To add a specific file

Before we commit let’s see what files are staged:

$ git status # Lists all new or modified files to be committed

Commit Changes you made to your Git Repo:

Now to commit files you added to your git repo:

$ git commit -m "First commit"# The message in the " " is given so that the other users can read the message and see what changes you made

Uncommit Changes you just made to your Git Repo:

Now suppose you just made some error in your code or placed an unwanted file inside the repository, you can unstage the files you just added using:

$ git reset HEAD~1# Remove the most recent commit# Commit again!

Add a remote origin and Push:

Now each time you make changes in your files and save it, it won’t be automatically updated on GitHub. All the changes we made in the file are updated in the local repository. Now to update the changes to the master:

$ git remote add origin remote_repository_URL# sets the new remote

The git remote command lets you create, view, and delete connections to other repositories.

$ git remote -v# List the remote connections you have to other repositories.

The git remote -v command lists the URLs of the remote connections you have to other repositories.

$ git push -u origin master # pushes changes to origin

Now the git push command pushes the changes in your local repository up to the remote repository you specified as the origin.

And now if we go and check our repository page on GitHub it should look something like this:

And that’s it. You’ve just added the files to the repository you just created on GitHub.

See the Changes you made to your file:

Once you start making changes on your files and you save them, the file won’t match the last version that was committed to git. To see the changes you just made:

$ git diff # To show the files changes not yet staged

Revert back to the last committed version to the Git Repo:

Now you can choose to revert back to the last committed version by entering:

$ git checkout .
OR for a specific file
$ git checkout -- 

View Commit History:

You can use the git log command to see the history of commit you made to your files:

$ git log

Each time you make changes that you want to be reflected on GitHub, the following are the most common flow of commands:

$ git add .$ git status # Lists all new or modified files to be committed$ git commit -m "Second commit"$ git push -u origin master

Now if we go and see our repo, we can identify whether the commit was successful by looking at the commit message for each file.

Step 5 : That’s all well and good… But How do I download and work on other repositories on GitHub?

Cloning a Git Repo:

Locate to the directory you want to clone the repo. Copy the link of the repository you want and enter the following:

$ git clone remote_repository_URL

Feel free to go ahead and clone the repo I created above using: //github.com/Gothamv/MuskCult

Pushing Changes to the Git Repo:

Now you can work on the files you want and commit to changes locally. If you want to push changes to that repository you either have to be added as a collaborator for the repository or you have create something known as pull request. Go and check out how to do one here and give me a pull request with your code file.

Collaborating:

So imagine you and your friend are collaborating on a project. You both are working on the same project files. Each time you make some changes and push it into the master repo, your friend has to pull the changes that you pushed into the git repo. Meaning to make sure you’re working on the latest version of the git repo each time you start working, a git pull command is the way to go.

Now below is an example of a project my friend and I are collaborating on:

So to make sure those changes are reflected on my local copy of the repo:

$ git pull origin master

Here’s two more useful git commands:

$ git fetch AND$ git merge

In the simplest terms, git fetch followed by a git merge equals a git pull. But then why do these exist?

When you use git pull, Git tries to automatically do your work for you. It is context sensitive, so Git will merge any pulled commits into the branch you are currently working in. git pullautomatically merges the commits without letting you review them first.

When you git fetch, Git gathers any commits from the target branch that do not exist in your current branch and stores them in your local repository. However, it does not merge them with your current branch. This is particularly useful if you need to keep your repository up to date, but are working on something that might break if you update your files. To integrate the commits into your master branch, you use git merge.

One More Thing:

.gitignore

So what is it?

.gitignore tells git which files (or patterns) it should ignore. It's usually used to avoid committing transient files from your working directory that aren't useful to other collaborators, such as compilation products, temporary files IDEs create, etc.

So in the above example, files like __pycache__, .DS_Store are used by the system to store information for faster access. This is not useful for other collaborators. So we can tell git to ignore them by adding a .gitignore file.

Use the touch command to create the .gitignore file:

$ touch .gitignore

And you can add the following patterns to tell git to ignore such files.

/*.cmake/*.DS_Store/.user/buildetc. depending upon the files you want git to untrack

And that’s pretty much it for the basics. Stay tuned for Part 2 which will focus on Branch, Merge, Stash, Rebase etc.

If you enjoyed the article, don’t forget to smash that Clap button and make sure you follow me for Part 2.

Peace Out ✌️

References :

Adding an existing project to GitHub using the command line - User Documentation

Putting your existing work on GitHub can let you share and collaborate in lots of great ways. If you are migrating your…help.github.comHow to undo (almost) anything with Git

One of the most useful features of any version control system is the ability to "undo" your mistakes. In Git, "undo"…blog.github.comGit on the commandline - Don't be afraid to commit 0.3 documentation

There are other ways of installing Git; you can even get a graphical Git application, that will include the commandline…dont-be-afraid-to-commit.readthedocs.ioStart using Git on the command line | GitLab

Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.docs.gitlab.comWhat is the difference between 'git pull' and 'git fetch'?

Moderator Note: Given that this question has already had sixty-seven answers posted to it (some of them deleted)…stackoverflow.com