Участник:Andrey Kruglov/Основы работы с исходным кодом OpenCorpora через git: различия между версиями
мНет описания правки |
м (→Ссылки) |
||
Строка 117: | Строка 117: | ||
</pre> | </pre> | ||
== Ссылки == | |||
* http://dev.iu7.bmstu.ru/trac/corporate_docs/wiki/Git | * http://dev.iu7.bmstu.ru/trac/corporate_docs/wiki/Git |
Текущая версия от 13:47, 18 апреля 2015
Это мои черновые записки по повод того, как надо работать с исходниками проекта на github'е.
Лично мне это нужно было потому что я работал с разными системами версионного контроля, но навыки работы с гит - практически нулевые (что-то слышал, сам не сталкивался).
Перенёс на локальную вики со своих записных листочков на случай если кому понадобится.
В качестве небольшого введения
Ранее (до весны 2014 года) разработка велась на базе code.google, сейчас ведётся на базе гитхаб.
Часть разработчиков работает по модели «общего репозитория» (имеет доступ на запись в репозиторий OpenCorpora/opencorpora) -- в основном те, кто уже давно в проекте.
Себе я выбрал модель «Fork + Pull» (в принципе, можно делать и pull request без fork), форкнув OpenCorpora/opencorpora -> akmetainfo/opencorpora, очень удобно:
Модель «Fork + Pull» позволяет любому склонировать (fork) существующий репозиторий и сливать изменения в свой личный fork без необходимости иметь доступ к оригинальному репозиторию. Затем, изменения должны быть включены в исходный репозиторий его хозяином. Эта модель уменьшает количество телодвижений для новых contributors и популярна для open source проектов, так как позволяет людям работать независимо, без единого координирования.
Собственно, всё что ниже -- набор типовых сценариев по этой выбранной модели.
Первоначальная настройка
Выполняем (разово!) настройку:
git config --global user.name "akmetainfo" git config --global user.email "myEmailAddress" cd /var/www/html git clone https://github.com/akmetainfo/opencorpora.git . git remote add upstream https://github.com/OpenCorpora/opencorpora.git git fetch upstream git remote set-url origin https://[email protected]/akmetainfo/opencorpora.git
Что получилось в итоге? У нас есть upstream (репозиторий OpenCorpora/opencorpora, из которого мы можем забирать себе текущие исходники) и origin (репозиторий akmetainfo/opencorpora, в котором можно работать и периодически делать pull request в upstream). По-моему, очень красиво и удобно, хоть и несколько непривычно после TFS.
Типовая работа над фичей
Создали новую ветку и переключились на неё:
git checkout -b FirefoxSearchSherlockPlugin
Поработали, добавляем новые файлы:
git add ./dict_search.php git add ./templates/static/dict_search.tpl git add ./dict-quicksearch.src
Делаем коммит:
git commit -m "Firefox quicksearch via Sherlock"
Отправляем коммит на гитхаб в origin:
git push origin FirefoxSearchSherlockPlugin
Забрать себе изменения из OpenCorpora/opencorpora
Забирает изменения из upstream (OpenCorpora/opencorpora) ветку master (а там других и нет обычно) и merge'ит с тем, что есть локально:
git pull upstream master
Самые полезные команды git
Список всех текущих веток:
git branch
Текущий статус:
git status
Переключение между ветками:
git checkout master git checkout YaMetrikaSettings
Откат файла в исходное состояние:
git checkout ./migrations/initial_schema.sql
Rebase
См. тут очень толковое описание: http://tonyganch.com/git/rebase/
git rebase -i HEAD~3 pick 3a6d8dc Selective backup f af97205 Unused sql-settings for selective backup removed f d25fc23 Selective backup migrations and scripts
И, если что-то мимо - то помнить, что можно откатить последний push --force следующим образом: http://tonyganch.com/git/reset/
git reset --hard a1a1a1 git push -f origin SqlSelectiveBackup