Что такое Git
Git — это VCS (version control system) — система, записывающая изменения файлов и позволяющая вернуться позже к определённой версии.
VCS можно разделить на централизованные и распределенные. Git относится ко второй категории.
В распределенных VCS у каждого разработчика локально хранится репозиторий (проект с файлами) с полной историей всех изменений в проекте. В такой схеме разработчики полностью независимы от удаленного сервера.
Каждый раз при сохранении состояния проекта, Git запоминает, как выглядит каждый файл в этот момент времени, как бы делая снимок всего проекта и сохраняет ссылку на этот снимок (коммит). Каждый коммит имеет ссылку на предыдущий, формируя цепочку, по которой можно отследить всю историю проекта.
Как получить помощь
Эти команды работают даже без подключения к сети.
git help <команда> (или git <команда> --help) Открыть страницу руководства по любой команде Git.
git <команда> -h Вывести список опций для команды с коротким описанием.
Общие команды для работы с файлами
cat <file> Просмотр содержимого файла.
mkdir <name> Создание каталога (папки).
touch <file> Создание файла.
cd <name> Переход в каталог.
cd .. Выход из каталога.
rm <file> Удаление файла.
rm -r <file> Позволяет удалить директорию (папку).
Навигация в Git Bash
"Листалка по умолчанию", представленная двоеточием в нижнем левом углу Git Bash — программа LESS, которая позволяет выводить постранично информацию на экран. Основные команды:
/Поиск по строке или регулярному выражениюnПоиск вперед (прокрутка вниз)shift + nПоиск назад (прокрутка вверх)
qВыход из программы
Состояние файлов в Git
Файлы в рабочем каталоге могут быть tracked (под версионным контролем) и untracked (не под версионным контролем).
Отслеживаемые файлы могут находиться в одном из трех состояний: modified (изменён), staged (индексирован) и committed (зафиксирован).
Каждый Git проект имеет три секции:
Working Directory — директория для редактирования файлов.
Staging Area (область индексирования или Индекс) — файл, в котором содержится информация о том, что попадёт в следующий коммит.
Repository (каталог Git) — место, где Git хранит метаданные и базу объектов всего проекта.
Конфигурация
Команда git config позволяет настраивать параметры конфигурации Git, которые можно задать на трех уровнях:
--systemСохраняет общие для всех пользователей параметры в установочный файл/etc/gitconfig.--globalСохраняет параметры настроек пользователя в файлC:\Users\<username>\.gitconfig.- [
--local] Сохраняет параметры для конкретного проекта в файл<project>/.git/config.
git config <name> Получить значение настройки по имени.
git config <name> <value> Установить параметр name со значением value.
git config --unset <name> Удалить параметр.
git config --list Список значений всех установленных настроек.
git config --global -e Открыть для редактирования глобальный файл настроек.
Примеры
git config --global user.name "Sergey Des" Установить имя пользователя глобально.
git config --global core.editor "code -w" Сделать VS Code редактором по умолчанию.
git config --global log.date format-local:'%Y-%m-%d %H:%M:%S' Изменить формат вывода даты по умолчанию.
git config --global grep.patternType perl Сделать регулярные выражения Perl-совместимыми по умолчанию.
git config --global commit.verbose true По умолчанию добавлять в комментарий git commit изменения diff.
git config merge.ff false Запретить слияние Fast-forward (аналог флага --no-ff).
git config --global branch.master.mergeoptions '--no-ff' Запретить Fast-forward для ветки master.
git config --global core.autocrlf true Конвертировать переносы строк CRLF в LF.
Перевод строки в Windows кодируется двумя байтами 0d 0a, обозначаемыми как CRLF (carriage return + line feed), соответствует символам \r\n. Unix-системы (Mac, Linux), а также Git-репозиторий кодируют перевод строки одним байтом 0a (LF), поэтому на Mac и Linux core.autocrlf ставят в другое значение (input или false).
git config rerere.enabled true Включить reuse recorded resolution (запоминать, как были разрешены конфликты, чтобы при возникновении такого же конфликта снова они были разрешены автоматически).
git config pretty.my format:'%C(yellow)%h %C(dim green)%cd %C(cyan)%s%d %C(#667788)[%an]' Добавить формат вывода.
git config format.pretty my И сделать его форматом по умолчанию.
Псевдонимы
git config alias.<name> <command> Добавить псевдоним name для команды command.
git config alias.<name> '!<first>; <second>' Добавить псевдоним для нескольких команд.
git config --list | grep alias Вывести список всех псевдонимов.
Примеры
git config --global alias.last 'log -1 HEAD' Назначить глобальный псевдоним last для вывода текущего коммита (HEAD указывать не обязательно).
git config alias.sayhi '!echo "hello"; echo "from git"' Назначить псевдоним, который будет выводить hello, а затем, на следующей строке, from git.
git config --global alias.lg "log --pretty=format:'%C(#f3f89d)%h %C(#418d61)%cd %C(reset)|%C(#F78972)%d %C(#9aedf1)%s %C(#667788)[%an]' --date=format:'%F %R'" Задать псевдоним для красивого вывода git log.
Файл .gitignore
Для файлов и каталогов, которые не нужно автоматически добавлять в репозиторий и видеть в списке неотслеживаемых, используется файл .gitignore.
К шаблонам в файле .gitignore применяются следующие правила:
- Пустые строки, а также строки, начинающиеся с
#, игнорируются - Стандартные шаблоны являются глобальными и применяются рекурсивно для всего дерева каталогов
- Чтобы избежать рекурсии, используется слеш
/в любом месте кроме конца шаблона - Чтобы применять правила только к каталогам, добавляется слеш
/в конец шаблона *соответствует нулю или более символам в имени одного файла или директории**соответствует произвольному пути, но не части имени[abc]соответствует любому символу из указанных в скобках?соответствует одному произвольному символу[0-9]соответствуют одному символу из диапазонаa/**/zуказывает на то, что могут быть вложенные каталоги (например,a/z,a/b/z,a/b/c/z, и тд)!отменяет игнорирование, если только каталог с этим файлом не игнорируется целиком
Примеры
*.a Исключить все файлы с расширением .a.
!lib.a Но отслеживать файл lib.a даже если он подпадает под исключение выше.
doc/**/*.txt Игнорировать все .txt файлы в каталоге doc/.
Вспомогательные команды
git check-ignore -v <file> Если файл попадает под правило в .gitignore, выводит строку с шаблоном, который за это отвечает (номер строки обернут в двоеточие).
Чтобы применить шаблоны в .gitignore к уже отслеживаемым файлам, необходимо выполнить команды git rm --cached <file> + git commit.
git update-index --skip-worktree <file> Временнно прекратить отслеживание файла в репозитории.
git update-index --no-skip-worktree <file> Возобновить отслеживание.
git ls-files -v . | findstr "^S" Найти все временно неотслеживаемые файлы.
.git/info/exclude
Правила игнорирования, которые не должны передаваться в репозиторий, можно указать в файле <project>/.git/info/exclude.