从git svn迁移到git之后,如何删除假远程分支?

从git svn迁移到git之后,如何删除假远程分支?,git,migration,branch,git-svn,Git,Migration,Branch,Git Svn,我已经使用git svn有一段时间了(我团队中的其他人都直接使用svn)。我们决定开始使用git。为了做到这一点,我使用了git回购,这是我在git svn中的“一方”,如下所示: $ git remote add origin git@github.com:mycompany/myproject.git $ git push -u origin master 这个过程进行得很顺利,但当这个过程完成后,我保留了git svn在我第一次开始使用它时创建的所有可笑的分支,只是有一个小问题;git甚

我已经使用git svn有一段时间了(我团队中的其他人都直接使用svn)。我们决定开始使用git。为了做到这一点,我使用了git回购,这是我在git svn中的“一方”,如下所示:

$ git remote add origin git@github.com:mycompany/myproject.git
$ git push -u origin master
这个过程进行得很顺利,但当这个过程完成后,我保留了git svn在我第一次开始使用它时创建的所有可笑的分支,只是有一个小问题;git甚至不再承认它们是分支。下面是我的列表:

$ git branch -r
domain_integration
dot-org
dot-org@1977
email-edit-page
origin/account-integration
origin/master
origin/stable
prototype_to_jquery-1.1.0
stable@1976
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/refs/remotes并删除它们来修复其中的一些问题,但只有少数几个问题。我只能在.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
...

我假设这只是将分支与其上次提交相关联。删除“假的”有意义吗?这会弄坏什么东西吗?(它会工作吗?

如果您只想要主分支,您可以随时删除本地回购并重新克隆它。这是最简单的,如果你不关心任何事情,除了主分支。您可以随时尝试:

git remote prune origin

删除不再位于原始位置但保留在本地的远程引用。

您正在使用该命令列出远程分支;不能使用分支-d删除远程分支。是否确实要删除所有历史svn分支?(您可能会在
.git/packed refs
中找到它们)是的,这些是远程分支。我应该提到这一点,并提出一个稍微不同的问题。我如何告诉git它们已经不存在了?你说得对,它们在.git/packed refs中,也许我应该在那里删除它们。或者,当我允许数据库压缩时,它们可能会消失?(一开始我没有这样做,因为我知道在某些情况下,当你把git放到一个陌生的地方时,你可能会丢失一些东西。当我理清一些事情时,我会更加自信。)当你运行
git gc
时,它们不会消失@MagnusSkog的答案必须是正确的:如果它们在远程不存在,则会被删除。如果你真的,真的,真的确信你不再需要它们了,你可以直接从refs压缩文件中删除它们。奇怪的是,这没有任何作用。当我从.git/refs/remotes中删除它们时,它可能已经手动删除了这些引用,但现在它什么也没说,也没有改变git branch-r的结果。这意味着这些引用实际上在远程上。如果要完全删除它们,则需要在远程删除它们,例如“git push origin:account integration”如果要删除远程分支帐户集成,请注意冒号。抱歉,我将origin/*分支包括在内,这让人感到困惑。那些已经存在(我可以在github上看到),我希望它们继续存在。github否认的是现有的,例如“域_集成”。我甚至不知道这对应的命令是什么,因为我不认为它是“git-push:domain_-integration”(我已经尝试过了)。域\u集成未显示在.git/config中。如果我试着检查它,它会告诉我我处于一种超然的状态。(然后git branch会告诉我我在“(no branch)”)如果你得到一个分离的头状态,它必须是一个标签,而不是一个分支。你能试试.git文件夹中的“find.| grep domain”看看它在哪里吗?$find.|grep domain为我提供了./logs/refs/remotes/domain\u集成我认为这里的关键是git svn导入了这些东西,并使它们进入了一种违背内部git逻辑的状态,这意味着用这些术语来思考是行不通的。我可能是错的(也可能是误解)。在这一点上,我很可能只是简单地克隆一个干净的版本,因为修剪不起作用,我可以只备份我以前的版本。