Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| itechnology:git [2020/02/16 14:37] – [Изменение истории коммитов] jurik_phys | itechnology:git [2025/09/24 03:20] (текущий) – [Замена "https" на "git over ssh"] 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-репозитория** | ||
| Строка 54: | Строка 64: | ||
| </ | </ | ||
| + | ==== Cмена " | ||
| + | <code bash> | ||
| + | git remote set-url origin git@github.com: | ||
| + | </ | ||
| ===== Файлы ===== | ===== Файлы ===== | ||
| Строка 119: | Строка 133: | ||
| </ | </ | ||
| + | ==== Восстановить файл из коммита ==== | ||
| + | |||
| + | <code bash># восстановить файл main.cpp из коммита 965ee26 | ||
| + | git checkout 965ee26 -- main.cpp</ | ||
| ==== Отменить коммит ==== | ==== Отменить коммит ==== | ||
| <code bash> | <code bash> | ||
| Строка 152: | Строка 170: | ||
| </ | </ | ||
| + | ==== Именование коммитов ==== | ||
| + | |||
| + | Вариант №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: | Строка 252: | ||
| git push remote_server local_branch_name: | git push remote_server local_branch_name: | ||
| </ | </ | ||
| + | ===== Рабочие деревья (Worktree) ===== | ||
| + | * Добавить рабочую ветку< | ||
| + | * Посмотреть список рабочих деревьев< | ||
| + | * Очистить информацию о несуществующих (ранее удалённых) каталогах< | ||
| + | |||
| ===== Работа с подпроектом (ПП) ===== | ===== Работа с подпроектом (ПП) ===== | ||
| ==== Добавление ПП в проект ==== | ==== Добавление ПП в проект ==== | ||
| Строка 319: | Строка 380: | ||
| ===== Метки ===== | ===== Метки ===== | ||
| ==== Создание меток ==== | ==== Создание меток ==== | ||
| - | <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: | Строка 411: | ||
| git config --globasl mergetool.keepBackup false | git config --globasl mergetool.keepBackup false | ||
| </ | </ | ||
| + | </ | ||
| ** Можно посмотреть детали конфликта: | ** Можно посмотреть детали конфликта: | ||
| + | <WRAP indent>< | ||
| <code bash> | <code bash> | ||
| git status | git status | ||
| Строка 366: | Строка 426: | ||
| # | # | ||
| </ | </ | ||
| + | </ | ||
| ==== Запуск процесса разрешения конфликтов ==== | ==== Запуск процесса разрешения конфликтов ==== | ||
| + | <WRAP indent>< | ||
| <code bash> | <code bash> | ||
| git mergetool | git mergetool | ||
| </ | </ | ||
| + | </ | ||
| + | |||
| ==== Описание vimdiff ==== | ==== Описание vimdiff ==== | ||
| Строка 597: | Строка 661: | ||
| P.S. также в настройках сайта апача необходимо AllowOverride None заменить на AllowOverride All | P.S. также в настройках сайта апача необходимо AllowOverride None заменить на AllowOverride All | ||
| ===== Разное ===== | ===== Разное ===== | ||
| + | |||
| + | |||
| ==== Настройка git ==== | ==== Настройка git ==== | ||
| + | |||
| === Идентификация пользователя === | === Идентификация пользователя === | ||
| Строка 640: | Строка 707: | ||
| </ | </ | ||
| - | {{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: | Строка 823: | ||
| - [[http:// | - [[http:// | ||
| + | {{tag> | ||