Показаны сообщения с ярлыком Git. Показать все сообщения
Показаны сообщения с ярлыком Git. Показать все сообщения

суббота, 16 марта 2013 г.

SVN: Как мерджить из одной ветки в другую

Subversion была моей основной CVS более трёх лет. С Git я познакомился всего год назад. Не скажу что мой мир сильно изменился, но он мне показался более удобным. По-этому свои личные проекты я храню только в Git, а две недели назад даже купил Micro Plan на GitHub.

На работе же всё зависит от проекта: некоторые используют Git, остальные постепенно мигрируют с SVN на Git. Я сейчас работаю в команде, которая относится ко второму типу. По-этому я хочу рассказать о своем опыте мерджа из одной ветки в другую.

Нам понадобится Svnmerge.py и две ветки (например, http://svn.local/dev и http://svn.local/qa). Вторая ветка это копия первой, она была создана с помощью 'svn cp' и закомичена ревизией 12830.

Теперь предположим что у нас есть задача, реализацию которой мы запилили в dev-ветку. Список ревизий: 12834, 12839, 12845. Теперь нами стоит задача мерджа этих ревизий в qa-ветку.

1. Создаем папку и выполняем туда чекаут qa-ветки:
mkdir qa 
svn co http://svn.local/qa qa

2. После окончания чекаута нужно положить svnmerge.py в папку qa и сделать его исполняемым.
3. Заходим в папку qa и инициализируем dev-ветку. Эту единоразовая операция, ее не придется повторять в будущем:
svnmerge.py init -r1-12830 http://svn.local/dev
svn ci -F svnmerge-commit-message.txt

12830 это ревизия, в которой была создана qa-ветка. Мы записали в свойства бранча информацию о том, что в нем находится код dev-ветки с 1й по 12830й ревизии. Теперь у нас не получится повторно вмерджить эти ревизии.

4. Собираем необходимые ревизии и проверяем их наличие в dev/qa ветках:
svnmerge.py avail -r12834,12839,12845 -Shttp://svn.local/dev

Если это ревизии dev-верки и они не были ранее вмерджены в qa-ветку, то мы получим список доступных ревизий:
12834,12839,12845

Если какая-то из ревизий отсутствует в списке, на это может быть 2 причины:
  • Это не ревизия dev-ветки;
  • Это ревизия dev-ветки, но она уже была вмерджена в qa-ветку.

5. Мы предполагаем что у нас все хорошо и выполняем команду для мерджа:
svnmerge.py merge -r12834,12839,12845 -Shttp://svn.local/dev # мердж
svn st # проверяем изменения
svn ci -F svnmerge-commit-message.txt # комитим результат

Как видите все не так просто как в Git, но и сложного ничего нет :)

Читать далее

воскресенье, 19 февраля 2012 г.

Полезные команды Git

Я начал использовать git совсем недавно и не могу назвать себя git экспертом. Но каждый день я сталкиваюсь с ситуациями и командами, описание которых, думаю, будет полезным для вас. Описание даю на английском, так как это будет понятнее.

Create and Checkout a New Branch
#branches from currently checked out directory
git checkout -b 

Checkout a Remote Branch
git checkout -b  origin/

Abort Changes of a File
git checkout -- 

Modify the Previous Commit’s Message
git commit --amend

Partial Change Checkin
git add --edit

Undo the Previous Commit
git revert HEAD^

Temporarily Stash Changes, Restore Later
# After changes have been made...
git stash

# Do some other stuff here, like switch branches, merge other changes, etc.

#Re-apply the changes
git stash pop

Delete a Remote Branch
git push origin :

Pull in the Latest from a Shared Repository
# Add a remote branch
git remote add  
 # For example:  git remote add lightfaceOfficial git://github.com/darkwing/LightFace.git

# Get changes from that branch
git fetch 

Tagging, Deleting, and Pushing Tags
# Create a Tag
git tag 

# Delete the tag
git tag -d 

# Push Tags
git push --tags

Who F’d it All Up?
git blame 

Читать далее

пятница, 3 февраля 2012 г.

github

На работе постепенно переводят проекты с SVN на Git. Причины разные, но основная причина в количестве людей и способе взаимодействия между нами (читай, проектами).

Лично я работаю с новой VCS уже 3ю неделю и переход мне напоминал стандартный порядок понимания новой технологии:
1. Че это такое? Уберите! Дайте мне сделать комит в SVN? Pull, push, stash? Что это такое? Мама, я хочу к тебе.
2. А чо если сделать тааак... А вот так? Ой.
3. Начинает нравиться (как и все, что ты понимаешь).

Радует, что все сотрудники понимали, что поймут полезность сего инструмента и в будущем мучения окупятся. Я считаю что работник, который знает SVN + Git это более ценный и универсальный член команды.

Теперь мне наконец-то пригодился мой аккаунт на github - https://github.com/sidorenko. Буду выкладывать в него свои сорцы модулей для Magento, которые я по чуть-чуть делаю в свободное время. Ну и еще что-то.
Читать далее

вторник, 31 января 2012 г.

Git: подключаем новый удаленный репозиторий

Сегодня будем учиться подключать удаленный репозиторий к уже существующему. Для чего это нужно? Есть много вариантов. Например, мне это понадобилось для выполнения git cherry-pick из бранча одного репо в бранч другого. Итак, предположим, что вы сделали git clone и у вас есть 'origin' remote репозиторий. Если все так, то команда git remote покажет на экран следующую информацию:
$ git remote
origin

Сошлось? Прекрасно. Далее добавляем новый репозиторий с именем new_repo:
$ git remote add new_repo http://git.site.com/project/new_repo

Проверяем, что он добавился:
$ git remote
origin
new_repo

Получаем изменения из новой ветки:
$ git fetch new_repo

Удаленный репозиторий подключен. Список бранчей можно просмотреть с помощью команды:
$ git branch -r

Читать далее

понедельник, 30 января 2012 г.

PhpStorm: работа с разными CVS (SVN + Git) в одном проекте

На прошлой неделе возникла необходимость работы с SVN и Git на одном проекте. По-умолчанию, PhpStorm работает только с одной CVS. Например, если вы сделали git clone, а потом внутри проекта создали папку tests и сделали туда svn checkout, то IDE будет видеть только Git. То есть, выполнить какие-либо действия (up, commit, etc.) в папке с тестами будет невозможно. Но это можно легко исправить.

1. Открываем настройки:

2. Заходим в Project Settings -> Version Control. Если у вас проект на Git, то картинка будет примерно следующей:

3. Нажимаем Add и добавляем папочку tests:

После этого в списке меню Project Settings -> Version Control появится наша новая запись:

4. Сохраняем настройки. Теперь можно выполнять SVN-команды над папкой tests прямо из IDE.
Читать далее