Как синхронизировать GIT-репозиторий с SVN? - PullRequest
2 голосов
/ 08 января 2011

Я планирую сделать форк проекта с открытым исходным кодом, но я хочу перейти на GIT. В проекте используется SVN, но нет доступного TRAC, поэтому я не могу просто загрузить наборы изменений, не имея SVN на моем ПК (не говоря уже о том, что svn diff не допускает двоичные исправления)

Есть ли способ синхронизировать мой главный репозиторий GIT с заголовком / транком SVN без сохранения другого проекта на моем жестком диске?

Ответы [ 2 ]

4 голосов
/ 08 января 2011

Вы можете синхронизировать SVN с Git, используя git-svn (1) .

Если у вас уже есть Git-репозиторий и вы хотите связать его с другим SVN-репозиторием, вы можете попробовать что-то вродео voodoo, см. http://blog.experimentalworks.net/2009/07/git-voodoo/.

В блоге показано, как преобразовать существующий Git-репозиторий, не относящийся к git-svn, в Git-репозиторий с поддержкой git-svn с помощью нового удаленного репозитория SVN.Вы можете немного изменить рабочий процесс voodoo, чтобы импортировать существующий SVN-репозиторий в свой Git-репозиторий:

  1. Импортировать ствол как параллельную ветвь в существующий Git-репозиторий

    cd GIT-REPO
    git svn clone --stdlayout SVN-URL .
    
  2. Настройка трансплантата:

    TRUNK_HEAD=`git rev-parse trunk`
    MASTER_INIT=`git rev-list --reverse master | head -1`
    echo $MASTER_INIT $TRUNK_HEAD >.git/info/grafts
    
  3. Узнайте диапазон в основной ветви, который будет добавлен к транку, например, только изменения начинаются с тега v2.0 будет добавлено к стволу.

  4. Перебазировать ствол

    git checkout master
    git rebase --onto trunk v2.0 master
    
  5. Передать к стволу

    git svn dcommit
    

Подсказка по использованию: используя трансплантаты с git-svn, вы должны убедиться, что вы не dcommit пустых коммитов.В противном случае dcommit потерпит неудачу.Чтобы отфильтровать пустые коммиты, попробуйте

git filter-branch --prune-empty

до первого раза dcommit.

1 голос
/ 12 мая 2012

Если у вас есть доступ к вашему репозиторию SVN, вы можете установить в него SubGit .Просто запустите

$ subgit install path/to/your/svn/repostiory

Вся синхронизация будет выполнена автоматически (запускается через ловушки SVN и Git).В этом случае не только master / trunk, но и все ветви будут синхронизированы (хотя вы можете настроить его поведение).

Отказ от ответственности : я один из разработчиков этого продукта.

...