在git中如何安全地使用共享对象数据库?

我在几个地方阅读过,可以在多个git存储库之间共享对象目录,例如具有符号链接。我想这样做,以便在同一目录中的几个裸存储库之间共享对象数据库:

shared-objects-database/
foo.git/
  objects -> ../shared-objects-database
bar.git/
  objects -> ../shared-objects-database
baz.git/
  objects -> ../shared-objects-database

(我这样做是因为在每个对象目录中都会有很多大的blob被冗余存储。)

我关心的是,在使用这些存储库时,将自动调用git gc,并导致从一个存储库中无法访问的对象被修剪,从而使其他存储库不完整。有没有任何简单的方法来确保这不会发生?例如,是否有一个配置选项会强制将gno gc默认为nono,如果是这样,那么这样做足以使用此设置,而不会丢失数据?

目前,我一直在使用对象/ info / alternates机制在这些存储库之间共享对象,但是将这些指针从每个存储库保持到所有其他存储库有点恶作剧。

(我的另一个选择是只有一个单独的存储库,所有分支的foo.git,bar.git和baz.git命名为foo-master,foo-testing,bar-master等。但是,要更多的工作要管理,所以如果符号链接对象目录可以安全地工作,我宁愿这样做。)

你可能会猜测这是使用Git为什么不是预期的用例之一,但我希望这个问题是清楚和有效的;)

为什么不把gc.pruneExpire变量调到永远不会?你不可能有1000年的松散物品,你不想删除。

要确保真正要修剪的东西可以修剪,您可以保留一个具有所有其他作为遥控器的回购。 git gc在那个应用程序中是相当安全的,因为它真的知道什么是不可达的。

编辑:好的,我有点骑士关于时间限制;正如在评论中指出的那样,1000年不会太好,但是这个时代的开始就是永远不会。

http://stackoverflow.com/questions/2350996/how-can-one-safely-use-a-shared-object-database-in-git

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在git中如何安全地使用共享对象数据库?