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


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

git svn branch the_branch

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

4 59

4 ответа:

В настоящее время невозможно удалить ветку 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

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

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

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

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

svn rm svn://dev.in/branches/ios_20130709150855_39721/
git branch -d -r ios_20130709150855_39721

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

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

  1. печатать сообщение: git log -1 $commit
  2. в сообщении фиксации, найдите git-svn-id: $url строка
  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"