Изучите основы Git за 10 минут

Да, название статьи – это приманка. Вы никак не сможете понять основы технологии git всего за 10 минут. Но вы можете приблизиться к этому примерно за 25 минут. Это и есть цель данной статьи.

Если вы хотите начать изучать технологию Git, вы пришли по адресу. Это полное руководство по Git для начинающих. Существует множество клиентов для Git, но технология работы одинакова вне зависимости от клиента. Но в этом руководстве мы будем использовать GitHub.

Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.

Давайте начнем!

Что такое контроль версий?

Контроль версий – это система, которая записывает изменения в файле или наборе файлов с течением времени, чтобы впоследствии можно было восстановить и обратиться к конкретным версиям. Таким образом, в идеале мы можем поместить любой файл в компьютере на контроль версий.

Хорошо… Но зачем?

Система контроля версий (VCS) позволяет вам возвращать файлы или даже весь проект к предыдущему состоянию, просматривать изменения, сделанные за определенное время, видеть, кто последний раз изменял что-то, что может вызвать проблему, кто ответственен за возникновение проблемы, и многое другое. Использование VCS также означает, что если вы что-то испортите или потеряете файлы, вы сможете легко восстановить их. А иногда вы просто хотите узнать “кто это написал”, и доступ к этой информации стоит того.

Так что же такое Git?

Git – это система контроля версий для отслеживания изменений в компьютерных файлах и координации работы над ними между несколькими людьми. Git – это распределенная система контроля версий. Поэтому Git не обязательно полагается на центральный сервер для хранения всех версий файлов проекта. Вместо этого каждый пользователь “клонирует” копию репозитория (коллекции файлов) и имеет полную историю проекта на своем жестком диске. Этот клон имеет все метаданные оригинала, а сам оригинал хранится на собственном сервере или на стороннем хостинге, например GitHub.

Git помогает вам следить за изменениями которые вы вносите в свой код. По сути, это вкладка истории в вашем редакторе кода (без режима инкогнито). Если в какой-то момент во время работы над кодом вы столкнулись с фатальной ошибкой и не знаете, что её вызвало, вы всегда можете вернуться к стабильному состоянию. Так что это очень полезно для отладки. Или вы можете просто посмотреть, какие изменения вы внесли в свой код с течением времени.

пример истории версий файла
Простой пример истории версий файла

В приведенном выше примере все три карточки представляют собой разные версии одного и того же файла. Мы можем выбрать, какую версию файла мы хотим использовать в любой момент времени. Таким образом, можно переходить к любой версии файла во временном континууме git.

Git также помогает вам синхронизировать код между несколькими людьми. Представьте, что вы и ваш друг работаете над проектом. Вы оба работаете над одними и теми же файлами проекта. Теперь Git берет те изменения, которые вы и ваш друг внесли независимо друг от друга, и сливает их в единый репозиторий “Мастер“. Таким образом, используя Git, вы можете быть уверены, что вы оба работаете над самой последней версией репозитория. Вам не придется беспокоиться о пересылке файлов друг другу и работать с нелепым количеством копий исходного файла. А совместная работа на расстоянии становится такой же простой, как HTML.

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

Прежде чем мы начнем работать с командами Git, необходимо понять, что он из себя представляет.

Что такое репозиторий?

 Репозиторий, или repo, – это не что иное, как коллекция исходного кода.

В рабочем процессе Git есть четыре основных элемента.

Рабочая директория, область подготовленных файлов, также его называют индекс или Staging Area, локальный репозиторий и удаленный репозиторий.

Диаграмма простого рабочего процесса Git
Диаграмма простого рабочего процесса Git

Если вы рассматриваете файл в рабочей директории, он может находиться в трех возможных состояниях:

  1. Он может быть индексирован (staged). Это означает, что файлы с обновленными изменениями помечены для фиксации в локальном репозитории, но еще не зафиксированы.
  2. Может быть изменен (modified). Это означает, что файлы с обновленными изменениями еще не сохранены в локальном хранилище.
  3. Может быть зафиксирован (еще говорят, что произведен коммитcommitted). Это означает, что изменения, внесенные в файл, надежно хранятся в локальном репозитории.
  • git add это команда, используемая для добавления файла, находящегося в рабочей директории, в область хранения.
  • git commit – это команда, используемая для добавления всех файлов, которые были поставлены в локальный репозиторий.
  • git push это команда, используемая для добавления всех зафиксированных файлов в локальном репозитории в удаленный репозиторий. Таким образом, в удаленном репозитории все файлы и изменения будут видны всем, кто имеет к нему доступ.
  • git fetch это команда, используемая для получения файлов из удаленного репозитория в локальный репозиторий, но не в рабочую директорию.
  • git merge это команда, используемая для получения файлов из локального репозитория в рабочую директорию.
  • git pull – команда, используемая для получения файлов из удаленного репозитория непосредственно в рабочую директорию. Она эквивалентна git fetch и git merge .

