Материалы‎ > ‎GIT‎ > ‎

Работа с GIT

После создания репозитория командой $ git init нужно начать контролировать его версии.
Для этого воспользуемся командой
$ git clone /path/to/repository
В случае, если репозиторий удаленный, команда:
$ git clone username@host:/path/to/repository

Рассмотрим пример клонирования по протоколу http.

Пример 1.1

$ git clone http://git.toiit.sgu.ru/projects/pt/example_cpp.git

Cloning into 'example_cpp'...

$ cd example_cpp/

$ ls

main.cpp

$ ls -a

.  ..  .git  main.cpp


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


Во время клонирования, не явно, в настройки добавляется так называемый удалённый репозиторий откуда проводилось клонирование, который называется origin. В каталоге проекта (локальном репозитории) и удалённом репозитории может хранится несколько наборов зафиксированных изменений - дерево истории проект. Один или несколько параллельно разрабатываемых наборов зафиксированных изменений в дереве истории проекта называются ветками. На рисунке 1 представен пример дерева истории веток проекта.

Репозиторий состоит из трех "деревьев":
  • Working Directory - папка, в которой содержатся файлы;
  • Index - служит основой;
  • Head - указатель на последний коммит.


Добавление и сохранение изменений

Изменения файла происходят на Index с использованием команды add:

$ git add <filename>
$ git add *


Это первый шаг в основном рабочем процессе GIT.
Для сохранения изменений команды нужно "закоммитить":
$ git commit -m "Commit message"

Теперь файл находится в HEAD, но все еще не отправлен в удаленный репозиторий.


Отправка изменений

Сейчас последнее изменение хранится в HEAD. Для отправки его в удаленный репозиторий воспользуемся командой
$ git push origin branch, где branch - ваша рабочая ветка.

Если вы еще не склонировали хранилище и хотите объединить ваш репозиторий с удаленным сервером, то воспользуйтесь командой
$ git remote add origin <server>

Теперь вы можете отправить изменения на сервер.


Ветвления


Ветви используются для работы над разными особенностями программы изолированно друг от друга. Ветвью по-умолчанию является master. После завершения работы над другими ветвями их нужно соединить с главной ветвью - master командой merge.

Примеры.
Создание ветви Pipe и переключение управления на неё:
$ git checkout -b pipe
Возвращение на master:
$ git checkout master
Удаление ненужной ветви exec:
$ git branch -d exec
Ветвь не может связываться с другими, пока она не загружена на удаленный репозиторий. Для загрузки ветви используется команда
$ git push origin <branch>


При работе с ветками возможна операция объединения (команда git merge), позволяющая применить набор изменений из заданной ветки в текущую. Это позволяет решить вопросы при совместной разработке, а также решить проблему параллельной разработки.

Пример 1.4

$ git merge origin/project/make

Merge made by the 'recursive' strategy.

Makefile | 17 +++++++++++++++++

1 file changed, 17 insertions(+)

create mode 100644 Makefile

$ ls

main.cpp  Makefile


В примере 1.4, который нужно выполнить в рабочем каталоге проекта, добавляется так называемый Makefile, для сборки с помощью утилиты make.


$ make

g++ -c -Wall main.cpp -o main.o

g++  main.o -o task

$ ls

main.cpp  main.o  Makefile  task

$ ./task

Hello, World!


Обновление и объединение

Чтобы выгрузить в свой локальный репозиторий последний добавленный в удаленный репозиторий коммит, нужно выполнить
$ git pull

Для объединения какой-либо ветви с активной в данный момент ветвью используют
$ git merge <branch>, где <branch> - ветвь, которую нужно присоединить.


К сожалению, при мерджинге файлы не всегда добавляются автоматически, поэтому необходимо добавить необходимый файл вручную:
$ git add <Имя файла>
Comments