我有时会运行git gc
来清理文件并提高性能,通常使用cronjob。但是,我还使用git-new-workdir
创建一个具有自己索引的新工作目录。
在每个工作目录上运行git gc
是否有意义?为什么呢?
答案 0 :(得分:2)
不,这没有任何意义。运行一次。
git gc
不会修改工作目录中的任何内容。 仅修改.git
目录中的内容。 git-new-workdir
的整个点是在多个工作目录之间共享一个.git
,因此从两个不同的工作目录运行git gc
与从同一目录运行两次相同;也就是说,这是没有意义的。
答案 1 :(得分:2)
不,因为底层存储库由所有这些单独的工作目录共享,git gc
在底层存储库上运行。
这里还有一个(轻微但真实的)危险。运行git gc
时,它会清除并压缩存储库对象,丢弃那些未引用的对象。在某些情况下,某些引用可能仅在索引中,或仅在HEAD
中(在“分离的HEAD”模式下)。但请注意,在git-new-workdir
的说明中,它部分地说:
它只是为你设置一个新的工作目录(有自己的索引)。
隐藏在其他索引中的引用 - 即,与work-dir不同的任何索引 - 对git gc
是不可见的,使它们有资格被删除。
大部分时间这都不会成为问题,因为git gc
运行git prune
并且未引用对象的默认到期时间(即2周)。当您git add
一个文件但没有git commit
结果时,会发生仅索引引用,因此如果您保留git add
未提交的git add
个ed文件,这些明显过时的引用只会消失至少两周......你总是可以通过.git
根据需要再次修复问题。
使用分离的HEAD创建匿名分支会出现更阴险的版本。您链接的页面没有提到它,但new-workdir脚本没有(也不能)在单独的“新工作目录”中维护这些分离的HEAD(这些新目录中的每一个都有自己的HEAD
目录单独git gc
参考)。如果在其他工作目录中运行function checkclick(accNo) //Call this function wherever you want and pass Account_ID
{
$('div.float-left span.fullaccnum').each(function(){
if(accNo==$(this).html())
{
$(this).siblings('b').children('a').trigger('click')
}
});
}
,则可以从底层存储库中丢弃两周或多周的分离提交链。
这对于“真正的”分支和标记来说不是问题,因为脚本共享“更深层”的引用(包括分支和标记)。也就是说,更新一个work-dir中的分支X会更新所有其他工作中的分支X,这样就无法丢失引用。
总之(太晚了?:-))如果你没有超脱HEADs超过一个星期,你就相当安全。