Инструменты пользователя

Инструменты сайта


subjects:programming:git

Git

Что это такое?

Git (произн. «гит») — распределённая система управления версиями. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года. Система спроектирована как набор программ, специально разработанных с учётом их использования в скриптах. Это позволяет удобно создавать специализированные системы контроля версий на базе Git или пользовательские интерфейсы.

Система управления версиями (от англ. Version Control System, VCS или Revision Control System) — программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое. Такие системы наиболее широко используются при разработке программного обеспечения для хранения исходных кодов разрабатываемой программы. Однако они могут с успехом применяться и в других областях, в которых ведётся работа с большим количеством непрерывно изменяющихся электронных документов.

Особенности Git

Ядро Git представляет собой набор утилит командной строки с параметрами. Все настройки хранятся в текстовых файлах конфигурации.

Репозиторий Git представляет собой каталог файловой системы, в котором находятся файлы конфигурации репозитория, файлы журналов, хранящие операции, выполняемые над репозиторием, индекс, описывающий расположение файлов, и хранилище, содержащее собственно файлы. Структура хранилища файлов не отражает реальную структуру хранящегося в репозитории файлового дерева, она ориентирована на повышение скорости выполнения операций с репозиторием.

По умолчанию репозиторий хранится в подкаталоге с названием «.git» в корневом каталоге рабочей копии дерева файлов, хранящегося в репозитории.

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

Инициализация

Создание локального репозитория в текущем каталоге

$ git init

Клонирование удаленного репозитория в локальный каталог [с указанным имени]

$ git clone https://github.com/userName/originName.git [newLocalName]

Настройка

Задаем имя пользователя и электронную почту.

Глобально для всех проектов текущего пользователя:

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

Для конкретного проекта (эти настройки переопределят глобальные):

$ git config --local user.name "John Doe"
$ git config --local user.email johndoe@example.com

.gitignore

Зачастую, у вас имеется группа файлов, которые вы не только не хотите автоматически добавлять в репозиторий, но и видеть в списках неотслеживаемых. К таким файлам обычно относятся автоматически генерируемые файлы (различные логи, результаты сборки программ и т.п.). В таком случае, вы можете создать файл .gitignore с перечислением шаблонов соответствующих таким файлам. Вот пример файла .gitignore:

.gitignore
*.[oa]
*.log

Первая строка предписывает Git'у игнорировать любые файлы заканчивающиеся на .o или .a — объектные и архивные файлы, которые могут появиться во время сборки кода. Вторая - то же самое, для файлов заканчивающихся на «.log».

Исключаем папки и файлы, начинающиеся с двух подчёркиваний и содержимое virt.py3:

