Удалить svn-ветку через git? - PullRequest
       10

Удалить svn-ветку через git?

60 голосов
/ 03 декабря 2009

Я использую git в качестве scm по выбору, но должен использовать svn-repo. Я могу создать svn-remote-branch следующим образом:

git svn branch the_branch

Но как мне удалить удаленную ветку?

Ответы [ 4 ]

82 голосов
/ 03 декабря 2009

В настоящее время невозможно удалить ветку SVN с помощью git-svn. Но ветку легко удалить с помощью SVN, даже не проверяя ее. Так просто наберите

svn rm $URL/branches/the_branch

Обратите внимание, что удаление ветви Subversion не приводит к ее удалению из репозитория git-svn. (Это сделано намеренно, поскольку удаление ветви Subversion не приводит к потере информации, тогда как удаление ветви git приводит к тому, что ее существование будет забыто после следующей сборки мусора git.) Поэтому, если вы хотите, чтобы удаленная ветка SVN была удалена из вашего git репозиторий, вы должны сделать это вручную:

git branch -D -r the_branch
rm -rf .git/svn/the_branch

OR
rm -rf .git/svn/refs/remotes/f8745/ (for newer versions)

Чтобы удалить ветку git, соответствующую тегу Subversion, команды немного отличаются:

git branch -D -r tags/the_tag
rm -rf .git/svn/tags/the_tag
6 голосов
/ 09 ноября 2010

Это хорошо сработало для меня, спасибо. Не уверен, что моя среда просто отличается или это было изменено в более поздней версии git, но каталоги веток svn были расположены в .git / svn / refs / remotes /, что было достаточно просто найти из исходных инструкций, изменив Команда rm:

rm -rf .git/svn/refs/remotes/the_branch

Не уверен насчет тегов, так как я не очень много их использую.

2 голосов
/ 15 октября 2013

Оппс, главный ответ был написан в 2009 году, теперь правильный способ удаления удаленного тега -

svn rm svn://dev.in/branches/ios_20130709150855_39721/
git branch -d -r ios_20130709150855_39721
0 голосов
/ 18 мая 2017

По состоянию на 2017 год у нас все еще нет git svn branch --delete. (-d опция есть, но для мистики --destination)

Как описано в других ответах, ручные шаги:

  1. Распечатать сообщение о фиксации: git log -1 $commit
  2. В сообщении о фиксации найдите git-svn-id: $url line
  3. Удалить ветку SVN: svn rm $url

Я сделал псевдоним для автоматизации этих шагов:

[alias]
    svn-rm-branch = "!f() { if git_svn_id=\"$(git log -1 --format=%B \"$@\" | grep -o '^git-svn-id:[^@]*')\" ; then svn rm --editor-cmd=\"$(git var GIT_EDITOR)\" \"$(echo $git_svn_id | cut -d' ' -f 2)\" ; else echo No git-svn-id in the message of the commit \"$(git rev-parse \"$@\")\" 1>&2; fi }; f"
...