Git для начинающих.

Git для начинающих. git - распределённая система контроля версий, позволяет работать над проектом нескольким пользователям одновременно, хранит изменения.

"...я Subversion даже трехметровым багром трогать не буду."

— Linus Torvalds

  • git используется во многих крупных проектах: Linux kernel, KDE и многих  других. Изначально git написал Linus Torvalds.
  • Чтобы лучше понять надо ли вам использовать git, лучше послушать самого Линуса Торвальдса -  о GIT на Google Talks (3 мая 2007)

git workflow

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

Создание нового репозитория – это наверное первая из задач, с которой сталкивается любой разработчик. Создаём открытый репозиторий, с которым смогут работать другие люди. Предположим, что у вас есть некий сервер example.com и ваша рабочая машина.

Для начала вам необходимо установить git. Сделать это можно как вручную скомпилировав его из исходных кодов, так и установив с помощью менеджера пакетов (скачать с http://git-scm.com/).

Далее вам надо создать репозиторий. Предположим что вы будете хранить все git-репозитории в /var/git:

cd /var/git
mkdir example.git
cd example.git
git init --bare

Теперь у вас есть пустой git-репозиторий. Это, собственно говоря, все команды, которые требуется выполнить на сервере.

Теперь идем на вашу рабочую машину и пишем:

git init
git remote add origin ssh://username@example.com/var/git/example.git
touch changelog
git add changelog
git commit -a -m"Initital commit"
git push origin master

Этими командами мы создали новый репозиторий, связали его с основной веткой example.git, закомитили туда файл changelog и отослали это на сервер. В результате выполнения этих команд, вы должны увидеть чтото примерно такое:

Counting objects: 3, done.
Writing objects: 100% (3/3), 224 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://username@example.git/var/git/example.git
 * [new branch]      master -> master

 

Получение и оправка репозитория

Разумеется, после создания репозитория разумно узнать “а как же получить эти данные на свой компьютер?”.
Для данной операции используется команда clone. Она создает полную копию удаленного репозитория у вас. Под полной копией понимается именно полная копия, со всеми ветками, удаленными файлами и т.д.

git clone ssh://username@example.com/var/git/имя-репозитория

Разумеется, /var/git может меняться, в зависимости от того, где располагаются файлы данного репозитория на удаленной машине.

 

Обновление данных

С таким локальным репозиторием можно работать долгое время, однако, когда-то у вас все же возникнет необходимость передать сделанные вами изменения в удаленный репозиторий, чтобы результатами вашего труда могли воспользоваться другие участники разработки, и получить из удаленного репозитория новую версию. Для этого служат команды pull и  push.

git pull

Данная команда получает обновленную версию из удаленного репозитория, при этом она проверяет на наличие различных проблем при объединении репозиториев и сообщает об этом.

git push

Данная команда целиком передает все сделанные вами изменения, уже закомиченные в локальный репозиторий, в удаленный репозиторий. Для передачи тегов необходимо использовать аргумент –tags

git push --tags

 

Базовые операции

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

 git add file1 file2 ... fileN

Добавление всех недобавленных файлов в комит:

git add -a

Удаление файла из комита:

 git rm file1 file2 ... fileN

Удаление файла из комита и с жесткого диска:

git rm -f file1 file2 ... fileN

Комит в локальный репозиторий (надо отметить, что в таком случае закомитятся только файлы, которые были обработаны с помощью git add/rm):

git commit

Комит всех изменений в локальный репозиторий:

git commit -a

Отмена всех изменений, сделанных в дереве, до состояния, которое было при последнем комите в локальный репозиторий (очень опасная команда, подумайте прежде чем пользоваться ею):

git reset --hard

Создание дифа относительно последнего комита:

git diff

 

Использование веток

Рано или поздно в любом проекте возникает ситуация, когда требуется заморозить изменения, но продолжать работать, а на замороженные изменения накладывать только баг-фиксы. Для этой цели служат ветви (branch)
В гите можно создать ветку от любого места. Для создания ветки от основного дерева надо выполнить следующую команду:

git checkout --track -b name_of_newbranch origin/master

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

Branch name_of_newbranch set up to track remote branch refs/remotes/origin/master.
Switched to a new branch "name_of_newbranch"

Это значит, что в локальном репозитории у вас создалась новая ветка.
Если в этой команде заменить origin/master на origin/remote_branch_name то вы создадите ветку от другой ветки.
Чтобы ваша ветка была видна всем, ее требуется пропихнуть в удаленный репозиторий. Делается это так:

git push origin local_branch_name:remote_branch_name

Разумеется, надо также уметь и получать ветки в свое распоряжение

git branch local_branch_name origin/remote_branch_name
git checkout local_branch_name

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

Switched to branch "local_branch_name"

 

Работа с тегами

Как правило, кроме веток разработчики используют теги – чтобы запомнить состояние кода в какой-то момент. Тег – это своеобразный слепок, точно идентифицирующий состояние кода. Гит умеет работать с подписанными GPG тегами и с неподписанными. Здесь я рассмотрю только неподписанные теги.
Для создания такого тега необходимо выполнить команду

git tag

Чтобы убрать тег необходимо  выполнить

git tag -d

Для того, чтобы тег стал виден всем, необходимо отправить его в удаленный репозиторий

git push --tags

Чтобы получить версию с конкретного тега необходимо создать от него локальную ветку и расчекаутить эту ветку:

git fetch origin tag 
git branch  
git checkout

Разумеется, в будущем эту ветку можно будет сделать глобальной и выслать в удаленной репозиторий.

 

Настройка git

Для ускорения некоторых операций и увеличения удобства работы можно провести пару настроек:


Настройка цветного вывода:

git config --global color.ui "auto"

Настройка имени пользователя и почтового адреса (между прочим, это хороший тон):


git config user.name "FirstName LastName"
git config user.email "user@example.com"

Ускоряем дифы и отменяем ограничение на количество потоков упаковки при push:


git config --global diff.renamelimit "0"
git config --global pack.threads "0"

Вместо заключения
Git –  очень мощная и удобная система контроля версий. Для нее существует несколько GUI утилит, которые могут облегчить работу, несколько веб интерфейсов для мониторинга текущего состояния. В последнее время все большее кол-во проектов переходят на использование git, и это показатель того, что git успешно развивается и соответствует последним требованиям в области систем контроля версий.


Большое кол-во  документации по использованию git можно найти в сети, в том числе и на официальном сайте

 

git

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.