GIT - начало работы

 
git-logo.png

GIT - децентрализованная система контроля версий (DVCS).
Особую популярность она приобрела в последнее время. Популярность эта вполне заслуженная. Будучи не лишена недостатков, которых, в прочем, пожалуй не лишён никто и не что она всё же очень удобна для обслуживания как больших так и совсем малых проектов. И виной тому, на мой взгляд, в основном её простота.

Создание нового репозитория.

Перейдите в каталог с исходным кодом вашего проекта и инициализируйте новый репозиторий.

Предположим, что он имеет такую структуру:

[email protected]:~$ cd ~/develop/my_project
user@laptop:~/develop/my_project$ ls -lh
итого 8,0K
drwxrwxr-x 2 user user 4,0K янв.   9 17:17 bin
-rw-rw-r-- 1 user user   82 янв.   9 17:16 main.c
-rw-rw-r-- 1 user user    0 янв.   9 17:14 main.c~

Выполните:

git init .

Эта команда создаст один единственный каталог
~/develop/my_project/.git
в котором и будет находится ваш новый репозиторий. В нём же будут храниться и все настройки.

После создания репозитория и перед первой фиксацией стоит задуматься о том, что возможно не все файлы вашего проекта подлежат контролю версий. Класический пример такой ситуации - всевозможные временные файлы, файлы журналов и генерируемая документация, а также резервные копии файлов в особенности те, которые создаются автоматически.

Для обработки такий исключений используется специальный файл настроек
.gitignore
который располагается в корне вашего проекта.
Он может иметь такое содержимое:

*~
bin/*
docs/*
fonts/*
parser/*
test.c
tmp/*

Его потребуется создать в корневом каталоге проекта самостоятельно.

Теперь стоит выполнить кое-какие дополнительные настройки.

Описание проекта

Указывается в файле description находящемся в каталоге .git.

Информация о разработчике

Как это обычно принято в мире Unix — git имеет возможность задания настроек на нескольких уровнях. Глобальном системном, пользовательском и локальном.
Рассмотрим ситуацию с настройкой локальной (имеющей значение только для данного конкретного репозитория).
Посмотрим текущие настройки и зададим имя разработчика, адрес электронной почты:

user@laptop:~/develop/my_project$ git config --local -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user@laptop:~/develop/my_project$ git config --local --add user.name "Developer"
user@laptop:~/develop/my_project$ git config --local --add user.email "[email protected]"
user@laptop:~/develop/my_project$ git config --local -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user.name=Developer
user.email=developer@example.net

Ключ --local указывает на расположение изменяемых настроек.
Доступны варианты:

  • --global — Глобальный конфиг
  • --system — Системный конфиг
  • --local — Локальный (репозитория)
  • -f, --file <file> — Конкретный файл

Подробнее можно прочитать в руководстве выполнив команду git help config. Подобным образом можно просмотреть страницы руководства по всем командам git: status, diff, commit, etc.

Цветной вывод в консоль

Включение режима подсветки вывода значительно облегчит работу с программой:

[email protected]:~/develop/my_project$ git config --local color.ui true

Теперь можно начать работать с репозиторием.

Просмотр состояния репозитория

user@laptop:~/develop/my_project$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .gitignore
#       main.c
nothing added to commit but untracked files present (use "git add" to track)

Здесь нам сообщают, что мы находимся в имеющейся по-умолчанию ветви проекта master.
Что есть новые файлы, которые не поставлены под контроль и предлагается выполнить git add для добавления файлов в репозиторий.
Если ранее вы включили подсветку вывода, то часть информации (новые файлы) будут выделены красным цветом.

Добавление файлов

user@laptop:~/develop/my_project$ git add .
user@laptop:~/develop/my_project$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached [file]..." to unstage)
#
#       new file:   .gitignore
#       new file:   main.c
#

Первая команда git add . добавляет в репозиторий все новые файлы.
Вторая повторно показывает состояние локальной копии. Если была включена подсветка вывода, то новые файлы будут отмечены зелёным цветом.

Первая фиксация

Теперь можно выполнить первую фиксацию. В git это операция выполняется командой commit.

user@laptop:~/develop/my_project$ git commit -a
[master (root-commit) 4b98355] Initial commit
 2 files changed, 14 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 main.c

При выполнении этой команды запустится ваш текстовый редактор с предложением ввести описание фиксации - "коммита". При успешном сохранении текста комментария коммит тоже завершится успехом.

Комментарий можно указать непосредственно в командной строке, тогда редактор запускаться не будет

git commit -am "Initial commit"

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

Просмотр журнала изменений

user@laptop:~/develop/my_project$ git log
commit 4b983551621f8caaaa571c487429f359f1b00f52
Author: Developer <developer@example.net>
Date:   Wed Jan 9 19:47:01 2013 +0400

    Initial commit

Команда git log выведет журнал фиксаций в текущей ветви (master). Как и в предыдущих случаях часть информации будет выделена цветом при условии включения подсветки вывода. Лог выводится с помощью вашего пэйджера (pager). Обычно это программа more. Есть альтернативы. Например программа most [инструкция по настройке], которая выводит результат в цвете.

git_log

Стоит обратить внимание, что git генерирует не последовательные целочисленные номера фиксаций, как это принято во многих других системах контроля версий, а sha1 хэши, которые и есть те самые уникальные идентификаторы фиксаций.

NB!: Практически исчерпывающую документацию можно найти по адресу http://git-scm.com/book/ru