Spec-Zone.ru › MariaDB

Использование 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-repo git 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

См. также

  • http://agateau.com/talks/2010/git-for-bzr-users_uds-natty/git-for-bzr-users.pdf
  • Презентация Сергея "Использование GIT". Встреча в Малаге, январь 2015 года
Содержимое, воспроизводимое на этом сайте, является собственностью соответствующих владельцев, и это содержание не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API