12 апреля 2022
Тэги: Linux, руководство, файлы.
Git – это распределённая система контроля версий, которую создал Линус Торвальдс в процессе разработки ядра Linux.
Ключевой особенностью системы является её децентрализованность. Благодаря git вы можете вносить изменения в ветку (branch), которая хранится в репозитории (хранилище) на удалённом сервере и видна другим разработчикам. С другой стороны, вы можете создать свою локальную ветку, которая будет видна только на вашей рабочей станции. Однако в любой момент вы можете сделать её общедоступной, разместив в репозитории на удалённом сервере. А можете произвести слияние (merge) вашей локальной ветки с репозиторием так, что на сервере она будет выглядеть частью «ствола» дерева изменений.
В настоящий момент git как система контроля версий является стандартом среди разработчиков, поэтому давайте рассмотрим эту систему более подробно. Начнём с установки и настройки.
Установка под Ubuntu выполняется одной командой:
Откроем консоль и сразу укажем имя пользователя и его почтовый ящик. Эта информация будет отображаться в истории изменений каждого нашего проекта. Не забудьте про кавычки.
Все эти глобальные параметры вы также можете посмотреть и отредактировать в файле .gitconfig в вашей домашней директории. Под Ubuntu это /home/имя_пользователя/.gitconfig.
Глобальные параметры можно переопределить на уровне отдельного проекта. Для этого находясь в папке проекта, выполните указанные выше команды, убрав флаг --global.
В самом простом случае при помощи git можно организовать локальный репозиторий, в котором вы можете фиксировать изменения «для себя». Перейдём в любую директорию и создадим там пустой репозиторий:
Если вы хотите скопировать уже существующий репозиторий, который размещён в централизованном хранилище (например, github), то вместо инициализации локального репозитория вам нужно его склонировать, используя url репозитория.
Этот url вы можете найти на главной странице репозитория в github, как показано на картинке выше.
После выполнения этой команды в текущей папке у вас появится папка проекта spring-jpa-rest-kotlin.
В любом случае, теперь у нас есть тестовый репозиторий, поэтому перейдём к базовым командам git.
Теперь давайте создадим в папке нашего проекта какой-нибудь текстовый файл, например, test.txt. В нём сохраним произвольный текст. А затем посмотрим в консоли текущее состояние хранилища:
Статус обычно показывает, в какой ветке мы находимся, а также все незафиксированные изменения файлов.
В данном случае статус нам покажет, что появился «untracked» файл, который ещё не добавлен в систему контроля версий. Давайте добавим его, чтобы для него учитывалась история изменений.
Здесь мы добавили к версионированию определённый файл. Если же таких файлов будет очень много, можно добавить их все сразу, заменив имя файла точкой.
Но используйте эту команду с осторожностью во избежание добавления нежелательных файлов! Чтобы исключать нежелательные файлы, можно указывать исключения в файле .gitignore. Там можно прописать как отдельные файлы, так и целые каталоги.
Ещё раз посмотрим статус репозитория. Теперь git покажет, что файл был добавлен. Имена добавленных файлов отображаются зелёным цветом.
Зафиксируем изменение файла test.txt в репозитории. Обязательно используйте опцию -m для указания пояснительного текста к изменению
Если же вы хотите добавить многострочный комментарий при помощи текстового редактора, то можете выполнить просто git commit без параметров. В этом случае откроется текстовый редактор (например, nano или vim) и вы сможете ввести многострочный комментарий. После этого сохраните получившийся файл.
Теперь это сообщение можно увидеть в истории изменений нашего проекта:
Для каждого коммита отображается его автор, время коммита, описание и хеш. Этот хеш позволяет легко ссылаться на конкретный коммит, если история изменений слишком большая. Просто укажите первые несколько символов хеша после git log и вы сразу увидите этот коммит.
Изменим содержимое нашего файла test.txt. Его статус изменится на modified. Выполним второй коммит, чтобы зафиксировать это изменение. Обратите внимание, что второй раз команду git add выполнять не нужно.
Теперь у нас в истории изменений два коммита и при желании мы легко можем откатить последние изменения.
Теперь удалим наш файл test.txt и сделаем третий коммит.
Обратите внимание, что, если файл уже был добавлен к git, его нельзя удалять стандартной командой rm, а надо делать это средствами git.
Довольно быстро у вас накопится столько коммитов, что они перестанут влезать на экран. Тогда история будет выводится постранично. Для перехода к следующей странице нажимайте пробел. Для выхода нажмите q.
Также можно использовать более компактный вариант лога:
В общем-то, этих операций достаточно, чтобы обеспечить базовое версионирование на отдельно взятой рабочей станции.
Git позволяет вести разработку независимых компонентов системы в отдельных ветках. Ветки могут быть как удалённые (remote), которые хранятся на сервере и доступны всем, так и локальные (local), которые хранятся на вашей рабочей машине и доступны только вам. Просмотреть доступные ветки можно при помощи следующих команд:
Активная ветка, т.е. та, в которой вы находитесь сейчас, будет отмечена звёздочкой.
Чтобы переключиться на другую существующую ветку, выполните:
Предположим, что вы начали работу над какой-то конкретной задачей, которая напрямую никак не связана с другими задачами. В таком случае рекомендуется создать отдельную ветку для добавления этого функционала.
Создать новую ветку и сразу перейти в неё:
Имя локальной ветки бывает удобно указывать по номеру задачи в вашей системе управления задач (например, Jira).
Если же вам нужно перейти в ветку, которая есть на сервере, но локально с ней вы ещё ни разу не работали, дополните предыдущую команду, указав имя ветки на сервере:
Если у вас есть сервер, на котором организован общий репозиторий, вы можете отправить туда сделанные вами изменения. К этому моменту изменения уже должны быть оформлены в виде коммита.
Перед отправкой вы должны убедиться, что ваш локальный репозиторий синхронизирован с удалённым.
Общий вид команды для получения изменений с сервера:
Можно также использовать сокращённый вариант:
После того как вы убедитесь, что новых изменений не было (или что они были успешно синхронизированы с вашей версией), отправьте ваши изменения на сервер.
Общий вид команды для отправки изменений на сервер:
origin – это алиас удалённого репозитория, который присваивается по умолчанию. Ваш локальный репозиторий может быть связан с несколькими удалёнными. В таком случае, каждый из них будет иметь свой собственный алиас.
Можно также использовать сокращённый вариант:
HEAD – это алиас, который всегда указывает на вашу текущую ветку.
В данном руководстве мы узнали, что из себя представляет система контроля версий git. Научились создавать новый репозиторий локально, а также копировать уже существующий репозиторий. Также мы рассмотрели основные команды для добавления новых файлов, фиксации изменений и просмотра истории изменений. Наконец, мы научились синхронизировать локальный репозиторий с удалённым.
Kotlin, Java, Spring, Spring Boot, Spring Data, SQL, PostgreSQL, Oracle, Linux, Hibernate, Collections, Stream API, многопоточность, файлы, Nginx, Apache, maven, gradle, JUnit, YouTube, новости, руководство, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml.