Содержание статьи

Введение

Что такое система контроля версий? Это система, которая регистрирует изменения в одном или нескольких файлах. Чтобы при необходимости можно было откатиться до нужной версии. Другими словами, использование системы контроля версий защитит от случайного удаления файла или потери какого-нибудь куска кода. Поскольку все можно будет легко восстановить. Давайте рассмотрим один из таких проектов. Это распределённая система управления версиями Git.

Немало важно то, что Git не только выгружает последнюю версию файлов, а копирует полностью весь проект. Что при повреждении данных на рабочем сервере намного облегчит восстановление файлов.

Установить Git можно в Linux, Windows и Mac. Ниже описаны варианты установки для перечисленных операционных систем.

Установка в Linux

Вариант 1. Установка через менеджер пакетов.

Вариант 2. Установка через консоль.

Для ROSA:

$ urpmi git

Для Debian:

$ apt-get install git

Для Fedora:

$ yum install git

Вариант 3. Установка с помощью исходных кодов.

Сначала нужно установить зависимости.

Для ROSA:

$ urpmi curl zlib openssl expat php-iconv

Для Debian:

$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

Для Fedora:

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

После скачать Git с официального сайта. Скомпилировать и установить:

$ tar -zxf git-2.9.2.tar.gz
$ cd git-2.9.2
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install

Установка в Windows

Просто скачать exe-файл с с официального сайта.

Установка в Mac

Вариант 1. Скачать инсталлятор Git'а. И следовать его инструкциям.

