我已经在几个地方读过,可以objects在多个git存储库之间共享目录,例如使用符号链接.我想这样做在同一目录中的几个裸存储库之间共享对象数据库:
shared-objects-database/
foo.git/
objects -> ../shared-objects-database
bar.git/
objects -> ../shared-objects-database
baz.git/
objects -> ../shared-objects-database
Run Code Online (Sandbox Code Playgroud)
(我这样做是因为在每个对象目录中会有大量冗余存储的大blob.)
我对此的关注是,在使用这些存储库时,git gc将自动调用并导致从一个存储库无法访问的对象被修剪,从而使其他存储库不完整.有没有简单的方法可以确保不会发生这种情况?例如,是否存在一个强制--no-prune为默认值的配置选项git gc,如果是这样,是否足以使用此设置而不会有丢失数据的风险?
目前,我一直在使用这种objects/info/alternates机制在这些存储库之间共享对象,但是将这些指针从每个存储库维护到所有其他存储库都有点笨拙.
(我的另一种方法是只具有单一的裸库,与各分支机构foo.git,bar.git并baz.git命名为foo-master,foo-testing,bar-master,等.然而,这会是一个有点更多的工作来管理,因此,如果符号链接的对象目录可以安全地工作,我宁愿那样做.)
您可能会猜到这是使用Git For It It It Not It用例的其中一个,但我希望这个问题清晰有效;)
假设我需要重命名一个已被许多开发人员下载的 Git 存储库。
如果我重命名此存储库,会发生什么副作用(如果有)?我的意思是,除了开发人员必须在本地存储库中执行更改才能更改其远程存储库之外,如下所示
git remote set-url origin new_url
Run Code Online (Sandbox Code Playgroud)
为了方便讨论,请考虑 Git 服务器是私有服务器,并且所有开发人员都属于同一家公司。
无论如何,我检查了有关在 Git 中重命名存储库的其他问题,但除了更改之外,没有一个问题具体说明了副作用git remote。
我们正在开发 Android-S,发现每个 CI 用户在执行“repo init”和 repo Sync”操作时,会在本地 FS 上使用近 385 GB 的空间。我们希望优化存储和网络速度,并根据我们在手册页中观察到这可以使用 --reference 命令来实现。
根据文档:
--reference 选项可用于指向包含 --mirror 同步内容的目录。这将使工作目录在从服务器获取时使用本地参考目录中尽可能多的数据。这将通过减少网络上的数据流量来使同步速度更快。
第一个克隆:
我们按照步骤创建了第一个参考副本,发现初始占用的空间接近 385 GB。
User-1 第一个用户现在执行了存储库初始化和存储库同步,我们看到此活动的总时间仅为 23 分钟,但它也将大小大大减小到 63 GB。
user-2 第二个用户现在执行了存储库初始化和存储库同步,我们看到此活动的总时间仅为 23 分钟,并且大小也减少到了 63 GB。
我确实看到了网络性能的提高,但想知道实际大小如何从 385 GB 变为 63 GB,63 GB 中实际有什么,以及参考选项 WRT 空间减少背后的真正概念是什么。
使用的命令:
导出镜像=“/data/Android-s”
repo init -u ssh://$US...@android1.test.com:29418/android/manifest -b tmainline -m tr-mainline.xml --repo-url=ssh://android1.test.com :29418/android1/repo --repo-branch=test-stable --no-repo-verify --reference=$Mirror
围绕它的任何线索或文档对于如何压缩空间以及这是否也会导致构建过程中的任何问题以及在此命令操作期间要采取的任何预防措施都非常有帮助。
谢谢你,安尼什