git-svn переименовать ветку отслеживания - PullRequest
22 голосов
/ 08 декабря 2010

Мои текущие svn-клонированные ветви (с опцией -s 'standard layout') называются:

$ git branch -r
branch1
branch2

Я бы хотел переименовать их так, чтобы они были:

$ git branch -r
svn/branch1
svn/branch2  

Как будто я первоначально назвал $ git-svn clone --prefix svn. Мне не нужно менять имена на удаленной стороне.

1 Ответ

34 голосов
/ 10 декабря 2010

Если у вас нет другого пульта, который был добавлен с git remote add ..., попробуйте следующую процедуру:

  1. git gc для упаковки всех ссылок в .git/packed-refs.
  2. Открыть .git/packed-refs для редактирования. Замените "refs / remotes /" на "refs / remotes / svn /".
  3. Открыть .git/config для редактирования. Вы должны увидеть что-то вроде:

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

    Заменить "refs / remotes /" на "refs / remotes / svn /":

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

    Обязательно обновите все ветки удаленного слежения. Для этого вы можете просто заменить «refs / remotes /» на «refs / remotes / svn /» во всем файле.

Я протестировал эту процедуру с копией моего зеркала git-svn из репозитория GNU Nano, и, похоже, она работает.

РЕДАКТИРОВАТЬ: Я только что подтвердил, что эта процедура не портит операции git-svn dcommit или rebase. Это как если бы --prefix=svn/ было изначально указано в команде git svn clone -s SVN_REPO_URL.

...