Git introduction
morgangso@gmail.comGit - распределенная система контроля версий, она облегчает работы с исходными кодами. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, работать с этими изменениями, обеднять, добавлять, отменять.
Распределенная системы позволяет делиться своими изменениями с другими участниками проекта, и дает возможно вместе работать над одним проектом.
Системы контроля изменений встроена почти в каждый текстовый редактор. Когда в "Word" или в "sublime text", "VScode", нажимаем комбинацию из клавиш: `ctrl + z` - тогда в последние изменения в файле отменяются, а если мы нажмем: `ctrl + shift + z` - в таком случае отмененные изменения вновь применяться.*
Другими словами, отменяя изменения мы делаем "шаг назад", вновь применяя отмененные изменения мы делаем "шаг вперед" по уже протоптанной нами дорожке. Но само собой это работает только в том случае если мы "ходим" по "протоптанной дорожке".
Вернемся к git, если работая с классическими редакторами мы имеем только "одну тропинку", то git позволяет нам создавать много таких тропинок и по необходимости перепрыгивать с одной на другую, мы можем создавать новую тропинку из старой а потом совмещать их в одну. С git мы можем жестко фиксировать каждый шажок - изменение, и как-будто используя 'ctrl+z' откатываться на предыдущий шаг и т.д. Но довольно аналогии, надеюсь вы поняли общую концепцию git. В любом случае хочу посоветовать следующие материалы:
- https://git-scm.com/doc - документция по git (есть на русском)
- Version Control with Git: Powerful tools and techniques for collaborative software development
- Git Internals Peepcode PDF
- Pro Git
В целом, git - набор консольных утилит, безусловно у него есть надстройки в виде GUI, но вернемся к ним чуть позже, пока сосредоточимся на работе git в cli.
Работа с git репозиторием может строиться по нескольким сценариями:
- Нет локального репозитория ни удаленного
- Есть удалленный репозиторий но нет локального
- Есть локальный репозиторий и удаленный - классическая работа
Сценарий №1
Для начала рассмотрим вариант когда у нас нет ни какого репозитория, есть только папка нашего проекта, проект может состоять из одного файла.
Нам необходимо в консоле нашей ОС зайти в папку проекта, и первым делом инициализировать в папке наш репозиторий - объявить что данная папка это репозиторий, инициализация происходи одной командой:
git init
После создания репозитория, нам необходимо сообщить git в каких файлах ему необходимо отслеживать изменения, но проект новый и количество файлов может быть огромным, для экономии временни мы добавим все файлы и все папки находящиеся в корневой директории, для этого используем команду:
git add .
После указания гиту файлов для отслеживания, мы должны зафиксировать (закомитить - от слова комит, commit) изменения в выше указанных файлах, сделаем это командой:
git commit -m "first commit"
Далее нам необходимо указать адрес удаленного сервера, где будет храниться "главная копия" нашего репозитория.
git remote add origin git@github.com:username/name_project.git
После фиксирования всех изменений, нам необходимо отправить изменения на сервер (сделать первый push), делать мы это будем с указанием новой ветки т.к. на сервере нет нечего и не создано пока ни одной ветки.
git push -u origin master
Готово! Мы создали репозитория и сохранили (запушили) его на сервере.
Миссия выполнена ✅
Сценарий №2
Рассмотрим сценарий, когда нас пригласили работать над новым для нас, проектом, но проект уже существует в удаленном репозитории, и нам нужно клонировать репозиторий к себе локально. Клонирование репозитория происходи следующей командой:
git clone git@github.com:username/name_project.git
После клонирования репозитория мы получаем полностью готовы и настроенный проект. Мы можем начинать работать над проектом, вносить изменения и т.д. если работать в master ветке считается приемлемым в вашем проекте.
После того как вы внесли изменения в проект, нам необходимо сообщить git в каких файлах ему необходимо отслеживать изменения, но проект новый и количество файлов может быть огромным, для экономии временни мы добавим все файлы и все папки находящиеся в корневой директории, для этого используем команду:
git add name_file.py
Создаем комит - фиксируем все изменения из файлах которые мы добавили предыдущей командой 'добавить'.
git commit -m "first commit"
Работая в ветке которая уже есть на удаленном сервере, необходимо помнить что её могут изменить, и ваша локальная версия ветки может устареть, для этого необходимо скачать последние версию с сервера, что можно сделать командой:
git pull
Пройдя весь путь, нам теперь необходимо сохранить наши изменения на сервере, возвращаясь к началу напоминаю что git - распределенная система, чтобы все кто работает над проектом вместе с вами увидели ваши изменения, и просто чтобы сделать резервную копию на удаленном сервере, мы должны послать (в дословном переводе "толкнуть") наши изменения, командой:
git push
Мы прошли сценарий от начала и до конца, теперь такой путь нам надо будет повторять раз за разом, вы быстро привыкните и освоитесь. А когда начнете пользоваться git через gui интерфейс, весь этот путь вы будете пробивать менее чем за минуту.
Некоторые другие другие команды git.
Работа с git предполагает наличие нескольких веток
Чтобы посмотреть список всех локальных "веток", воспользуемся командой:
git branch
Переключение между ветками
git checkout <name_branch>
Работая с несколькими ветками и переключаясь между ними может появляться
git checkout .
Для просмотра не зафиксированных изменений, используем команду:
git status
Более краткую версию можно прочитать здесь.