2012-03-04 5 views
4

私はgit-svnをしばらく使っています(私のチームの誰もがsvnを直接使っています)。私たちはgitを使い始めることにしました。これを行うために、私はのgit-svnのようにのようなの私の「側」であるGitのレポを使用:git-svnからgitに移行した後の偽のリモートブランチを削除するにはどうしたらいいですか?

$ git remote add origin [email protected]:mycompany/myproject.git 
$ git push -u origin master 

これは、罰金行ったが、プロセスが完了したとき、私はgitのすべてのこれらのばかげた枝を保持していました-svnは私が最初にそれを使い始めたときに作りました。 gitはもはや彼らがブランチであることを認めないでしょう。ここに私のリストには、ように見えたものです:彼らは(主に)どこから来たのか、私は知っていたが、今私もそれらを削除することはできませんけれども

$ git branch -r 
domain_integration 
dot-org 
[email protected] 
email-edit-page 
origin/account-integration 
origin/master 
origin/stable 
prototype_to_jquery-1.1.0 
[email protected] 
tags/development-1.1.0.0 
tags/pre-2011-02-08 
tags/production-1.0 
tags/stable-1.0.0 
tags/stable-1.0.1 
tags/stable-1.1.0 
tags/stable-1.1.0.1 
trunk-stash 

これらは、迷惑でした。これが起こる:

$ git branch -d trunk-stash 
error: branch 'trunk-stash' not found. 

私は.git /レフリー/リモコンに入るとちょうどそれらを削除することによって、これらのいくつかを修正することができましたが、ほんの数がありました。私が見つけることができる唯一の他の場所は.git/info/refsです。これは次のようなものです:

... 
7788d300f0d4370d65a3ccf3e47d90f7fb16b0b4  refs/remotes/tags/stable-1.0.0 
aace34d6745080ce2b6b29e927f5d1b050b99511  refs/remotes/tags/stable-1.0.1 
58bd2ac23d5979ff61bd6305df18f8a5da50f888  refs/remotes/tags/stable-1.1.0 
644fd55fcdf2569305cdbe0b6fefb9f247625658  refs/remotes/tags/stable-1.1.0.1 
bc8e9f9177c9612aceb55624adea1b02e9e8620f  refs/remotes/trunk 
69493e14345e6a7a4db324935bccd6393f201da4  refs/remotes/trunk-stash 
25b7024f6c1d38c10400b2c2e7b446aae1e84e06  refs/stash 
... 

これはちょうど最後のコミットでブランチに関連付けられていると仮定します。 「偽の」ものを削除するのは理にかなっていますか?これは何か壊れますか? (動作しますか?)

+0

このコマンドでリモートブランチを一覧表示しています。 'branch -d'を使ってリモートブランチを削除することはできません。歴史的なsvnブランチをすべて削除してもよろしいですか? (あなたはおそらくそれらを '.git/packed-refs'で見つけるでしょう) – knittl

+0

はい、それらはリモートブランチです。私はそれを言及すべきであり、少し違った質問をしました。どうやってgitに存在しなくなったことをgitに伝えるのですか?あなたはそれらが.git/packed-refsであることについて正しいです、多分私はそこでそれらを削除する必要があります。または、データベースを圧縮できるようにすると、それらは消えるでしょうか? (私が最初にこれをしなかったのは、特定の状況では、あなたが奇妙な場所にいるときに物事を失うことがあることを知っているからです。私はいくつかのことをまっすぐにすると、それについてもっと自信があります。) – cesoid

+0

'git gc'を実行すると、それらは消えません。 @ MagnusSkogの回答は正しいものでなければなりません:もしそれらがリモートに存在しなければ、getは削除されます。実際には、_really_、___really___はあなたがそれらをもう必要としないと確信していれば、refs-packedファイルから直接削除することができます。 – knittl

答えて

2

マスターブランチのみが必要な場合は、いつでもローカルリポジトリを削除して再クローンできます。マスターブランチ以外のことを気にしなければ、これは最も簡単です。いつでも試すことができます:

git remote prune origin 

発信元ではなくローカルに保持されているリモート参照を取り除くこと。

+0

これは、奇妙なことに、何もしません。おそらく、私が手動で削除したものを.git/refs/remotesから削除してしまったものを取り除いてしまったかもしれませんが、今は何も言わずgit branch -rの結果を変更しません。 – cesoid

+0

それは、それらの参照が実際にリモートにあることを意味します。それらを完全に削除したい場合は、リモートで削除する必要があります。 "git push origin:account-integration"リモートブランチアカウント統合を削除する場合は、コロンに注意してください。 – ralphtheninja

+0

申し訳ありませんが、私はorigin/*ブランチを含めてこれを混乱させました。それらは存在する(すなわち私はギブスでそれらを見ることができる)、そして私はそれらを残しておきたい。 githubが存在を否定するのは、例えば "domain_integration"です。私はそれが "git push:domain_integration"(私はとにかく試してみた)とは思わないので、それに相当するコマンドが何であるか分かりません。 domain_integrationは.git/configには表示されません。私がそれをチェックしようとすると、私は分離されたHEAD状態にあると私に伝えます。 (そして、gitブランチは私が "(ブランチなし)"になっていることを教えてくれます。) – cesoid

関連する問題