Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
itechnology:git [2020/02/16 14:37] – [Изменение истории коммитов] jurik_phys | itechnology:git [2025/06/28 17:08] (текущий) – [Работа с подпроектом (ПП)] jurik_phys | ||
---|---|---|---|
Строка 4: | Строка 4: | ||
==== Клонирование с git-сервера ==== | ==== Клонирование с git-сервера ==== | ||
- | <code bash> | + | * через настроенный доступ **ssh**:<code bash> |
- | git clone user_name@serve_name:/ | + | # GitHub |
+ | git clone git@github.com: | ||
+ | # Any other Git server | ||
+ | git clone user_name@server_name:/ | ||
</ | </ | ||
+ | * через публичный **https** доступ:< | ||
+ | git clone https:// | ||
+ | </ | ||
+ | * через публичный **https** доступ с клонированием подпроектов:< | ||
+ | * проверка доступа по ssh к git-серверу, | ||
+ | ssh -T git@github.com</ | ||
+ | * успех:< | ||
+ | * ошибка:< | ||
==== Создание удалённого репозитория ==== | ==== Создание удалённого репозитория ==== | ||
**Инициализация git-репозитория** | **Инициализация git-репозитория** | ||
Строка 119: | Строка 129: | ||
</ | </ | ||
+ | ==== Восстановить файл из коммита ==== | ||
+ | |||
+ | <code bash># восстановить файл main.cpp из коммита 965ee26 | ||
+ | git checkout 965ee26 -- main.cpp</ | ||
==== Отменить коммит ==== | ==== Отменить коммит ==== | ||
<code bash> | <code bash> | ||
Строка 152: | Строка 166: | ||
</ | </ | ||
+ | ==== Именование коммитов ==== | ||
+ | |||
+ | Вариант №1 рекомендаций по именованию коммитов ([[https:// | ||
+ | < | ||
+ | |||
+ | | **Fix** |коммит, | ||
+ | | **Feat** | коммит, | ||
+ | | **Chore** | коммит, | ||
+ | | **Refactor** | этот коммит содержит рефакторинг, | ||
+ | | **Docs** | этот коммит изменяет документацию, | ||
+ | | **Style** | коммит, | ||
+ | | **Test** | коммит, | ||
+ | | **Perf** | коммит, | ||
+ | | **Ci** | коммит, | ||
+ | | **Build** | это файлы, которые включают файлы сборки и зависимости | ||
+ | | **Revert** | коммит, | ||
+ | |||
+ | Вариант №2 ([[https:// | ||
+ | |||
+ | - Отделяйте заголовок от тела пустой строкой. | ||
+ | - Ограничивайте заголовок 50 символами. | ||
+ | - Пишите заголовок с заглавной буквы. | ||
+ | - Не ставьте точку в конце заголовка. | ||
+ | - Используйте повелительное наклонение в заголовке | ||
+ | * Это не повелительное наклонение, | ||
+ | If applied, this commit will **Refactor subsystem X for readability** \\ | ||
+ | If applied, this commit will **Update getting started documentation** \\ | ||
+ | If applied, this commit will **Remove deprecated methods** \\ | ||
+ | If applied, this commit will **Release version 1.0.0**</ | ||
+ | - Переходите на следующую строку в теле на 72 символах. | ||
+ | - В теле отвечайте на вопросы «что» и «почему», | ||
===== Ветки ===== | ===== Ветки ===== | ||
==== Создание локальной ветки ==== | ==== Создание локальной ветки ==== | ||
- | <code bash> | + | * <code bash> |
git branch new_branch | git branch new_branch | ||
git checkout new_branch | git checkout new_branch | ||
</ | </ | ||
- | ==== Объединение веток ==== | + | ==== Слияние веток ==== |
- | <code bash> | + | *<code bash> |
# переход на ветку в которую будут сливаться изменения | # переход на ветку в которую будут сливаться изменения | ||
- | git сheckout master | + | git checkout main |
# вливание devel_branch в текущую (master) ветку | # вливание devel_branch в текущую (master) ветку | ||
git merge devel_branch | git merge devel_branch | ||
</ | </ | ||
- | ==== Просмотр всех веток, включая удалённые | + | ==== Список всех веток ==== |
- | <code bash> | + | |
git branch -a | git branch -a | ||
</ | </ | ||
==== Удаление ветки ==== | ==== Удаление ветки ==== | ||
- | <code bash> | + | |
- | # удаление удалённой ветки | + | * Локальный репозиторий: |
- | git push server : | + | * Удалённый репозиторий:< |
- | # удаление | + | |
- | git branch | + | ==== Переименование |
- | </ | + | |
+ | * Локальный репозиторий: | ||
+ | * Текущая ветка (-m сокращение от --move):< | ||
+ | * Произвольная ветка: <code bash>git branch -m < | ||
+ | * Удалённый репозиторий: | ||
+ | * Отправка новой ветки | ||
+ | * Удаление | ||
==== Вытянуть удалённую ветку ==== | ==== Вытянуть удалённую ветку ==== | ||
Строка 196: | Строка 248: | ||
git push remote_server local_branch_name: | git push remote_server local_branch_name: | ||
</ | </ | ||
+ | ===== Рабочие деревья (Worktree) ===== | ||
+ | * Добавить рабочую ветку< | ||
+ | * Посмотреть список рабочих деревьев< | ||
+ | * Очистить информацию о несуществующих (ранее удалённых) каталогах< | ||
+ | |||
===== Работа с подпроектом (ПП) ===== | ===== Работа с подпроектом (ПП) ===== | ||
==== Добавление ПП в проект ==== | ==== Добавление ПП в проект ==== | ||
Строка 319: | Строка 376: | ||
===== Метки ===== | ===== Метки ===== | ||
==== Создание меток ==== | ==== Создание меток ==== | ||
- | <code bash> | + | * Аннотированные метки (рекомендуется)<code bash>git tag -a vX.Y -m " |
- | git tag tag_name | + | * Легковесные метки< |
- | </ | + | |
==== Просмотр меток ==== | ==== Просмотр меток ==== | ||
- | <code bash> | + | * Общий список: |
- | git tag | + | * Подробности по тегу " |
- | </ | + | |
==== Отправка меток на сервер | ==== Отправка меток на сервер | ||
- | <code bash> | + | * По умолчанию, |
- | git push origin --tags | + | |
- | </ | + | |
===== Разрешение конфликтов ===== | ===== Разрешение конфликтов ===== | ||
==== Настройка инструментов ==== | ==== Настройка инструментов ==== | ||
- | <code bash> | + | <WRAP indent>< |
- | # установка vimdiff в качестве инструмента разрешения конфликтов | + | |
git config --global merge.tool vimdiff | git config --global merge.tool vimdiff | ||
# не создавать *.orig файлов | # не создавать *.orig файлов | ||
git config --globasl mergetool.keepBackup false | git config --globasl mergetool.keepBackup false | ||
</ | </ | ||
+ | </ | ||
==== Появление конфликта слияния ==== | ==== Появление конфликта слияния ==== | ||
+ | <WRAP indent>< | ||
<code bash> | <code bash> | ||
# установка текущей ветки (master) | # установка текущей ветки (master) | ||
Строка 353: | Строка 407: | ||
git config --globasl mergetool.keepBackup false | git config --globasl mergetool.keepBackup false | ||
</ | </ | ||
+ | </ | ||
** Можно посмотреть детали конфликта: | ** Можно посмотреть детали конфликта: | ||
+ | <WRAP indent>< | ||
<code bash> | <code bash> | ||
git status | git status | ||
Строка 366: | Строка 422: | ||
# | # | ||
</ | </ | ||
+ | </ | ||
==== Запуск процесса разрешения конфликтов ==== | ==== Запуск процесса разрешения конфликтов ==== | ||
+ | <WRAP indent>< | ||
<code bash> | <code bash> | ||
git mergetool | git mergetool | ||
</ | </ | ||
+ | </ | ||
+ | |||
==== Описание vimdiff ==== | ==== Описание vimdiff ==== | ||
Строка 597: | Строка 657: | ||
P.S. также в настройках сайта апача необходимо AllowOverride None заменить на AllowOverride All | P.S. также в настройках сайта апача необходимо AllowOverride None заменить на AllowOverride All | ||
===== Разное ===== | ===== Разное ===== | ||
+ | |||
+ | |||
==== Настройка git ==== | ==== Настройка git ==== | ||
+ | |||
=== Идентификация пользователя === | === Идентификация пользователя === | ||
Строка 640: | Строка 703: | ||
</ | </ | ||
- | {{tag>git}} | + | |
+ | ===== Частые сценарии ===== | ||
+ | <hidden -noprint onHidden=" | ||
+ | |||
+ | * Вариант №1 | ||
+ | * Создание ветки <code bash> | ||
+ | * Верификация созданной ветки <code bash>git branch | ||
+ | ... | ||
+ | BR-NAME | ||
+ | ...</ | ||
+ | * Переключение на созданную ветку «BR-NAME» <code bash>git checkout BR-NAME</ | ||
+ | * Вариант №2 | ||
+ | * Создание и переключение на ветку «BR-NAME» одной командой <code bash>git checkout -b BR-NAME</ | ||
+ | </ | ||
+ | |||
+ | <hidden -noprint onHidden=" | ||
+ | |||
+ | * Создание и переключение на ветку «BR-NAME» <code bash>git checkout -b BR-NAME</ | ||
+ | * Внесение изменений в файлы проекта и создание коммита <code bash>git commit -a</ | ||
+ | * Отправка ветки на сервер и установка связи между локальной и удалённой веткой< | ||
+ | </ | ||
+ | |||
+ | <hidden -noprint onHidden=" | ||
+ | |||
+ | * Добавление MicroTeX как подпроекта в каталог '' | ||
+ | * При клонировании репозитория с подпроектами их необходимо инициализировать< | ||
+ | * Переключение на требуемую (openmath) ветку в подпроекте< | ||
+ | * Вернуться в основной репозиторий и зафиксировать изменения< | ||
+ | </ | ||
+ | |||
+ | <hidden -noprint onHidden=" | ||
+ | * Деинициализация submodule< | ||
+ | * Удаление при необходимости файлов подпроекта из индекса Git<code bash>git rm --cached lab_os/ | ||
+ | * Удаление каталога подпроекта< | ||
+ | * Открыть файл .gitsubmodules и удалить блок с данными подмодуля< | ||
+ | path = lab_os/ | ||
+ | url = https:// | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | <hidden -noprint onHidden=" | ||
+ | * Список веток:< | ||
+ | * Переключение текущей ветки:< | ||
+ | </ | ||
+ | |||
+ | <hidden -noprint onHidden=" | ||
+ | * Может понадобиться, | ||
+ | </ | ||
+ | |||
+ | <hidden -noprint onHidden=" | ||
+ | * Когда необходимо вернуться к предыдущей версии кода:< | ||
+ | * При необходимости сохранения изменений можно: | ||
+ | - Cоздать ветку:< | ||
+ | - Переключиться на созданную ветку:< | ||
+ | </ | ||
+ | |||
+ | |||
+ | <hidden -noprint onHidden=" | ||
+ | * Когда стало ясно, что сделанные изменения в коде ошибочны< | ||
+ | </ | ||
+ | |||
+ | ===== Работа с GitHub ====== | ||
+ | ==== Первый запуск ==== | ||
+ | |||
+ | === Генерация ключей SSH === | ||
+ | |||
+ | Для работы с сервисом GitHub через терминал по протоколу SSH необходимо один раз сгенерировать ключи шифрования и публичный добавить в аккаунт в раздел " | ||
+ | |||
+ | Процесс генерации ключей описан по [[ https:// | ||
+ | |||
+ | |||
+ | |||
+ | **Проверка соединения с github через ssh**< | ||
+ | The authenticity of host ' | ||
+ | RSA key fingerprint is SHA256: | ||
+ | Are you sure you want to continue connecting (yes/ | ||
+ | |||
+ | === Коммит от имени аккаунта GitHub === | ||
+ | |||
+ | GitHub использует email адрес для ассоциации отправленных коммитов с аккаунтом GitHub. | ||
+ | |||
+ | Чтобы связать коммиты с аккаунтом GitHub: | ||
+ | * [[https:// | ||
+ | * установите тот же самый email в настройках Git или репозитория:< | ||
+ | * создайте какие-нибудь коммиты (git commit -a) и отправьте их (git push) в GitHub. | ||
+ | |||
+ | После этого GitHub признает Вас, и все новые коммиты будут подписаны вашим аккаунтом со ссылкой на него, а не просто именем. Подробности по [[https:// | ||
+ | |||
+ | ==== Типичные задачи ==== | ||
+ | |||
+ | **Создание пустого репозитория: | ||
+ | * создать новый репозиторий на странице << | ||
+ | * клонировать созданный репозиторий на локальной машине:< | ||
+ | |||
+ | **Создание GitHub репозитория под существующий локальный проект: | ||
+ | * создать новый репозиторий на странице << | ||
+ | * войти в каталог с проектом и подключить удалённый репозиторий командой <code bash>git remote add origin git@github.com: | ||
+ | * просмотреть список удалённых репозиториев:< | ||
+ | * а) отправить все ветки на удалённый репозиторий:< | ||
+ | * б) отправить только локальную ветку main:< | ||
+ | |||
+ | **Переименовать или удалить репозиторий** можно на странице: | ||
+ | * < | ||
+ | |||
+ | **Добавление уже созданного на github' | ||
+ | * < | ||
+ | |||
+ | **Клонирование (стороннего) репозитория** | ||
+ | * < | ||
===== Дополнительные материалы git ===== | ===== Дополнительные материалы git ===== | ||
- [[http:// | - [[http:// | ||
Строка 646: | Строка 819: | ||
- [[http:// | - [[http:// | ||
+ | {{tag> |