===== Работа с репозиториями для разработчика =====
:!: ВНИМАНИЕ! Если вы хотите просто получить исходный код Limb и не планируете вносить какие-то изменения, то [[limb3:ru:how_to_download| все проще]].
Все репозитории, относящиеся к Limb, располагаются на сервисе GitHub - http://github.com/limb-php-framework/
==== Ветки и тэги репозиториев ====
Ветками обозначаются версии фреймворка:
* **2010.1** - версия 2010.1
* **master** - изменения, которые не приняты в версию, разрабатываемую в данный момент
* **merging** - ветка для слияния коммитов, которые конфликтуют друг с другом
* **2010.2_php53compatibility** - ветка под конкретную функциональность, которая постепенно сливается с веткой версии(в данном случае 2010.2)
Тэги обозначают статусы:
* 2010.2**alpha** - alpha-версия, "грубая" реализация всех изменений, запланированных в RoadMap, добавляются новые функции
* 2010.2**beta** - beta-версия, "чистка" кода, дописывание тестов и документации, внутреннее тестирование, принимаются только мелкие функции
* 2010.2**RC** - release-candidate, публичное тестирование, функции не добавляются, дописывается документация, исправляются ошибки
* 2010.2**stable** - полная заморозка кода
==== Типичный workflow для разработчика ====
Допустим изменение, которое мы хотим провести, это удаление файлов с расширением .orig.
=== 1. Fork репозитория ===
Переходим на страницу репозитория, и жмем кнопку "fork". С этого момента у нас есть своя собственная копия репозитория.
=== 2. Получаем и настраиваем наш репозиторий ===
== Клонирование ==
Вы можете загрузить код в локальный репозиторий, используя Git, [[http://hg-git.github.com/| Mercurial]] или [[http://github.com/blog/644-subversion-write-support| SVN]], по вашему выбору. Я буду показывать на примере консольного Git.
$ git clone git@github.com:korchasa/limb.git my-limb
Initialized empty Git repository in /www/my-limb/.git/
remote: Counting objects: 38777, done.
remote: Compressing objects: 100% (35696/35696), done.
remote: Total 38777 (delta 1025), reused 38777 (delta 1025)
Receiving objects: 100% (38777/38777), 25.83 MiB | 515 KiB/s, done.
Resolving deltas: 100% (1025/1025), done.
$ cd my-limb/
$ git branch
* master
== Создание локальной ветки ==
Мы выбрали из репозитория код. Но пока только ветку мастер. А нам хочется посмотреть и поправить текущую версию 2010.1. Нам необходимо создать локальную ветку, и привязать ее к удаленной:
$ git checkout --track -b remove_origs origin/2010.1
Branch remove_origs set up to track remote branch 2010.1 from origin.
Switched to a new branch 'remove_origs'
$ git branch
* remove_origs
master
В данном случае мы связали локальную ветку 'remove_origs' с веткой '2010.1' из репозитория origin(место, откуда мы сделали clone).
=== 3. Делаем необходимые нам правки ===
Теперь вносим необходимые изменения.
$ find | grep "\.orig" | xargs git rm
$ git commit
$ git push origin 2010.1
Counting objects: 55, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (27/27), done.
Writing objects: 100% (28/28), 2.46 KiB, done.
Total 28 (delta 22), reused 4 (delta 1)
To git@github.com:korchasa/limb.git
707e561..2420fdc 2010.1 -> 2010.1
=== 4. Запрос на внесение изменений ===
Переходим на сайт GitHub, жмем "Pull Request" и оформляем запрос. После этого кто-нибудь из коммитеров сольет ваши изменения.
=== 5. Получение изменений из основного репозитория проекта ===
Но ведь остальные разработчики не спят! И нам необходимо как-то получать их изменения.
Для этого добавим наш основной удаленный репозиторий(назовем его upstream):
$ git remote add upstream git://github.com/limb-php-framework/limb.git
$ git remote
origin
upstream
Теперь подтянем изменения из ветки master основного репозитория в нашу ветку remove_origs:
$ git checkout remove_origs
$ git pull origin upstream
$ git push
=== 6. Удаление локальной ветки ===
Ветка remove_origs нам более не нужна, поэтому удаляем ее:
$ git branch -d remove_origs
Deleted branch remove_origs (was 742bdfd).
Отличное описание workflow для работы с GitHub'ом - [[http://www.apreche.net/github-suggested-workflow/| GitHub Suggested Workflow]].
===== Этикет =====
* все коммиты **обязательно надо** сопровождать вразумительными комментариями о том, что было сделано, на **английском языке** (по возможности грамотном)
* не стоит совмещать в одном коммите несвязанные друг с другом изменения