可以将Git或Mercurial设置为绕过本地存储库并直接进入中央存储库吗?

时间:2010-06-06 10:43:47

标签: git mercurial repository dvcs

使用Git或Mercurial,如果工作目录是1GB,那么本地存储库将是另一个1GB(至少),通常位于同一个硬盘中。然后当推到中央存储库时,还会有另外1GB。

可以将Git或Mercurial设置为仅使用工作目录,然后使用中央存储库,而不使用此1GB数据的3份副本吗?

(实际上,当中央存储库也是update时,则有4个相同数据的副本...可以减少吗?在SVN场景中,当有5个用户时,则会有6GB使用分布式版本控制,那么将有12GB的数据?)

更新:这很奇怪 - 我只是试图查看我使用Mercurial克隆的项目:不包括.hg文件夹的工作目录是126MB,但.hg文件夹是239MB。它是一个新的克隆...是因为我的新存储库实际上包含了所有的历史/修订版,所以这就是为什么它是工作目录的两倍?

3 个答案:

答案 0 :(得分:3)

Git或Mercurial是分布式版本控制系统。这意味着每个结帐都包含项目的整个历史记录。绕过它会破坏使用DVCS的全部目的(每个操作都可以离线完成)。

但总的来说,Mercurial或Git具有非常高的压缩率,即使存储整个历史记录,也往往优于svn。

答案 1 :(得分:0)

hg clone在unix文件系统上创建硬链接,因此只有新更改集引入的更改才会在存储中使用空间。如果您不想要工作副本,可以将repo更新为“null”修订版,该修订版仅包含没有工作副本的存储库。

Git还可以选择裸存储库和共享存储库,但我从未尝试过它们。

答案 2 :(得分:0)

只要您安装了可在本地访问“中央”存储库的文件系统,就可以执行您所要求的操作。

来自cmd.exe:

git --git-dir=Z:/path/to/git_repo_dir --work-tree=C:/path/to/checkout/root checkout master

你可以根据需要为尽可能多的结账做到这一点,但这并不是很理想。确实,git在Windows上的运行效果不如在Linux上运行得好 - 理想的解决方案是每个克隆都有到对象的硬链接,所以它们只是物理存储在磁盘上一次,然后每个克隆都可以检查到不同的分支,因此您可以一次跟踪开发/测试/生产,例如。

此外,就您对磁盘使用情况的担忧而言 - 尝试在您的某个存储库上执行git gc --aggressive --prune并查看它是否仍占用大量空间。根据我的经验,git非常适合存储二进制增量 - 我已经通过将一个充满MP3文件的目录添加到存储库并提交它们,更改ID3标记,然后提交更改,以及在运行{{{ 1}} .git文件夹中每个MP3显然有两个副本,但在git gc之后,大小又缩小到比原始工作目录略大。