2009-12-03 4 views
57

gitをscmとして使用していますが、svn-repoを使用する必要があります。gitでsvn-branchを削除しますか?

git svn branch the_branch 

しかし、どのように私は、リモートブランチを削除することができます。私はこのようなSVN-リモートブランチを作成することができますか?

答えて

78

現在、git-svnを使用して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) 

をSubversionのタグに対応Gitのブランチを削除するには、コマンドは多少異なります。

git branch -D -r tags/the_tag 
rm -rf .git/svn/tags/the_tag 
+1

Stephen Cが別の答えで推測しているように、.git/svn内のツリーの正確な構造は、git-svn設定をどのように設定するかによって異なります。つまり、ほとんどの一般的な構成では、削除する正しいサブディレクトリを特定するのは難しいことではありません。 – ipmcc

+1

は 'git gc'や' git svn gc'は推測することなく正しいファイルを検出して削除するでしょうか? –

+1

Ben: "rm -rf"コマンドはブランチのgit-svnメタデータを削除します。この情報は "git gc"または "git svn gc"によってクリーンアップされません。 – mhagger

6

これは私のためによく働いた、ありがとう。私の環境がちょっと変わったのか、これがもっと最近のバージョンのgitで変更されたのかは分かりませんが、svnブランチディレクトリは.git/svn/refs/remotes /にあります。 rmコマンドに:

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

私はそれらをあまり使用しないので、タグについてはわかりません。

+0

ローカルビューからのみ削除されます。 SVNリポジトリを使用している人は誰でもそれを見ることができます。 – phyzome

+0

@phyzome、これはshnブランチを削除する方法を示しているmhaggerから受け入れられた回答の補遺です。私はあなたがそれについてdownvotedを信じることができません。 –

+0

ああ、私は今それを見る。これは、mhaggerの答えに対するコメントです。ところで、トップレベルの回答ではなく、 – phyzome

2

中にエラー、トップの答えは、2009年に書いた、今遠隔タグを削除する正しい方法は、2017年のよう

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

これは、強制的に削除しない-Dの代わりに-dを使用している以外は、一番上の答えと同じです。 –

+0

@JeffSchumacher彼は最近答えを更新しました。 – alswl

0

で、我々はまだgit svn branch --deleteを持っていません。 (-dオプションがありますが、それはfor mystic --destinationである)他の回答で述べたように

、手動の手順は次のとおりです。、コミットメッセージでgit log -1 $commit

  • git-svn-id: $urlライン
  • 削除]を探します。

    1. 印刷がメッセージコミットSVNブランチ:svn rm $url

    これらのステップを自動化する別名を作成しました。

    [alias] 
        svn-rm-branch = "!f() { if git_svn_id=\"$(git log -1 --format=%B \"[email protected]\" | 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 \"[email protected]\")\" 1>&2; fi }; f"