Git
АлмазПосле установки git необходимо настроить имя и email автора
Имя:
git config --global user.name <..>
config - изменение конфигурации Git
--global - имя будет настроено глобально для всех репозиториев
user.name - настройка имени автора
<..> - ваше имя
Почта:
git config --global user.email <..>
Проверка изменений:
git config --list
Создание файла с текстом через терминал:
echo "Some text" > file_name.txt
Создание нового репозитория в новой папке:
git init
После инициализации данной команды создается скрытая папка .git
Чтобы посмотреть скрытые папки:
ls -la
Working directory - видимая область git, которая содержит видимые папки и файлы, которые мы используем в проекте.
Staging area - в эту область добавляются файлы до того, как мы хотим их сохранить
Repository - после подготовки файлов и они находятся в индексе, мы можем сохранить файлы и записать их в репозиторий. Они будут хранится в папке objects. Кроме того здесь сохраняются комиты (указатели на различные версии наших проектов). Репозиторий позволяет сохранять различные версии созданных программ и файлов.
Проверить состояние индекса:
git status
Эта команда показывает те изменения, которые находятся уже в staging area и готовы для сохранения или комита. Если изменений не было, то staging area будет выглядеть пустым.
Рабочий процесс
Добавление файлов из working directory в staging area:
git add . or *file_name*
. - добавление всех новых или измененных файлов из директории
Сохранение текущей версии проекта (перенос из staging to repository):
git commit
Перемещение готовых объектов из repository to working directory, чтобы перейти к определенной версии:
git checkout
Статус отслеживания файлов
Untracked - этот статус получают только те файлы, что мы добавляем в рабочую директорию. Не добавляя его в индекс или не изменяя.
Staged - присваивается тем файлам, которые уже добавлены в staging area.
Unmodified - когда в working directory and repository находится одна и та же версия файла, то будет статус такого файла. Когда такой статус, можно внести изменения
Modified - когда в файл со статусом unmodified вносятся изменения, то его статус меняется на modified. Они также находятся в рабочей директории и их можно подготовить для сохранения в staging area. Когда commit им этот файл, то он снова становится в статусе unmodified
Untracked - Staged - Unmodified - Modified ( - Staged - Modified and etc)
Объекты Git
blob - объекты создаются для файлов, причем для каждой отдельной версии создается отдельный blob, различные версии файлов сохраняются в папке objects.
Tree - папка, так сохраняются в репозитории Git. Может также ссылаться на другие папки
Commit - метаданные с содержанием об изменениях или версиях, кто автор комита и дополнительная информация
Annotated tag - аннотированный тег, позволяет перемещаться по разным версиям проекта с использованием тега
Каждый объект в git имеет уникальный id (sha1 hash)
Commit
Commit - объект git, который является указателем на дерево.
При создании blob and tree, git создает также commit, который ссылается на необходимый tree. То есть является ссылкой на определенное дерево.
SHA1 хэш родительских коммитов позволяет отслеживать всю историю изменений. Каждый следующий коммит, ссылается на предыдущий.
Ветка - ссылка на commit. Ветка всегда ссылается на самый последний commit в этой ветке.
При создании нового commit git всегда создает новое корневой three.
Основные команды
git status
Показывает, какие файлы были изменены, отображает текущее состояние git репозитория. Также с помощью этой команды можно посмотреть, какие файлы уже находятся в staging area.
git add
Добавление файлов from working directory to staging area.
git commit -m "message"
-m - сообщение для определенного коммита.
Создание коммита с записью всех изменений в репозиторий. Все то, что было подготовлено в staging area will be save in repository.
git log
Просмотр истории изменений (коммитов).
git checkout *commit hash* or *branch name*
переход в определенную версию проекта по sha1 хэшу коммита. Также отдельно можно перейти в определенную ветку.
git cat-file -p *начало кэша коммита*
Увидеть содержимое объекта можно помощью этой команды.
Перемещение между версиями
git checkout *начало кэша коммита*
Three in git
Перемещение между ветками, происходит также как и переключение между commit. То есть:
git checkout *three_name*
Создание новой ветки (рекомендуется называть так, чтобы было понятно, какой функционал разрабатывается):
git branch *branch name*
Создание новой ветки и переход в нее:
git checkout -b *branch_name*
Отображение всех веток:
git branch
Переименовывание текущей ветки:
git branch -m *new_branch_name*
Удаление ветки (текущую ветку удалить нельзя):
git branch -d *branch_name*
Слияние веток
Слияние веток происходит за счет создания merge commit. Ветка main принимает изменения сделанные в ветке new-feature.
Слияние другой ветки (feature branch) в текущую (receiving branch):
git merge *feature branch name*
После этого git создаст merge commit:
Локальные и удаленные репозитиории
git push
загрузка изменений с локального репозитория в удаленный
git pull
загрузка и применение изменений с удаленного ветки в локальную
git clone *url*
клонирование удаленного репозитория на локальный компьютер
Origin - имя удаленного репозитория по умолчанию
git branch -a
Отображает все ветки, включая те, которые находятся в удаленных репозиториях
Связь существующего локального репозитория с удаленным
Подключение удаленного репозитория:
git remote add origin *url*
Origin - имя удаленного репозитория по умолчанию
Загрузка изменений из локальной ветки в удаленную путем создания связи между ними:
git push -u origin *branch*
origin - название удаленного сервера, на который хотим загрузить изменения
branch - название удаленной ветки в удаленном репозитории, в которую изменения из текущей версии будут загружены.
Дальнейшние загрузки изменений в ветку удаленного репозитория после установки связи между локальной и удаленной версиями:
git push and git pull
Просмотр соединения локальной ветки с удаленной можно:
git branch -vv