我有一个公开的回购。
问题是我已经使用了很长时间,这意味着裸机库中有很多垃圾。有大量死枝,删除标签等......
是否有一些命令来清理裸仓库?有些像git remote prune
那样适用于相反的情况吗?
DevelMachine1
^
|
v
MainDevelRepo <-> MainRepo -> PublicBareRepo (with a lot of junk) -> The World
^
|
v
DevelMachine2
答案 0 :(得分:3)
所有那些未引用的对象最终应该消失,考虑到:
git prune
由git gc
git gc
是called automatically when you are pushing to a bare repo 因此,即使您没有对远程裸仓库的直接本地访问权限,“使用”它(推送到它)的简单事实足以触发gc
和prune
裸露的回购说。
注意:我的答案是在远程裸仓库的背景下(你没有直接使用裸仓库,你正在推动它)
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