Git


автор:

Андрей Соколов

Определения

Система управления версиями (VCS) – система, которая сохраняет изменения файлов.

    Позволяет:
  • хранить несколько версий одного документа
  • возвращаться к более ранним версиям
  • определять, кто и когда внес изменения

Коммит (Commit)структура данных, хранящая фиксированное состояние файлов и дополнительные сведения: дата, автор, email автора, сообщение и идентификатор коммита, указатели на родителей.

Централизованные (CVS, Subversion)


Распределенные (Git, Mercurial, Bazaar)


Git

Первая версия вышла 7 апреля 2005 года
Текущая версия 2.22.0 (7 июня 2019)
  • Высокая производительность
  • Значительная гибкость использования
  • Полностью распределенный
  • Интеграция со всем, чем можно
  • OpenSource
  • Низкоуровневый движок
  • Набор программ на C и sh-скриптов
  • Diff алгоритм и Merge стратегии
  • Хранит snapshot всего дерева

Инициализация репозитория

Новый репозиторий

Чтобы создать новый репозиторий, нужно создать новую папку и выполнить в ней


                        git init
                    
Существующий репозиторий

Чтобы получить копию локального репозитория:


                        git clone /path/to/repository
                    

Чтобы получить копию удаленного репозитория:


                        git clone https://{username{:password}}@host/path.git
                    

Workflow

.git директория – база данных и метаданные. Создается или клонируется автоматически.

Рабочая директория – все файлы, содержащиеся в текущей версии проекта.

Staging директория (индекс) – содержит изменения для следующего коммита.

add & commit

Создаем новые файлы, либо изменяем существующие. После добавляем их в индекс:

                        git add <filename>
                    

                        git add *
                    
Делаем коммит:

                        git commit -m "Commit message"
                    
Теперь ваши изменения есть в локальной базе данных.

Ветки

Ветки используются для разработки "фич", изолированных друг от друга

Master является веткой по умолчанию

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


                        git checkout -b feature_x
                    
Чтобы переключиться обратно на master:

                        git checkout master
                    
Чтобы "влить" изменения из feature_x в master:

                        git merge feature_x
                    

Ветки

Синхронизация

Отправка
Ветка не доступна для других юзеров, пока вы не сделаете ее push:

                        git push origin <branch_name>
                    
Если вы не клонировали репозиторий, и хотите соединить ваш локальный репозиторий с удаленным:

                        git remote add origin <server_url>
                    
Теперь можно делать push
Получение
Чтобы получить изменения других разработчиков в ветке:

                        git fetch origin
                        git merge <branch_name>
                    

Или:


                        git pull [--rebase] origin <branch_name>
                    
Разрешить конфликты если есть

GUI

Узнать больше