.gitignore
__*/*
__*
virt.py3/*

help

$ git help

status

Вывести информацию обо всех изменениях, внесенных в дерево директорий проекта:

$ git status

Краткий вывод:

$ git status --short
$ git status --s

Обозначения в выводе команды git status -s:

  • M - (modified) отслеживаемые, изменились с прошлого коммита, еще не добавлены
  • D - (deleted) отслеживаемые, удалены после прошлого коммита, еще не добавлены
  • ? - (untracked) неотслеживаемые, не запрещены к добавлению
  • ! - (ignored) неотслеживаемые, запрещены к добавлению (например, в .gitignore)

add

$ git add .
$ git add -all
$ git add -A
$ git add -update
$ git add -u
  • git add . – Добавляет файлы M, D, ?.
  • -all, -A – Эти варианты эквивалентны и добавляют M, D, ?. Без точки — из всей рабочей области. С точкой — только текущий путь: git add -A . = git add . + git add -u .
    git add .
  • -update, -u – Git обновляет (update) статус уже отслеживаемых файлов т.е. M, D.
  • git add * – Этот синтаксис лучше не использовать, т.к. он пытается добавить M, ?, !, причём последнее приводит к ошибке.

commit

$ git commit
$ git commit -a
$ git commit -m "text"
  • git commit – Если индекс не пустой, то на его основе будет совершен коммит, после чего пользователя попросят прокомментировать вносимые изменения.
    • -a – Совершит коммит, автоматически индексируя изменения в файлах проекта. Новые файлы при этом индексироваться не будут! Удаление же файлов будет учтено.
    • -m «text» – Комментируем коммит прямо из командной строки вместо текстового редактора.
      git commit -m "Название коммита"
    • Чтобы изменить имя последнего коммита, достаточно ввести:
      git commit --amend -m "Новое название коммита"

      . Для изменения имени других коммитов, нужно сделать:

      git commit --amend -c <commit ID>

Переименование файла

Переименовывать или перемещать файлы и папки нужно из git. Подробнее см. справку.

$ git mv old_filename new_filename

Объединение коммитов

  • Объединение последних 2 (можно использовать любое разумное целое число) коммитов в один:
$ git rebase -i HEAD~2
  • Откроется текстовый редактор, в котором первые две строки соответствуют последним двум коммитам.
  • В начале каждой строки стоит слово pick. Вам необходимо изменить слово pick на букву s у второй строки. Это означает, что данный коммит будет объединен с предыдущим коммитом – это написано в комментариях.
  • Сохраните изменения и закройте редактор.
  • Снова откроется редактор, в котором вам предлагается ввести сообщение к коммиту, который и является объединением. Отредактируйте сообщение к коммиту, сохраните изменения, и закройте редактор.

Разное

  • git rm FILE1 FILE2 – Удалить файл(ы) из индекса и дерева одновременно.
  • git reset – Сбросить весь индекс.
    Помимо работы с индексом, позволяет сбросить состояние проекта до какого-либо коммита в истории:
    • «Мягкий» (с ключом «–soft») резет оставит нетронутыми ваши индекс и все дерево файлов и директорий проекта, вернется к работе с указанным коммитом.
      git reset –soft HEAD^ – переходим к работе над уже совершенным коммитом, сохраняя все состояние проекта и проиндексированные файлы.
    • «Жесткий» резет (ключ –hard) — команда, которую следует использовать с осторожностью. Git reset –hard вернет дерево проекта и индекс в состояние, соответствующее указанному коммиту, удалив изменения последующих коммитов.
      git reset –hard HEAD~3 – Никто и никогда не увидит три последних коммита.
  • revert – отмена изменений, произведенных в прошлом отдельным коммитом. Для использования команды необходимо, чтобы состояние проекта не отличалось от состояния, зафиксированного последним коммитом.
    • git revert config-modify-tag – отменяем коммит, помеченный тегом.
    • git revert 12abacd – отменяем коммит, используя его хэш.
  • git log – Разнообразная информация о коммитах в целом, по отдельным файлам и различной глубины погружения в историю.
  • git diff – Отличия между деревьями проекта; коммитами; состоянием индекса и каким-либо коммитом.
    • git diff – Изменения, не внесенные в индекс.
    • git diff –cached – Изменения, внесенные в индекс.
    • git diff HEAD – Изменения в проекте по сравнению с последним коммитом.
    • git diff HEAD^ – Изменения в проекте по сравнению с предпоследним коммитом.
  • git branch – Создание, перечисление и удаление веток
    • git branch – Просто перечислит существующие ветки, отметив активную.
    • git branch new-branch – Создаст новую ветку new-branch.
    • git branch -d new-branch – Удалит ветку, если та была залита (merged) с разрешением возможных конфликтов в текущую.
    • git branch -D new-branch – Удалит ветку в любом случае.
    • git branch -m new-name-branch – Переименует ветку.
    • git branch –contains v1.2 – Покажет те ветки, среди предков которых есть определенный коммит.
  • git checkout – Переключение между ветками, извлечение отдельных файлов из истории коммитов
  • git rebase – Построение ровной линии коммитов
  • git cherry-pick – Применение к дереву проекта изменений, внесенных отдельным коммитом
  • git tag – Тэги как способ пометить уникальный коммит

Удаленный репозиторий

  1. Создаём удаленный репозиторий (например на GitHub).
  2. Связываем локальный репозиторий с удаленным
    $ git remote add origin https://github.com/userName/originName.git
  3. Верифицируем что удаленный репозиторий связан с нашим
    $ git remote -v
  4. Публикуем ветку master на удаленном репозитории
    $ git push -u origin master

В дальнейшем нам потребуется только последний пункт.

Полезно

URL

  • Pro Git book: git-scm.com/book/ru/v2
  • 30 команд Git: habr.com/post/599929/
  • Git шпаргалка: pr0git.blogspot.ru/p/git.html
  • Курс уроков: www.atlassian.com/ru/git/tutorials

Программы

  • gitg: wiki.gnome.org/Apps/Gitg
  • gitk, git gui: git-scm.com/
subjects/programming/git.txt · Последние изменения: 2023/05/01 19:29 —

На главную страницу Обучение Wikipedia Тестирование Контакты Нашли ошибку? Справка

Записаться на занятия

Ошибка Записаться на занятия к репетитору

Телефоны:

  • +7 (910) 874 73 73
  • +7 (905) 194 91 19
  • +7 (831) 247 47 55

Skype: eduVdom.com

закрыть[X]
Наши контакты