Как изменить сопоставление префиксов в репозитории Git-Svn? - PullRequest
10 голосов
/ 13 февраля 2011

Я создал Git Clone из репозитория SVN, используя git-svn.При этом я указывал опцию --prefix для префикса моих удаленных веток.Теперь я хочу избавиться от этого префикса.

Есть ли способ обновить или удалить префикс без повторного клонирования репозитория?

По сути, я сделал первоначальный клон, используя --prefix=Project, поэтомуВ итоге я получил Project/trunk и Project/feature-branch в качестве моих удаленных трекинговых веток.Я хочу, чтобы trunk назывался trunk, а feature-branch назывался svn/feature-branch.

Ответы [ 2 ]

9 голосов
/ 13 февраля 2011

Я сделал следующее, что, похоже, сработало.

В .git/config Я обновил настройки выборки, веток и тегов, чтобы обновить локальные ссылки.Это было:

[svn-remote "svn"]
        url = http://subversion/......
        fetch = trunk:refs/remotes/Project/trunk
        branches = branches/*:refs/remotes/Project/*
        tags = tags/*:refs/remotes/Project/tags/*

, которое я изменил на

[svn-remote "svn"]
        url = http://subversion/......
        fetch = trunk:refs/remotes/trunk
        branches = branches/*:refs/remotes/svn/*
        tags = tags/*:refs/remotes/svn/tags/*

Внутри .git/refs/remotes я переместил ствол из папки Project, а оставшиеся ссылки в Project вновая папка с именем svn.Структура была:

  • пульты
    • Проект
      • Магистраль
      • Feature-Branch

Которые я изменил на:

  • пульты
    • транк
    • svn
      • feature-branch

Я также выполнил ту же реструктуризацию папок в .git/svn/refs/remotes/.

Наконец я вызвал git svn fetch.Мне пришлось указать аргумент -r для ограничения той же самой стартовой ревизией, которую я использовал для моего первоначального клона, но, похоже, он не восстановил старые ревизии.

3 голосов
/ 12 июля 2014

Примечание: текущее решение может больше не работать с git 2.0+ (апрель 2014 г.)

См. commit fe191fc Johan Herland (jherland),который подчеркивает тот факт, что вы сейчас должны иметь префикс (а не иметь svn ответвление без префикса типа 'trunk'):

Git 2.0: git svn: установить значение по умолчанию --prefix='origin/', если --prefix не задано

Отсутствие префикса по умолчанию было проблематичным:

git-svn по умолчанию помещает свои ссылки на Subversion-отслеживание непосредственно в refs/remotes/*.
Это противоречит соглашению Git об использовании refs/remotes/$remote/* для хранения ветвей удаленного отслеживания.

Кроме того, объединение git-svn с обычными git-пультами может привести к засорению ссылок под refs / remotes (например, если у вас есть git remote под названием "tags" с веткой "v1", она будет перекрываться светка отслеживания git-svn для тега "v1" из Subversion.

...