Использование Git
Получение исходного кода
Если вам нужно только получить последнюю версию исходного кода и вам не требуется возможность отправлять изменения в репозиторий MariaDB, вы можете использовать следующую команду для получения последней ветки 10.5:
git clone -b 10.5 https://github.com/MariaDB/server.git
Настройка Git для MariaDB
- Установите ваше имя с помощью Git
git config --global user.name "Ivan Ivanov" git config --global user.email "ivan@mariadb.com"
- Перейдите на https://github.com/settings/ssh и добавьте свой открытый SSH-ключ (Помощь GitHub).
- Клонируйте репозиторий
git clone git@github.com:MariaDB/server.git cd server git checkout 10.5
- Настройка pull репозитория и алиас для fast forward:
git config pull.ff only git config --global alias.ff "merge --ff-only"
Комментарии к коммитам
В Git сообщения коммитов обычно форматируются как
subject body more body ...
То есть, первая строка считается *темой*, как и тема письма. Многие команды Git и страницы на GitHub показывают только тему коммита, а не весь комментарий. После темы следует пустая строка, а затем подробное описание комментария. Пожалуйста, структурируйте свои комментарии к коммитам таким образом, не забывайте о пустой строке.
Ветви
Это важная концепция, и у Git нет аналогов в bzr.
В Bazaar у нас раньше был один общий репозиторий, внутри которого было много ветвей. Похоже, это невозможно с Git?
В Git каждый репозиторий имеет только одну ветвь, которая в данный момент выбрана.
git branch
Список существующих ветвей
Чтобы увидеть, какие ветви существуют локально и удаленно:
git branch --all
Переход для работы на определённой ветви
git checkout branch-name
Обратите внимание, что если вывод из git branch --all — remotes/origin/XXX, вы должны использовать XXX в качестве имени ветви.
Создание локальной копии ветви (как bzr clone)
branch clone old_directory new_directory cd new_directory git remote set-url origin git@github.com:MariaDB/server.git git pull
Удаление последнего коммита из ветви
git reset --hard HEAD^
Получение ветви, над которой кто-то выполнил ребейс
Если при выполнении pull вы получаете следующую ошибку:
shell> git pull X11 forwarding request failed on channel 0 fatal: Not possible to fast-forward, aborting.
Вместо удаления вашей копии и последующего клонирования, вы можете сделать:
git reset --hard origin/##branch-name##
Другие особенности ветвей
- Примечание: ветви, имена которых начинаются с
bb-, автоматически помещаются в buildbot.
Аналоги некоторых команд bzr
ПРЕДУПРЕЖДЕНИЕ. Проверьте руководство перед выполнением!
-
bzr status— этоgit status -
bzr diff— этоgit diff -
bzr log— этоgit log -
bzr revert— этоgit reset --hard -
bzr revert filename— этоgit checkout filename -
bzr parent— этоgit remote -v(но есть более подробные команды) -
bzr parent to-default-mariadb-repogit remote set-url origin git@github.com:MariaDB/server.git -
bzr push— этоgit push REMOTENAME BRANCHNAME. REMOTENAME обычно "origin", например:git push origin HEAD:10.3-new-feature. HEAD: означает "из текущей ветви". -
bzr clean-tree --ignored— этоgit clean -Xdf(обратите внимание на заглавную X!) -
bzr root— этоgit rev-parse --show-toplevel -
bzr missing --mine-only— этоgit cherry -v origin(отчасти).
Графические интерфейсы
-
bzr gcommit— этоgit citool -
bzr viz— этоgitk -
bzr gannotate— этоgit gui blame
Электронная почта к коммитам
В проекте MariaDB рекомендуется (и существует давняя традиция с MySQL AB) отправлять все ваши коммиты в рассылку commits@mariadb.org. Это позволяет другим следить за прогрессом, оставлять комментарии и т. д.
Скрипт и инструкции по настройке триггеров коммитов в Git находятся здесь: http://bazaar.launchpad.net/~maria-captains/mariadb-tools/trunk/files/head:/git_template/ . Задача Jira по триггеру коммита — MDEV-6278.
Присвоение кода другому человеку
Если вы добавляете код от имени другого человека, пожалуйста, укажите автора исходного кода:
- Запустите
git citoolи перенесите изменённые файлы в подготовленные. - Не
commit, а прервите операцию. - Запустите
git commit --author="Original author name <email_address>"
Это необходимо, так как git citool не может обработать опцию --author.
Применение запроса на добавление
В конце страницы запроса на добавление есть кнопка "Объединить запрос на добавление", а рядом ссылка "инструкции командной строки". Нажмите на ссылку, вы увидите что-то вроде
Шаг 1: В вашем репозитории проекта создайте новую ветвь и протестируйте изменения.
git checkout -b mariadb-server-joeuser-cool-feature 10.3 git pull https://github.com/joeuser/mariadb-server cool-feature
Шаг 2: Объедините изменения и обновите их на GitHub.
git checkout 10.3 git merge --no-ff mariadb-server-joeuser-cool-feature git push origin 10.3
Обратите внимание, откуда выполнять pull — https://github.com/joeuser/mariadb-server cool-feature.
Теперь переключитесь на ветвь, в которую хотите её объединить, например, bb-10.3-stage, и выполните следующие действия
git fetch https://github.com/joeuser/mariadb-server cool-feature
git checkout FETCH_HEAD
git rebase @{-1}
Сейчас самое время скомпилировать код, протестировать его, исправить, если необходимо. Затем
git checkout @{-1}
git ff @{-1}
Если вы хотите внести небольшие изменения в запрос на добавление, сделайте это в отдельном коммите после git rebase @{-1} выше. Если вы хотите внести большие изменения в запрос на добавление, возможно, вам не следует его объединять в первую очередь, а попросить участника исправить его?
Примеры
Разница для последнего коммита
git show
Применение нового кода из основного дерева в ветвь
Вы работаете над ветвью (NEW_FEATURE) и хотите получить в неё все изменения из основной ветви (10.1).
git checkout 10.1 git pull git checkout NEW_FEATURE git rebase 10.1
Применение исправления ошибки в основной ветви
Вы только что исправили и закоммитили ошибку в основной ветви 10.1 и хотите объединить её с последней версией 10.1. Часто в этом случае лучше использовать ребейс. Предполагая, что ваша текущая ветвь — 10.1:
git fetch origin git rebase origin/10.1
Это будет работать даже если вы сделали несколько коммитов в вашем локальном дереве 10.1.
Обработка конфликтов при попытке отправки
Что делать, когда вы исправили ошибку в главном дереве, но заметили, что кто-то изменил дерево с момента последнего pull. Этот подход гарантирует, что ваше исправление выполняется одним блоком, а не растягивается на несколько наборов изменений.
git clone 10.1 cd 10.1 < fix a bug here> git citool git push # ^ and the above fails, because someone has pushed to 10.1 in between git branch tmp # ^ copy our work to branch named 'tmp' get checkout 10.1 git reset --hard HEAD^ # ^ remove our work from '10.1' local branch' git pull # ^ get changes from remote git checkout tmp git rebase 10.1 # ^ switch to 'tmp' and try to rebase 'tmp' branch on top of 10.1 branch. # here you will be asked to merge if necessary git checkout 10.1 git pull --ff . tmp # ^ switch back to the '10.1' branch, and pull from 'tmp' branch. git branch -D tmp #^ this removes the tmp. branch git push
Поиск, в какой версии MariaDB существует коммит
sh> git tag --contain e65f667bb60244610512efd7491fc77eccceb9db mariadb-10.0.30 mariadb-10.1.22 mariadb-10.1.23 mariadb-10.2.5 mariadb-10.3.0 mariadb-galera-10.0.30
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/using-git/