Невозможно настроить Git с репозиторием Subversion с помощью git svn

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

Корень/

* Project1 /

багажник/

теги /

SpecificBranchName1 /

SpecificBranchName2 /

Проект2 /

багажник/

теги /

SpecificBranchName1 /

и Т. Д.

Я могу поместить Project1 в репозиторий git, выполнив git svn clone -s http://path/to/repo/Root/Project1 --no-follow-parent. Однако ствол, теги и SpecificBranchName1 и SpecificBranchName2 находятся в моей древовидной структуре.

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

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

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


person Michael Brennan    schedule 27.05.2011    source источник


Ответы (2)


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

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

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

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

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

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

person manojlds    schedule 27.05.2011
comment
Я хотел бы изменить структуру, но опять же, если бы я мог это сделать, я бы, вероятно, просто преобразовал все репо в git и покончил с svn :) - person Michael Brennan; 27.05.2011
comment
Я попытался отредактировать файл конфигурации git, как вы упомянули выше, но я все еще получаю Не удалось найти revmap для путь / к / Root / Project1 / SpecificBranchName1: P - person Michael Brennan; 27.05.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 нашел точку слияния в стволе, и слияние происходит по пути, о котором Git ничего не знает и который по какой-то причине он не может достичь.

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

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

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

person UncleZeiv    schedule 27.05.2011
comment
Когда я попробовал: git svn clone --tags tags --trunk trunk http://path/to/repo/Root/Project1 Я получаю ту же ошибку: P (Не удалось найти карту обновлений для путь / к / проекту / Root / Project1 / SpecificBranchName1) - person Michael Brennan; 27.05.2011