Как преобразовать svn-репозиторий с недопустимыми именами веток в git с помощью git-svn? - PullRequest
0 голосов
/ 18 июня 2011

Я пытаюсь загрузить репозиторий svn компании в git, используя git-svn, но, к сожалению, один из моих коллег создал ветку с недопустимыми символами (\) в имени ветки.Теперь, когда я пытаюсь импортировать всю историю, git завершается с ошибкой:

fatal: Cannot lock the ref 'refs/remotes/feature-\\-bar'.
update-ref -m r4 refs/remotes/feature-\\-bar 471d9622546803b3712a436c2e2ed6b1490c829a: command returned error: 128

Я мог бы обойтись без ветки, так как это в любом случае в прошлом, но я не хочу терятьвся история до того момента, когда ветка слилась.Я попробовал параметр --ignore-path, но я не могу заставить его работать, в основном потому, что я подозреваю, что он обращается только к путям внутри пути ответвления / магистрали (??).Кто-нибудь знает случайно способ решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 15 января 2013

Мне также пришлось игнорировать некоторые ветви, потому что они использовали недопустимые символы, которые я не мог получить с помощью git svn (в моем случае это были : и /).

Решение 1: вручную добавить дополнительные svn-репозитории для каждой ветви

После инициализации вашего репозитория с помощью git svn init -s [svn-repository-url] Я прокомментировал конфигурацию ветви в .git/config out:

[svn-remote "svn"]
    url = [svn-base-url]
    fetch = [project-name]/trunk:refs/remotes/trunk
    #branches = [project-name]/branches/*:refs/remotes/*
    tags = [project-name]/tags/*:refs/remotes/tags/*

Чтобы добавить ветки позже, я сделаю это, добавив новые местоположения SVN для каждой ветки, например,

[svn-remote "svn-your-branch"]
    url = [svn-base-url]
    fetch = [project-name]/branches/your-branch:refs/remotes/your-branch

Источник: Как работает Git SVN ignore-paths (игнорируя теги ежедневной сборки)? или с какой-либо фактической конфигурацией, например http://www.dmo.ca/blog/20070608113513/

Решение 2: Явно укажите ветви, которые вам нравятся в вашей конфигурации

Вы можете определить ветви для выборки в .git/config:

[svn-remote "svn"]
    url = [svn-base-url]
    fetch = [project-name]/trunk:refs/remotes/trunk
    branches = [project-name]/branches/{your-branch-1|your-branch-2}:refs/remotes/*
    tags = [project-name]/tags/*:refs/remotes/tags/*

Если после извлечения всего из svn можно добавить ветки позже, я предпочту это решение.

Источник: https://stackoverflow.com/a/3844508/709431

Почему не работают пути игнорирования?

Согласно http://go -dvcs.atlassian.com / display / aod / Advanced + git-svn + options git svn --ignore-paths только игнорирует содержимое коммитов.Таким образом, он все равно создаст ссылку для имени ветви.Это не удастся, если имя ветви содержит недопустимые символы.(Кроме того, вопреки вашему предположению, ignore-paths соответствует всему, кроме URL-части, например, с конфигурацией, указанной выше, например project-name/branches/your-branch-1.)

0 голосов
/ 19 июня 2011

Я бы запустил git-репо во главе любой текущей ветки - вручную сделав названия веток git-friendly. Для более старой истории импортируйте этот путь при необходимости. Иногда это просто не стоит мучиться с импортом истории SVN, которая использует совершенно другой механизм.

...