Когда мы знаем, что такое Git и его основные термины, давайте посмотрим, как можно разместить файл в git. Мы сделаем это правильным и сложным способом. Без всяких GUI-приложений.

Предположим, что у вас уже есть файл, который вы хотите поместить под контроль версий. Если нет, создайте папку с примером под названием ‘MuskCult’ и поместите в нее несколько файлов с примером кода.

Шаг 0: Заведите аккаунт на GitHub

Если у вас его еще нет, вы можете сделать его здесь.

Шаг 1: Убедитесь, что на вашем компьютере установлен Git

Если вы работаете на Mac, откройте терминал и введите следующую команду:

$ git --version

Это приведет к открытию программы установки, если у вас еще нет git. Поэтому установите его с помощью программы установки. Если у вас уже есть git, он просто покажет вам, какая версия git у вас установлена.

Если вы используете Linux (deb), введите в терминале следующее:

$ sudo apt install git-all

Если вы находитесь на Windows:

$ get a mac

Шутка…
Перейдите по этой ссылке или по этой ссылке для получения дополнительной информации о том, как его установить.

Шаг 2: Расскажите Git, кто вы

Представьтесь. Включайтесь в работу. Серьёзно, укажите своё имя пользователя Git и адрес электронной почты, поскольку каждый Git-коммит будет использовать эту информацию для идентификации вас как автора.

$ git config --global user.name "YOUR_USERNAME"

$ git config --global user.email "im_satoshi@musk.com"

$ git config --global --list # To check the info you just provided

Шаг 3: Сгенерируйте/проверьте ваш компьютер на наличие существующих ключей SSH. (Необязательно)

Почему, спросите вы? Используя протокол SSH, вы можете подключаться и аутентифицироваться к удаленным серверам и службам. С помощью SSH-ключей вы можете подключаться к GitHub, не вводя имя пользователя или пароль при каждом посещении.

Перейдите по этой ссылке , чтобы узнать больше об SSH.
Перейдите сюда, чтобы проверить, есть ли у вас существующий ключ SSH.
Перейдите сюда чтобы сгенерировать SSH-ключ.
Нажмите здесь чтобы добавить SSH-ключ в свой аккаунт GitHub.
И наконец, перейдите сюда чтобы проверить подключение.

Если вы настроили SSH, то в каждой команде git, содержащей ссылку, вы заменяете её на ссылку:

Instead of : https://github.com/username/reponame

You use    : git@github.com:username/reponame.git

           Note : You can use both ways alternatively

В этой статье мы будем использовать протокол SSH.

Шаг 4: Приступим

Создайте новый репозиторий на GitHub. Перейдите по этой ссылке.
Теперь найдите в терминале папку, которую вы хотите разместить в git.

$ cd Desktop/MuskCult

А чтобы поместить её в git, введите:

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

Теперь отредактируйте файл README.md, чтобы предоставить информацию о репозитории.

Добавьте файлы в область Staging Area для фиксации:

Теперь добавьте файлы в git-репозиторий для коммита:

$ 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

Прежде чем приступить к коммиту, давайте посмотрим, какие файлы заиндексированы:

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

Зафиксируйте изменения, внесенные в Git Repo

Теперь нужно зафиксировать файлы, которые вы добавили в 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

Отмена коммита (фиксации) изменений, которые вы только что внесли в Git Repo

Теперь, если вы допустили ошибку в коде или поместили в репозиторий ненужный файл, вы можете удалить добавленные файлы:

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

Добавление remote origin

Теперь каждый раз, когда вы вносите изменения в свои файлы и сохраняете их, они не будут автоматически обновляться на GitHub. Все изменения, которые мы внесли в файл, будут обновлены в локальном репозитории. Чтобы обновить изменения в мастере:

$ git remote add origin remote_repository_URL
# sets the new remote

Команда git remote позволяет создавать, просматривать и удалять связи с другими репозиториями.

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

