是否有可能清理一个裸仓库?

时间:2011-05-15 14:07:47

标签: git

我有一个公开的回购。

问题是我已经使用了很长时间,这意味着裸机库中有很多垃圾。有大量死枝,删除标签等......

是否有一些命令来清理裸仓库?有些像git remote prune那样适用于相反的情况吗?

编辑:因为似乎有些混乱。这是我的设置:

DevelMachine1
   ^
   |
   v
MainDevelRepo <-> MainRepo -> PublicBareRepo (with a lot of junk) -> The World
   ^
   |
   v
DevelMachine2

2 个答案:

答案 0 :(得分:3)

所有那些未引用的对象最终应该消失,考虑到:

因此,即使您没有对远程裸仓库的直接本地访问权限,“使用”它(推送到它)的简单事实足以触发gcprune裸露的回购说。


注意:我的答案是在远程裸仓库的背景下(你没有直接使用裸仓库,你正在推动它)

git remote prune是在本地 repo上完成的一项操作(非裸机版,您可以在其中获取一些远程分支并在remotes/*下拥有大量跟踪分支 local repo的名称空间

清理远程(裸露的)仓库意味着按Magnus Skog中的his answer提及:refs。{ 如果当前本地回购“DevelMachinex”上不存在这些引用,那么除了以外没有其他解决方案:

  • 克隆 - 镜像远程裸仓“MainDevelRepo”(您将把所有那些陈旧的分支作为本地远程跟踪分支)
  • 在本地删除分支
  • push --mirror,因为the documentation确实提到“已删除的参考号将从远程端移除”。

答案 1 :(得分:3)

甚至还有一些信息:

MainRepo -> PublicBareRepo (with a lot of junk) -> The World

问题出在这里。偶尔你会从MainRepo推送到PublicBareRepo,它现在包含不再有效且不应该存在的东西。将来,请确保只推送应该在那里的分支机构。我想现在最重要的是从中移除分支,然后我必须回到原来的答案(假设我们正在谈论同样的垃圾)

git push PublicBareRepo :someBranch1
git push PublicBareRepo :someBranch2

来自OP的更多信息:

似乎是导致问题的repo设计和--mirror是解决这个问题的方法。如果A是开发人员推送他们的东西的主要裸仓库,并且如果B是公共裸仓库,那么B应该是带有--mirror选项的A的克隆。

需要做的是在B上执行“git remote update”(假设B已经是A的镜像),因此它将自己更新为与A相同。


原始答案:

如果要删除远程存储库上的分支,可以执行以下操作:

git push origin :branchName

同样适用于任何参考,例如对于标签:

git push origin :tagName