Как правильно инициализировать клон git-svn репозитория с нестандартной компоновкой? - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь работать с помощью git с svn-репозиторием, который имеет следующую грубую компоновку:

RepositoryHone

  • -> Документы
  • -> Дополнительные документы
  • -> детская площадка
  • -> plays_dev
  • -> plays_balance_change
  • -> Инструменты

, где детская площадка содержит основную ветвь разработки (ствол), а plays_dev, plays_balance_change и другие, которые не показаны, являются ветвями.

В ветвях раскладка выглядит так:

  • -> build
  • -> lib
  • -> корзина
  • -> src

В основном я хотел работать с детской площадкой и plays_dev, поэтому я запустил:

git svn init svn :: / server.address: port / RepositoryHome -T детская площадка -b детская площадка_дев

git svn fetch

Однако, когда я запустил git branch -r, чтобы проверить, как были импортированы ветви, я с растущим ужасом обнаружил, что помимо «origin / trunk» были «ветви» вроде «origin / bin», «origin / lib "," origin / src "и т. д.

Как я могу обеспечить правильное отображение веток между локальным рабочим репозиторием / git и сервером?

Можно ли исправить ситуацию без полной загрузки, поскольку процесс занимает много времени (примерно 16 часов)?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Проблема может быть решена в 2 этапа.

  1. Сначала удалите все ошибочно отслеженные ветви.

  2. Добавить правильные ветки в хранилище.

Чтобы удалить ошибочные удаленные ссылки, можно найти их с помощью git branch -r, а затем удалить с помощью git branch -D.

Я не нашел «правильного» решения на основе командной строки для второго шага, но, к счастью, документация git-svn, более конкретно Раздел конфигурации дает достаточно подробностей, чтобы что-то делать вручную.

Самое главное, нельзя просто установить одну ветку для отслеживания svn remote; в конфигурации распознается только ключ «ответвлений», что требует использования подстановочных символов.

Таким образом, можно просто добавить еще один svn-пульт - вручную, в .git/config, скопировав уже существующий, изменив имя и значение ключа «получить». Таким образом, можно настроить ветку, которая соответствует одной удаленной ветке svn и работать как обычно после.

0 голосов
/ 31 августа 2018

Для git svn опция -b не означает «это ветвь», это означает «это каталог, в котором все подкаталоги являются ветвями», поэтому git svn init -b playground_dev принимает подкаталоги playground_dev в качестве ветвей.

Я не вижу простого способа преодолеть это. Я бы рекомендовал дважды клонировать в отдельные репозитории и объединить эти репозитории. Что-то вроде:

git svn clone svn::/server.address:port/RepositoryHome -T playground playground
git svn clone svn::/server.address:port/RepositoryHome -T playground_dev playground_dev

cd playground
git fetch ../playground_dev trunk:playground_dev
cd ..
rm -rf playground_dev

Последняя команда извлекает ветку "trunk" из каталога playground_dev в новую ветку "plays_dev" в текущем каталоге.

...