Практический сценарий использования git
- Предлагается следующий практический сценарий использование git.
- В нём мы используем стратегию git flow, скрипты для генерации общепринятых коммитов, журнала изменений.
Содержание
1 Используемые стандарты и программные продукты
- Стандарт Git Flow (см. Варианты Git Workflow).
- Стандарт Семантическое версионирование.
- Стандарт Общепринятые коммиты.
2 Установка программного обеспечения
- Для Windows используется пакетный менеджер Chocolatey (см. Пакетный менеджер для Windows. Chocolatey).
- Для MacOS используется пакетный менеджер Homebrew.
2.1 Установка Node.js
- На Node.js базируется программное обеспечение для семантического версионирования и общепринятых коммитов.
- Для управления пакетами лучше использовать
pnpm, но можно иyarn. - Gentoo
- Node.js:
emerge nodejs emerge yarn - pnpm ставим из оверлея
guru(см. Gentoo. Дополнительные репозитории):eselect repository enable guru emerge --sync guru emerge pnpm-bin
- Node.js:
- Ubuntu
apt-get install nodejs apt-get install yarn - Fedora
sudo dnf -y install nodejs sudo dnf -y install yarn pnpm - Windows
- Chocolatey (см. Пакетный менеджер для Windows. Chocolatey):
choco install nodejs choco install yarn choco install pnpm
- Chocolatey (см. Пакетный менеджер для Windows. Chocolatey):
- MacOS
brew install node
2.2 Настройка Node.js
Для работы с Node.js добавим каталог с исполняемыми файлами, устанавливаемыми пакетным менеджером, в переменную PATH.
- Linux
pnpm- Запустите:
pnpm setup - Перелогиньтесь, или выполните:
source ~/.bashrc
- Запустите:
yarn- В файле
~/.bashrcдобавьте к переменнойPATH:PATH=~/.yarn/bin:$PATH
- В файле
2.3 Установка git-flow
Linux
- Gentoo
emerge dev-vcs/git-flow - Ubuntu
apt-get install git-flow - Centos
- Первоначально нужно установить репозиторий epel (https://fedoraproject.org/wiki/EPEL):
sudo dnf -y install epel-release - Затем, собственно, установить git-flow:
sudo dnf -y install gitflow
- Первоначально нужно установить репозиторий epel (https://fedoraproject.org/wiki/EPEL):
- Fedora
- Устанавливается из COPR:
sudo dnf -y copr enable elegos/gitflow sudo dnf install gitflow - Можно устанавливать вручную:
cd /tmp wget --no-check-certificate -q https://raw.github.com/petervanderdoes/gitflow/develop/contrib/gitflow-installer.sh chmod +x gitflow-installer.sh sudo ./gitflow-installer.sh install stable
- Устанавливается из COPR:
- Gentoo
Windows Git-flow входит в состав пакета git.
choco install gitMacOS
brew install git-flow
2.4 Общепринятые коммиты
2.4.1 commitizen
- Данная программа используется для помощи в форматировании коммитов.
- pnpm:
pnpm add -g commitizen - yarn:
yarn global add commitizen
- pnpm:
- При этом устанавливается скрипт
git-cz, который мы и будем использовать для коммитов.
2.4.2 standard-version
- Данная программа автоматизирует изменение номера версии.
- pnpm:
pnpm add -g standard-version - yarn:
yarn global add standard-version
- pnpm:
3 Настройка git
3.1 Первичная настройка параметров git
- Зададим имя и email владельца репозитория:
git config --global user.name "Name Surname" git config --global user.email "work@mail" - Настроим utf-8 в выводе сообщений git:
git config --global core.quotepath false - Настройте верификацию и подписание коммитов git (см. Верификация коммитов git с помощью GPG).
- Зададим имя начальной ветки (будем называть её
master):git config --global init.defaultBranch master
3.2 Дополнительные настройки
3.2.1 Работа с переносами строк
- В разных операционных системах приняты разные символы для перевода строк:
- Windows:
\r\n(CRиLF); - Unix:
\n(LF); - Mac:
\r(CR).
- Windows:
- Посмотреть значения переносов строк в репозитории можно командой:
git ls-files --eol
Параметр
autocrlfНастройка
core.autocrlfпредназначена для того, чтобы в главном репозитории все переводы строк текстовых файлах были одинаковы.Настройка
core.autocrlfс параметрамиtrueиinputделает все переводы строк текстовых файлов в главном репозитории одинаковыми.core.autocrlf true: конвертацияCRLF->LFпри коммите и обратноLF->CRLFпри выгрузке кода из репозитория на файловую систему (обычно используется в Windows).core.autocrlf input: конвертацияCRLF->LFтолько при коммитах (используются в MacOS/Linux).
Варианты конвертации
Таблица 1: Варианты конвертации для разных значений параметра core.autocrlfcore.autocrlf false input true git commit LF -> LF LF -> LF LF -> CRLF CR -> CR CR -> CR CR -> CR CRLF -> CRLF CRLF -> LF CRLF -> CRLF git checkout LF -> LF LF -> LF LF -> CRLF CR -> CR CR -> CR CR -> CR CRLF -> CRLF CRLF -> CRLF CRLF -> CRLF Установка параметра:
- Для Windows
git config --global core.autocrlf true - Для Linux
git config --global core.autocrlf input
- Для Windows
Параметр
safecrlf- Настройка
core.safecrlfпредназначена для проверки, является ли окончаний строк обратимым для текущей настройкиcore.autocrlf.core.safecrlf true: запрещается необратимое преобразованиеlf<->crlf. Полезно, когда существуют бинарные файлы, похожие на текстовые файлы.core.safecrlf warn: печать предупреждения, но коммиты с необратимым переходом принимаются.
- Установка параметра:
git config --global core.safecrlf warn
- Настройка
4 Практический сценарий использования git
4.1 Создание репозитория git
4.1.1 Подготовка каталога
- Рабочий каталог будем обозначать как
workdir. Вначале нужно перейти в этот каталог:cd workdir - Создаём заготовку для файла
README.md:echo "# test-repo" >> README.md git add README.md - Добавим шаблон игнорируемых файлов. Просмотрим список имеющихся шаблонов:Затем скачаем шаблон, например, для C и C++:
curl -L -s https://www.gitignore.io/api/listМожно это же сделать через web-интерфейс на сайте https://www.gitignore.io/.curl -L -s https://www.gitignore.io/api/c >> .gitignore curl -L -s https://www.gitignore.io/api/c++ >> .gitignore - Добавим файл лицензии. В данном случае мы выбираем лицензию
CC-BY-4.0(см. Выбор лицензии для научной работы):wget https://creativecommons.org/licenses/by/4.0/legalcode.txt -O LICENSE - Если выбирается лицензия
CC-BY-SA-4.0, то нужно выполнить:wget https://creativecommons.org/licenses/by-sa/4.0/legalcode.txt -O LICENSE - Инициализируем системы git:
git init
4.1.2 Подключение репозитория к github
Создайте репозиторий на GitHub. Для примера назовём его
test-repo.Делаем первый коммит и выкладываем на github:
git commit -m "first commit" git remote add origin git@github.com:<username>/test-repo.git git push -u origin master
4.1.3 Конфигурация общепринятых коммитов
Конфигурация для пакетов Node.js
yarn initНеобходимо заполнить несколько параметров пакета.
- Название пакета.
- Лицензия пакета. Список лицензий для npm: https://spdx.org/licenses/. Предлагается выбирать лицензию
CC-BY-4.0.
Сконфигурим формат коммитов. Для этого добавим в файл
package.jsonкоманду для формирования коммитов:"config": { "commitizen": { "path": "cz-conventional-changelog" } }Таким образом, файл
package.jsonприобретает вид:{ "name": "test-repo", "version": "1.0.0", "description": "Git repo for educational purposes", "main": "index.js", "repository": "git@github.com:username/test-repo.git", "author": "Name Surname <username@gmail.com>", "license": "CC-BY-4.0", "config": { "commitizen": { "path": "cz-conventional-changelog" } } }Добавим новые файлы:
git add .Выполним коммит:
git czОтправим на github:
git push
4.1.4 Конфигурация git-flow
- Инициализируем git-flowПрефикс для ярлыков установим в
git flow initv. - Проверьте, что Вы на ветке
develop:git branch - Загрузите весь репозиторий в хранилище:
git push -u --all - Создадим релиз с версией 1.0.0
git flow release start 1.0.0 - Создадим журнал изменений
standard-changelog --first-release - Добавим журнал изменений в индекс
git add CHANGELOG.md git commit -am 'chore(site): add changelog' - Зальём релизную ветку в основную ветку
git flow release finish 1.0.0 - Отправим данные на github
git push --all git push --tags - Создадим релиз на github. Для этого будем использовать утилиты работы с github (см. github: утилиты командной строки):
gh release create v1.0.0 -F CHANGELOG.md
4.2 Работа с репозиторием git
4.2.1 Разработка новой функциональности
- Создадим ветку для новой функциональности:
git flow feature start feature_branch - Далее, продолжаем работу c git как обычно.
- По окончании разработки новой функциональности следующим шагом следует объединить ветку
feature_branchcdevelop:git flow feature finish feature_branch
4.2.2 Создание релиза git-flow
- Создадим релиз с версией
1.2.3:git flow release start 1.2.3 - Обновите номер версии в файле
package.json. Установите её в1.2.3. - Создадим журнал изменений
standard-changelog - Добавим журнал изменений в индекс
git add CHANGELOG.md git commit -am 'chore(site): update changelog' - Зальём релизную ветку в основную ветку
git flow release finish 1.2.3 - Отправим данные на github
git push --all git push --tags - Создадим релиз на github с комментарием из журнала изменений:
gh release create v1.2.3 -F CHANGELOG.md