Git и Subversion могут жить вместе

Tags: •  •  •  • 

Предположим, что у вас есть централизованный сервер с svn репозиторием, но вы хотите использовать git локально, делать commit'ы, ветки и другие прелести децентрализованной системы контроля версий. С помощью git-svn это довольно просто.

Если вы еще не сделали svn checkout:

1. Узнаем какой была последняя ревизия в svn (предположим это REVISION)
2. cd project && git-svn init http://svn.example.com
3. git-svn fetch -rREVISION (наша запомненная ревизия)

Если уже есть checkout версия:

1. cd project && git-svn clone --tags=<путь к tags> –-trunk=<путь к trunk> –-branches=<путь к branches> https://svn.example.com

Если у вас стандартное расположение trunk, branches, tags, можно заменить одной опцией --stdlayout.

В процессе инициализации или клонирования можно передать другие полезные опции, например, -username=<имя пользователя>, если необходимо.

Переключиться на ветку (напр. branches/stable) можно следующим образом:
git checkout stable

Стандартная цепочка действий:

1. git-svn rebase (синхронизируемся)
2. ... (git магия и т.п.)
3. git-svn dcommit (отправляем все на svn сервер)

Может сложиться ситуация когда вам нужно синхронизироваться с svn репозитория, но локально в git версии вы сделали изменения, которые еще не готовы отправить на сервер. Если сейчас обновиться - все это пропадет. Для обхода этой ситуации воспользуемся следующей последовательностью магических действий:

1. git-stash (временно изымаем git изменения)
2. git-svn rebase (синхронизируемся с svn сервером)
3. git-stash apply (возвращаем обратно git изменения)
4. git-stash clear (очищаем stash)

Компилятивный материал из источников:

man git-svn (секция EXAMPLES есть ;)
http://www.flavio.castelli.name/howto_use_git_with_svn
http://garuma.wordpress.com/2008/04/26/mini-howto-git-svn-with-google-code-svn-repositories/

> Если у вас

> Если у вас стандартное расположение trunk, branches, tags
а вот всегда хотел выяснить, если в одном репозитории несколько проектов, то "стандартное расположение trunk, branches" это когда все проекты располагаются так:

trunk/project1
trunk/project2
braches/stable-1-1/project1
braches/stable-1-1/project2

или так

project1/trunk
project2/trunk
project1/braches/stable-1-1
project2/braches/stable-1-1

если проекты связаны между собой, то первый вариант удобнее бранчевать и теги ставить.
но смутные сомнения все равно терзают Ж:-)
видел проекты и так и так делают

--
Signature invent in progress 24% ##........

С точки зрения

С точки зрения git-svn стандартное расположение svn это один проект:

project/
trunk/
branches/
tags/

В git нет такого понятия как репозиторий, там ведь все в самом проекте и находится, в одной папочке ;-) А в git-svn сильно хитрых слияний советуют не делать, Subversion может не разобраться :)

гыгы.. так и

гыгы.. так и представил себе svn который получил пачсет и подумал "не пойняв.." Ж:-)

ну думаю влюбом случае можно все слить в один большой диф так что бы svn понял.

в любом случае снкс за нифу, полезный типс

--
Signature invent in progress 24% ##........