Вариант 2. Через MacPorts (http://www.macports.org) командой:

$ sudo port install git-core +svn +doc +bash_completion +gitweb

Первоначальная настройка

После установки нужно указать имя и електронный адрес. Нужно это потому, что каждый коммит в Git содержит эту информацию. Делается это так:

$ git config --global user.name "user"
$ git config --global user.email "user@yandex.ru"

Дополнительно нужно установить опции по переводу строк:

$ git config --global core.autocrlf input
$ git config --global core.safecrlf true

Но если у нас Windows, то это делается немного по другому:

$ git config --global core.autocrlf true
$ git config --global core.safecrlf true

Проверить установку настроек можно командой:

$ git config --list

Создание SSH-ключа

Часто для аутентификации на сервере надо предоставить открытый SSH-ключ. Для его генерации используется команда ssh-keygen:

$ cd ~/.ssh 
$ ssh-keygen

Все ключи хранятся в каталоге ~/.ssh с расширением .pub.

Добавить приватный SSH-ключ

В .ssh/config добавить запись для нужного хоста:

host git
user git
hostname test
port 22
identityfile ~/.ssh/{фаил_приватного_ключа}

Затем выполнить в консоле следующие команды:

$ cd ~/.ssh
$ ssh
$ ssh -keygen

После этого, имя сгенерированного файла указать в .ssh/config вместо параметра {фаил_приватного_ключа}.

Команды при работе с удалённым репозиторием

Добавление / переименование / удаление репозитория. Выполняется командой git remote.

Добавить новый репозиторий:

$ git remote add projectName git://user@host:port/projects/project.git

Где projectName - имя нового репозитория, а git://user@host:port/projects/project.git - путь к проекту.

Переименовать репозиторий:

$ git remote rename project1 project2

Где project1 - имя существующего репозитория, а project2 - имя в которое нужно переименовать.

Удалить репозиторий:

$ git remote rm project2

Где project2 - имя репозитория, который нужно удалить.

Клонирование репозитория. Выполняется командой git clone. Создает копию удалённого репозитория в дирректорию с которой выполнена команда.

Cобственный протокол:

$ git clone git://user@host:port/projects/project.git/

Протокол http:

$ git clone http://user@host:port/projects/project.git

Протокол ssh:

$ git clone ssh://user@host:port/projects

Клонируем из одной дирректории в другую:

$ git clone /home/user/repository /home/user/project

Где /home/user/repository - путь откуда копировать, а /home/user/project - куда копировать.

Импортируем svn репозиторий, используя протокол http:

$ git svn clone -s http://repository/location

Параметр -s - это сокращенное написание от --stdlayout. Он указывает, что проект состоит из стандартных папок SVN (trunk, branches и tags).

Получение изменений из репозитория. Выполняется командой git fetch. Забирает изменения, которые были добавлены после клонирования или последнего получения.

C текущего репозитория:

$ git fetch

Из определенного репозитория:

$ git fetch projectName

Получение изменений и слияние с активной веткой. Выполняется командой git pull. Забирает последние изменения и проводит слияние с активной веткой. Фактически выполняет те же действия, что и команды git fetch и git merge.

C текущего репозитория:

$ git pull

Из определенного репозитория:

$ git pull projectName

Отправка изменений на репозиторий. Выполняется командой git push.

В текущий репозиторий:

$ git push

В ветку репозитория:

$ git push origin shop

Где origin - имя репозитория, shop - ветка в удаленном репозитории.

В новую ветку репозитория:

$ git push origin master:test

Где origin - имя репозитория, master - имя ветки, test - имя новой ветки.

Удаление ветки в репозитории. Тоже выполняется командой git push:

$ git push origin :shop

Где origin - имя репозитория, а shop - ветка, которую нужно удалить.

Команды при работе с локальным репозиторием

Cоздание нового репозитория. Выполняется командой git init. Создает в текущей директории пустой репозиторий:

$ git init

Добавление в индекс изменений. Выполняется командой git add. Добавляет во временное хранилище изменения, которые потом войдут в коммит.

Добавить конкретный файл:

$ git add fileName

Добавить все файлы:

$ git add .

Удаление из индекса изменений. Выполняется командой git rm. Удаляет изменения из временного хранилища и дерева проекта одновременно.

Удалить конкретный файл:

$ git rm fileName

Удалить по шаблону:

$ git rm resources/\*.xml

Код выше удалит все файлы с расширением xml находящиеся в папке resources.

Добавление коммита. Выполняется командой git commit. Например:

$ git commit -a -m 'Возвращены оригинальные логотипы'

Где параметр -a указывает, что надо добавить только измененные файлы, а -m - описание коммита.

Откат к определенному коммиту. Выполняется командой git reset.

С сохранением изменений:

$ git reset --soft HEAD~1

Где HEAD~1 означает откат на один коммит назад.

Без сохранения изменений:

$ git reset --hard HEAD~1

Где HEAD~1 означает откат на один коммит назад.

Откат изменений конкретного коммита. Выполняется командой git revert.

Используя хэш коммита:

$ git revert c9661b80ae1c7

Используя тег коммита:

$ git revert tag-name

Просмотр всех изменений. Выполняется командой git status. Выводит информацию обо всех изменениях, конфликтах слияния, игнорируемых файлах:

$ git status

Просмотр изменений, внесенныx конкретным коммитом:

$ git show c9661b80ae1c7

Просмотр истории коммитов. Выполняется командой git log:

Общая информация:

$ git log

Информация в виде патчей по файлам:

$ git log -p

Информация по конкретному файлу:

$ git log fileName

Информация о изменении всех файлов:

$ git log --stat

Информация о создании, переименовании, удалении файлов:

$ git log --summary

Информация, где только автор и его комментарии:

$ git log --pretty=short

Информация с фильтром по тегам:

$ git log tag1..tag4

Код выше выведет историю коммитов начиная с тега tag1 и заканчивая тегом tag4.

Команды при работе с ветками

Добавление / переименование / удаление веток. Выполняется командой git branch.

Просмотреть существующие ветки:

$ git branch

Добавить новую ветку:

$ git branch nameBranch

Переименовать текущую ветку:

$ git branch -m newNameBranch

Где newNameBranch - новое имя ветки, а -m - указывает, что ветку нужно переименовать.

Удалить ветку:

$ git branch nameBranch -D

Где nameBranch - имя ветки, а -D - указывает, что ветку нужно удалить.

Переключение между ветками. Выполняется командой git checkout.

Переключиться на существующую ветку:

$ git checkout nameBranch

Где nameBranch - имя ветки, на которую нужно переключиться.

Переключиться на новую ветку:

$ git checkout -b nameBranch

Где nameBranch - имя новой ветки, а -b - указывает, что ветку сначала нужно создать.

Переключиться на ветку, проигнорировав текущие изменения:

$ git checkout -f nameBranch

Где nameBranch - имя ветки, а -f - параметр, разрешающий игнорировать изменения текущей ветки.

Слияние веток. Выполняется командой git merge.

Объединить текущую ветку с указанной:

$ git merge nameBranch

Где nameBranch - имя ветки, с которой нужно объединиться.

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

Построение ровной линии коммитов. Выполняется командой git rebase.

Из активной ветки на указанную:

$ git rebase master

Где master - имя ветки с которой потянутся коммиты для наложения на активную ветку.

Явно указать ветки:

$ git rebase master shop

Здесь на ветку shop наложаться коммиты с ветки master.

Команды при работе с метками

Просмотр / добавление / отправка меток. Выполняется командой git tag.

Просмотреть все метки в алфавитном порядке:

$ git tag

Просмотреть все метки согласно шаблону:

$ git tag -l 'v1.5.*'

Где 'v1.5.*' - искомый шаблон.

Добавить метку:

$ git tag -a v1.6 -m 'версия 1.6'

Где -a - указывает, что это аннотированная метка, v1.6 - имя новой метки, -m 'версия 1.6' - задает описание метки.

Отправить метку:

$ git push origin v1.6

Где origin - имя репозитория, v1.6 - имя метки.

Отправить все метки:

$ git push origin --tags

Где origin - имя репозитория, --tags - указывает, что надо отправлять все метки.

Заключение

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