Не удается настроить Git с хранилищем Subversion с помощью git svn - PullRequest
0 голосов
/ 27 мая 2011

Я пытаюсь использовать Git с Subversion через git svn с хранилищем Subversion, в котором есть несколько проектов. Структура проекта выглядит следующим образом:

Root /

* Project1 /

багажник /

Теги /

SpecificBranchName1 /

SpecificBranchName2 /

Проект2 /

багажник /

/ теги

SpecificBranchName1 /

и т.д.

Я могу получить Project1 в git-репо, выполнив git svn clone -s <a href="http://path/to/repo/Root/Project1" rel="nofollow">http://path/to/repo/Root/Project1</a> --no-follow-parent. Однако trunk , теги и SpecificBranchName1 и SpecificBranchName2 находятся в моей древовидной структуре.

Если я удаляю флаг - no-follow-parent , я получаю сообщение об ошибке: «Не удалось найти карту ревма для http://path/to/repo/Root/Project1/SpecificBranchName1". Я получаю то же сообщение если я попытаюсь: git svn clone -T trunk -t tags -b . <a href="http://path/to/repo/Root/Project1" rel="nofollow">http://path/to/repo/Root/Project1</a>

Мне не нужна ветка в моем git-репо, поэтому я попытался пропустить ее с помощью: git svn clone -s --ignore-paths="^SpecificBranchName1" <a href="http://path/to/repo/Root/Project1" rel="nofollow">http://path/to/repo/Root/Project1</a>, но получил ту же ошибку.

Из того, что я могу сказать, эта структура файла Subversion странная. Обычно ветки находятся в . / Branch , но по какой-то причине они включены в тот же путь к файлу, что и tags и trunk . Есть ли способ пройти через это?

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Если вам не нужны ветки, попробуйте:

git svn clone http://path/to/repo/Root/Project1 --trunk=trunk --tags=tags Project1

То есть почти то же самое, что и вторая команда, которую вы используете, но без части -b. git svn не будет пытаться искать ветки, если это не запрошено.

После этого вы можете попробовать отредактировать .git/config, как предлагает manojlds.

РЕДАКТИРОВАТЬ : хорошо, я запускаю дополнительные тесты. Я воссоздал SVN-репозиторий с вашей структурой папок. Я попытался использовать git svn, и все прошло гладко. Я использую git 1.7.1.

Затем я искал строку «не удалось найти ревмапы» в Поиск кода Google и нашел это:

sub lookup_svn_merge {
        ...
        my $gs = Git::SVN->find_by_url($url.$source, $url, $path);
        if ( !$gs ) {
                warn "Couldn't find revmap for $url$source\n";
                return;
        }
        ...

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

Я пытался воспроизвести этот случай, но все прошло успешно. Возможные решения:

  • обновить версию Git, если она не самая последняя
  • выяснить, действительно ли происходит слияние с SpecificBranchName1 в транке, и если да, то использовать только ревизии после этой для инициализации вашего репозитория Git

Надеюсь, это поможет ...

1 голос
/ 27 мая 2011

Ваша структура ни в коем случае не является стандартной структурой (конечно, вы сами это тоже сказали), так почему вы используете флаг -s?

Я бы посоветовал вам создать папку веток в svn и переместить перемещающиеся в нее ветки. Это предотвратит много боли в будущем.

Если вы не можете этого сделать по разным причинам, вы можете сделать git int для корня проекта1, отредактировать .git / config и изменить часть веток в svn-remote:

branches = {SpecificBranchName1,SpecificBranchName2}:refs/remotes/branches/*

(отрегулируйте вышеизложенное в зависимости от относительного URL)

, а затем сделать выборку.

...