2013-09-09 3 views
5

Я пытаюсь клонировать svn repo в git, но некоторые из ветвей находятся в корневом каталоге svn, как показано ниже.Как клонировать нестандартный svn repo для git?

Я попытался

$ git clone svn://url/svn-root -T trunk -b branches -b branch1 -b branch2 

и

$ git clone svn://url/svn-root -T trunk -b branches -b . 

Оба не удалось клонировать branch1 и branch2 правильно. Пожалуйста помоги.

svn-root 
├── branch1 
├── branch2 
├── branches 
│   ├── branch3 
│   └── branch4 
└── trunk 

ответ

6

Один интересный инструмент, упомянутый в GitMinutes Episode 20, является SubGit, плагин для Atalssian Stash (который не является бесплатным, но вы можете попробовать его бесплатно).
Вы можете узнать гораздо больше о SubGit в «GitMinutes #22: Alexander Kitaev about SubGit».

Он предназначен для управления нетрадиционной структурой репозитория svn.

http://subgit.com/img/stash/105_repository_layout.png

Dmitry Pavlenkocomments:

вы должны ввести в поле "Отрасль":

*:refs/heads/*;branches/*:refs/heads/branches/* 
# instead of 
branches/* 

В этом случае branch1 будет переведен на refs/heads/branch1,
branch3 --- до refs/heads/branches/branch3.

С другой стороны, если у вас есть ограниченное количество ветвей верхнего уровня, вы можете перечислить их в явном виде:

branch1:refs/heads/branch1; 
branch2:refs/heads/branch2; 
branches/*:refs/heads/bra‌​nches/* 
+0

Я добавлю, что для вашего случая вы должны ввести '*: refs/heads/*; branch/*: refs/heads/branches/*' вместо 'branch/*' в поле «Филиалы». В этом случае 'branch1' будет переведен на' refs/heads/branch1', 'branch3' --- на' refs/heads/branches/branch3'. В качестве альтернативы, если у вас ограниченное количество ветвей верхнего уровня, вы можете явно их перечислять: 'branch1: refs/heads/branch1; branch2: refs/heads/branch2; branch/*: refs/heads/branches/*' –

+0

@ Дмитрий Павленко Хороший момент. Я включил ваш комментарий в ответ для большей наглядности. – VonC

+0

Могу ли я получить локальный репозиторий git для получения обновлений непосредственно из исходного svn-репо при таком подходе, или мне нужно сохранить Atalssian в качестве станции передачи? – kangshiyin

0

Два варианта приходит на ум:

  • очистить ваш SVN репо первым (Переместить ветви ниже/ветвь, где они должны быть в соответствии со стандартной раскладкой).
  • Оформить заказ, используя стандартную компоновку, позже добавить ссылки удаленной ветви.
+0

Это не мой SVN репо. Поэтому я не могу использовать метод 1. Можете ли вы предоставить более подробную информацию о методе 2, особенно на этапе «добавление удаленных ответных ссылок». Я кратко прочитал «git help svn», но не нашел решения. – kangshiyin