Git (произн. «гит») — распределённая система управления версиями. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года. Система спроектирована как набор программ, специально разработанных с учётом их использования в скриптах. Это позволяет удобно создавать специализированные системы контроля версий на базе Git или пользовательские интерфейсы.
Система управления версиями (от англ. Version Control System, VCS или Revision Control System) — программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое. Такие системы наиболее широко используются при разработке программного обеспечения для хранения исходных кодов разрабатываемой программы. Однако они могут с успехом применяться и в других областях, в которых ведётся работа с большим количеством непрерывно изменяющихся электронных документов.
Ядро 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:
*.[oa] *.log
Первая строка предписывает Git'у игнорировать любые файлы заканчивающиеся на .o или .a — объектные и архивные файлы, которые могут появиться во время сборки кода. Вторая - то же самое, для файлов заканчивающихся на «.log».
Исключаем папки и файлы, начинающиеся с двух подчёркиваний и содержимое virt.py3:
__*/* __* virt.py3/*
$ git help
Вывести информацию обо всех изменениях, внесенных в дерево директорий проекта:
$ git status
Краткий вывод:
$ git status --short $ git status --s
Обозначения в выводе команды git status -s:
M - (modified) отслеживаемые, изменились с прошлого коммита, еще не добавленыD - (deleted) отслеживаемые, удалены после прошлого коммита, еще не добавлены? - (untracked) неотслеживаемые, не запрещены к добавлению! - (ignored) неотслеживаемые, запрещены к добавлению (например, в .gitignore)$ 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, ?, !, причём последнее приводит к ошибке.$ 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
$ git rebase -i HEAD~2
pick. Вам необходимо изменить слово pick на букву s у второй строки. Это означает, что данный коммит будет объединен с предыдущим коммитом – это написано в комментариях.git rm FILE1 FILE2 – Удалить файл(ы) из индекса и дерева одновременно.git reset – Сбросить весь индекс. git reset –soft HEAD^ – переходим к работе над уже совершенным коммитом, сохраняя все состояние проекта и проиндексированные файлы.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 checkout [branch_name] – Переключает на ветку branch_name .git checkout -b [branch_name] – Создаёт ветку branch_name и переключает на неё. git rebase – Построение ровной линии коммитов git cherry-pick – Применение к дереву проекта изменений, внесенных отдельным коммитом git tag – Тэги как способ пометить уникальный коммит git merge [branch_name] – Сливает текущую ветку с branch_name. git rebase – Второй способ объединения изменений в ветках.git rebase [branch_name] – Вливает текущую ветку в branch_name. – $ git remote add origin https://github.com/userName/originName.git
$ git remote -v
$ git push -u origin master
В дальнейшем нам потребуется только последний пункт.
gitg: wiki.gnome.org/Apps/Gitggitk, git gui: git-scm.com/