Команда git remote -v выводит список URL-адресов удаленных связей с другими репозиториями.

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

Команда git push  переносит изменения в вашем локальном репозитории в удаленный репозиторий, который вы указали в качестве исходного.

И теперь, если мы перейдем на страницу нашего репозитория на GitHub, она должна выглядеть примерно так:

Страница репозитория на GitHub

Вот и все. Вы только что добавили файлы в репозиторий, который создали на GitHub.

Просмотр изменений, которые вы внесли в свой файл

Когда вы начнете вносить изменения в файлы и сохраните их, файл не будет соответствовать последней версии, зафиксированной в git. Чтобы увидеть изменения, которые вы только что внесли:

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

Возврат к последней зафиксированной версии в Git Repo

Теперь вы можете выбрать возврат к последней зафиксированной версии, введя:

$ git checkout .

OR for a specific file

$ git checkout -- <filename>

Просмотр истории коммитов

Вы можете использовать git log команду, чтобы посмотреть историю коммитов, которые вы сделали для своих файлов:

$ git log

Каждый раз, когда вы вносите изменения, которые хотите отразить на GitHub, выполняйте следующие команды:

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

Теперь, если мы заглянем в наш repo, мы сможем определить, был ли коммит успешным, посмотрев сообщение о коммитах для каждого файла.

Просмотр истории коммитов

Шаг 5: Это все хорошо… Но как загрузить и работать с другими репозиториями на GitHub?

Клонирование Git Repo

Перейдите в диекторию, в которую вы хотите клонировать репозиторий. Скопируйте ссылку на нужный репозиторий и введите следующую команду:

$ git clone remote_repository_URL

Внесение изменений в Git Repo

Теперь вы можете работать над нужными вам файлами и фиксировать изменения локально. Если вы хотите отправить изменения в этот репозиторий, вам нужно либо быть добавленным в качестве соавтора для репозитория, либо создать нечто, известное как pull request. Посмотрите, как это делается здесь.

Коллаборация

Представьте, что вы и ваш друг работаете над проектом. Вы оба работаете над одними и теми же файлами проекта. Каждый раз, когда вы вносите изменения и отправляете их в мастер repo, ваш друг должен вытащить изменения, которые вы отправили в git repo. Чтобы убедиться, что вы работаете с последней версией git-репозитория каждый раз, когда вы начинаете работу, нужно использовать команду git pull.

Ниже приведен пример проекта, над которым работают два человека:

Проект, над которым работают два человека
Только что был сделан коммит на репо

Чтобы убедиться, что эти изменения отражены в вашей локальной копии репозитория:

$ git pull origin master

Вот еще две полезные команды git:

$ git fetch
    AND
$ git merge

Проще говоря,  git fetch с последующим git merge  равно git pull. Но тогда почему они существуют?

Когда вы используете git pull, Git пытается автоматически сделать работу за вас. Он чувствителен к контексту, поэтому Git будет сливать все вытащенные коммиты в ветку, в которой вы сейчас работаете; git pull автоматически сливает коммиты, не позволяя вам сначала их просмотреть.

Когда вы используете git fetch, Git собирает все коммиты из целевой ветки, которые не существуют в вашей текущей ветке, и сохраняет их в вашем локальном репозитории. Однако он не сливает их с вашей текущей веткой. Это особенно полезно, если вам нужно поддерживать репозиторий в актуальном состоянии, но вы работаете над чем-то, что может сломаться, если вы обновите файлы. Чтобы интегрировать коммиты в вашу мастер-ветку, вы используете git merge.

Еще одна команда:

.gitignore

Что же это такое?

.gitignore указывает git’у, какие файлы (или шаблоны) ему следует игнорировать. Обычно он используется для того, чтобы избежать фиксации временных файлов из вашей рабочей директории, не полезных для других участников работы, таких как продукты компиляции, временные файлы, создаваемые IDE, и т. д.

Так, в приведенном выше примере файлы типа __pycache__, .DS_Store используются системой для хранения информации для более быстрого доступа. Это не полезно для других участников совместной работы. Поэтому мы можем указать git’у игнорировать их, добавив .gitignore файл.

Используйте команду touch для создания .gitignore файла:

$ touch .gitignore

И вы можете добавить следующие шаблоны, чтобы указать git’у игнорировать такие файлы:

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

И это практически все, что касается основ работы с git. Надеемся, эта статья была вам полезна.

Перевод статьи «Learn the Basics of Git in Under 10 Minutes».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *