2010-06-06 57 views
1

使用Git或Mercurial,如果工作目录为1GB,则本地存储库将是另一个1GB(至少),通常驻留在同一个硬盘驱动器中。然后当推送到中央存储库时,会有另一个1GB。可以将Git或Mercurial设置为绕过本地存储库并直接转到中央存储库?

可以将Git或Mercurial设置为仅使用工作目录,然后使用中央存储库,而不需要此1GB数据的3个副本? (实际上,当中央存储库也是update时,那么同样的数据有4个副本......可以减少吗?在SVN场景中,当有5个用户时,那么​​总共会有6GB的数据随着分布式版本控制,那么就会出现数据的12GB)

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

+0

你的工作树上有什么?你认为相信本地存储库至少和工作树一样大的证据是什么? – 2010-06-06 10:47:26

+0

@Charles会被压缩吗?我的意思是,存储库实际上有工作目录中每个文件的副本,只有压缩? – 2010-06-06 10:50:06

+0

回答git,是的,高度压缩。通常,对于具有合理历史数量的“常规”源代码存储库,打包的存储库大小可以显着小于一个分支的检出端。 – 2010-06-06 11:08:36

回答

3

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

但是一般来说Mercurial或者Git的压缩比都非常高,即使存储整个历史,通常也比svn好。

0

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

Git也可以选择裸存储库和共享存储库,但我从来没有尝试过它们。

+1

git clone也能够使用硬链接,它被设计用于克隆unix上的本地存储库。参见手册。 N.B>硬链接不跨越文件系统边界(例如片/分区)。 – TerryP 2010-06-06 11:35:40

+0

hm,所以我尝试了Windows 7,Git和Mercurial似乎都复制了文件,而不是使用任何链接......所以如果我只用一个文件克隆一个只有初始版本为10MB的文件,新目录将会有20MB。原始存储库也是20MB。 – 2010-06-06 13:27:40

+0

使用“-s”开关的git克隆只会引用原始存储库位置 - 但只有当存储库可以在本地访问时才能使用。 – araqnid 2010-06-06 16:35:16

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标签,然后提交更改,然后在运行git gc之前对此进行了测试显然是.git文件夹中每个MP3的两个副本,但是在git gc之后,大小回落到仅略大于原始工作目录的大小。

相关问题