Git на своём компьютере: установка, представиться, создать репозиторий
git configgit init и читать вывод git status.git и почему её нельзя трогать рукамиsudo apt install gitsudo dnf install gitxcode-select --install или brew install gitПроверка — команда выводит версию:
$ git --version
git version 2.47.2
git switch и git restore появились в этой версии. Если версия ниже — обновите Git.Каждый коммит подписывается именем и почтой автора. Без них Git откажется создавать коммит. Настройка делается один раз на компьютер:
$ git config --global user.name "Анна Смирнова"
$ git config --global user.email "anna@example.ru"
Имя и почта попадают в историю навсегда и видны всем, кто получит копию репозитория. Для открытых проектов используйте почту, которую не жалко показать. Имя не обязано быть паспортным — ник или псевдоним тоже подходят.
# основная ветка новых репозиториев — main (по умолчанию в Git — master)
$ git config --global init.defaultBranch main
# редактор для сообщений коммитов: VS Code (ждать закрытия вкладки)
$ git config --global core.editor "code --wait"
# окончания строк: Windows — autocrlf true, Linux и macOS — input
$ git config --global core.autocrlf input
main; в старых проектах встречается master. Разницы в работе нет, но единое имя избавляет от путаницы при первой отправке на сервер.Esc, затем :wq и Enter).Посмотреть все настройки и откуда они взяты:
$ git config --list --show-origin
file:/home/anna/.gitconfig user.name=Анна Смирнова
file:/home/anna/.gitconfig user.email=anna@example.ru
file:/home/anna/.gitconfig init.defaultbranch=main
file:/home/anna/.gitconfig core.editor=code --wait
file:/home/anna/.gitconfig core.autocrlf=input
Настройки хранятся в трёх местах. Более узкий уровень перекрывает более широкий.
| Уровень | Флаг | Файл | Действует |
|---|---|---|---|
| Системный | --system | /etc/gitconfig | Все пользователи компьютера |
| Пользовательский | --global | ~/.gitconfig | Все ваши репозитории |
| Репозитория | --local (по умолчанию) | .git/config | Только этот репозиторий |
Пример: рабочие проекты подписываются рабочей почтой, личные — личной. Глобально задаётся личная почта, а внутри рабочего репозитория — рабочая:
$ cd ~/work/crm
$ git config user.email "a.smirnova@company.ru"
$ git config user.email
a.smirnova@company.ru
Репозиторий создаётся в любой папке командой git init. Файлы в папке при этом не меняются — появляется только скрытая папка .git.
$ mkdir portfolio
$ cd portfolio
$ git init
Initialized empty Git repository in /home/anna/portfolio/.git/
Проверка состояния — команда, которую вы будете запускать чаще всех остальных:
$ git status
On branch main
No commits yet
nothing to commit (create/copy files and use "git add" to track)
Создадим файл и посмотрим снова:
$ echo "# Портфолио" > README.md
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
nothing added to commit but untracked files present (use "git add" to track)
Untracked — неотслеживаемый файл: он лежит в рабочем каталоге, но Git его ещё не сохранял. Git подсказывает следующий шаг прямо в выводе — читайте эти подсказки.
$ ls -a
. .. .git README.md
$ ls .git
HEAD config description hooks info objects refs
objects/ — все снимки файлов и коммиты, сжатые и названные по хешу.refs/ — ветки и теги: файлы с хешем коммита, на который они указывают.HEAD — какая ветка сейчас активна. Сейчас в нём строка ref: refs/heads/main.config — настройки уровня репозитория.Папка .git — это и есть репозиторий. Удалите её — пропадёт вся история, а файлы рабочего каталога останутся обычной папкой. Скопируйте папку проекта вместе с .git — получите полную копию со всей историей.
.git вручную и не кладите папку проекта в синхронизируемые облачные диски: одновременная синхронизация с двух компьютеров повреждает репозиторий. Для обмена служит git-хостинг (модуль 07).user.name и user.email — они попадают в историю навсегдаinit.defaultBranch main избавляет от путаницы main/mastergit init создаёт папку .git; файлы проекта не меняютсяgit status — первая команда при любой неясности; читайте подсказки в её выводе