Практический сценарий использования 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:
- pnpm ставим из оверлея
guru
(см. Gentoo. Дополнительные репозитории):
- Ubuntu
- Fedora
- Windows
- Chocolatey (см. Пакетный менеджер для Windows. Chocolatey):
- MacOS
1brew install node
2.2 Настройка Node.js
Для работы с Node.js добавим каталог с исполняемыми файлами, устанавливаемыми пакетным менеджером, в переменную PATH
.
- Linux
2.3 Установка git-flow
Linux
- Gentoo
1emerge dev-vcs/git-flow
- Ubuntu
1apt-get install git-flow
- Centos
- Первоначально нужно установить репозиторий epel (https://fedoraproject.org/wiki/EPEL):
1yum install epel-release
- Затем, собственно, установить git-flow:
1yum install gitflow
- Первоначально нужно установить репозиторий epel (https://fedoraproject.org/wiki/EPEL):
- Fedora
- Это программное обеспечение удалено из репозитория.
- Необходимо устанавливать его вручную:
- Gentoo
Windows Git-flow входит в состав пакета git.
1choco install git
MacOS
1brew install git-flow
2.4 Общепринятые коммиты
2.4.1 commitizen
- Данная программа используется для помощи в форматировании коммитов.
- При этом устанавливается скрипт
git-cz
, который мы и будем использовать для коммитов.
2.4.2 standard-version
- Данная программа автоматизирует изменение номера версии.
3 Настройка git
3.1 Первичная настройка параметров git
- Зададим имя и email владельца репозитория:
- Настроим utf-8 в выводе сообщений git:
1git config --global core.quotepath false
- Настройте верификацию и подписание коммитов git (см. Верификация коммитов git с помощью GPG).
- Зададим имя начальной ветки (будем называть её
master
):1git config --global init.defaultBranch master
3.2 Дополнительные настройки
3.2.1 Работа с переносами строк
- В разных операционных системах приняты разные символы для перевода строк:
- Windows:
\r\n
(CR
иLF
); - Unix:
\n
(LF
); - Mac:
\r
(CR
).
- Windows:
- Посмотреть значения переносов строк в репозитории можно командой:
1git 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).
Варианты конвертации
core.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 Установка параметра:
Параметр
safecrlf
- Настройка
core.safecrlf
предназначена для проверки, является ли окончаний строк обратимым для текущей настройкиcore.autocrlf
.core.safecrlf true
: запрещается необратимое преобразованиеlf<->crlf
. Полезно, когда существуют бинарные файлы, похожие на текстовые файлы.core.safecrlf warn
: печать предупреждения, но коммиты с необратимым переходом принимаются.
- Установка параметра:
1git config --global core.safecrlf warn
- Настройка
4 Практический сценарий использования git
4.1 Создание репозитория git
4.1.1 Подготовка каталога
- Рабочий каталог будем обозначать как
workdir
. Вначале нужно перейти в этот каталог:1cd workdir
- Создаём заготовку для файла
README.md
: - Добавим шаблон игнорируемых файлов. Просмотрим список имеющихся шаблонов:Затем скачаем шаблон, например, для C и C++:
1curl -L -s https://www.gitignore.io/api/list
Можно это же сделать через web-интерфейс на сайте https://www.gitignore.io/.1curl -L -s https://www.gitignore.io/api/c >> .gitignore 2curl -L -s https://www.gitignore.io/api/c++ >> .gitignore
- Добавим файл лицензии. В данном случае мы выбираем лицензию
CC-BY-4.0
(см. Выбор лицензии для научной работы):1wget https://creativecommons.org/licenses/by/4.0/legalcode.txt -O LICENSE
- Если выбирается лицензия
CC-BY-SA-4.0
, то нужно выполнить:1wget https://creativecommons.org/licenses/by-sa/4.0/legalcode.txt -O LICENSE
- Инициализируем системы git:
1git init
4.1.2 Подключение репозитория к github
Создайте репозиторий на GitHub. Для примера назовём его
test-repo
.Делаем первый коммит и выкладываем на github:
4.1.3 Конфигурация общепринятых коммитов
Конфигурация для пакетов Node.js
1yarn init
Необходимо заполнить несколько параметров пакета.
- Название пакета.
- Лицензия пакета. Список лицензий для npm: https://spdx.org/licenses/. Предлагается выбирать лицензию
CC-BY-4.0
.
Сконфигурим формат коммитов. Для этого добавим в файл
package.json
команду для формирования коммитов:Таким образом, файл
package.json
приобретает вид:1{ 2 "name": "test-repo", 3 "version": "1.0.0", 4 "description": "Git repo for educational purposes", 5 "main": "index.js", 6 "repository": "git@github.com:username/test-repo.git", 7 "author": "Name Surname <username@gmail.com>", 8 "license": "CC-BY-4.0", 9 "config": { 10 "commitizen": { 11 "path": "cz-conventional-changelog" 12 } 13 } 14}
Добавим новые файлы:
1git add .
Выполним коммит:
1git cz
Отправим на github:
1git push
4.1.4 Конфигурация git-flow
- Инициализируем git-flowПрефикс для ярлыков установим в
1git flow init
v
. - Проверьте, что Вы на ветке
develop
:1git branch
- Загрузите весь репозиторий в хранилище:
1git push -u --all
- Создадим релиз с версией 1.0.0
1git flow release start 1.0.0
- Создадим журнал изменений
1standard-changelog --first-release
- Добавим журнал изменений в индекс
- Зальём релизную ветку в основную ветку
1git flow release finish 1.0.0
- Отправим данные на github
- Создадим релиз на github. Для этого будем использовать утилиты работы с github (см. github: утилиты командной строки):
1gh release create v1.0.0 -F CHANGELOG.md
4.2 Работа с репозиторием git
4.2.1 Разработка новой функциональности
- Создадим ветку для новой функциональности:
1git flow feature start feature_branch
- Далее, продолжаем работу c git как обычно.
- По окончании разработки новой функциональности следующим шагом следует объединить ветку
feature_branch
cdevelop
:1git flow feature finish feature_branch
4.2.2 Создание релиза git-flow
- Создадим релиз с версией
1.2.3
:1git flow release start 1.2.3
- Обновите номер версии в файле
package.json
. Установите её в1.2.3
. - Создадим журнал изменений
1standard-changelog
- Добавим журнал изменений в индекс
- Зальём релизную ветку в основную ветку
1git flow release finish 1.2.3
- Отправим данные на github
- Создадим релиз на github с комментарием из журнала изменений:
1gh release create v1.2.3 -F CHANGELOG.md