Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial:可能存在不完整的中央存储库?_Mercurial_Repository - Fatal编程技术网

Mercurial:可能存在不完整的中央存储库?

Mercurial:可能存在不完整的中央存储库?,mercurial,repository,Mercurial,Repository,我想实现以下设置: AtWork:MercurialRepo互联网:MercurialRepo AtHome:MercurialRepo 问题是,存储库有好几项功能。我在家里已经有了整个回购协议(通过捆绑->光盘->拆箱)。问题是,我不想将整个存储库存储在互联网上。有没有一种方法可以暂时从版本控制中排除文件夹,以便只推/拉我正在通过internet处理的repo的一个子集?我怎样才能最好地实现我的目标?有时我需要做繁琐的捆绑->cdrom->拆开捆绑的过程,只是为了更新其他的一切,但总的来说,我

我想实现以下设置:

AtWork:MercurialRepo互联网:MercurialRepo AtHome:MercurialRepo

问题是,存储库有好几项功能。我在家里已经有了整个回购协议(通过捆绑->光盘->拆箱)。问题是,我不想将整个存储库存储在互联网上。有没有一种方法可以暂时从版本控制中排除文件夹,以便只推/拉我正在通过internet处理的repo的一个子集?我怎样才能最好地实现我的目标?有时我需要做繁琐的捆绑->cdrom->拆开捆绑的过程,只是为了更新其他的一切,但总的来说,我确实想使用互联网路径,不想将整个回购协议存储在那里

有没有一种方法可以暂时从版本控制中排除文件夹,以便只推/拉我正在通过internet处理的repo的一个子集

不是文件夹,而是回购的某些部分-是


您可以
push-b
(只有一些分支)或
push-r
(与祖先一起修订:对于最新的工作,它将是-r-tip),但传输的最终大小很大程度上取决于DAG的类型-在大量跨分支合并的情况下,您可能只跳过一小部分变更集

我有一个小想法,和你要求的有点不同,但是。。。 如果我有同样的问题,我会考虑使用usb闪存作为整个存储库(如果你是10或20千兆,它应该是便宜的)。所以,在工作中,你可以将整个repo复制或克隆到usb,在家中从中提取新的更改,在家庭工作完成后,将其推到闪存上的repo,然后在工作中提取到repo(我甚至会对撤消的工作使用临时提交,我会将其恢复到工作目录并剥离,这样我就可以继续我结束的工作)


但绝对最简单的方法是尝试连接到工作服务器,或者连接到工作中的机器。或者在互联网上获得更大的回购空间。所以,这只是另一个想法。HTH实际上是不可能的。最接近的方法是使用子存储库,这将有效地使您的大型回购协议在网络上只保留一部分。

因此,正如您现在发现的,您不能有选择地从存储库克隆某些文件。你能做的最好的事情就是克隆所有分支的子集;但是,对于存储库中的所有文件,您将获得这些分支过去的全部历史记录。所以,除非很多大文件只在某些分支中知道,而在其他分支中不知道,否则这对您并没有帮助

由于您的问题是文件太大(而不是太长太大的历史记录),您可能需要将其分解为几个可管理大小的“子存储库”。请注意,您对克隆感兴趣的子集必须是子存储库;克隆主repo必须包括子存储库。mercurial建议您创建一个简单的(“薄壳”)主repo,并将所有项目代码放在子存储库中

子存储库是一个复杂的解决方案,mercurial团队将其视为“最后手段”。这是一个复杂的设置,有各种各样的限制(见文档),并且您将有额外的复杂性,试图以保存文件历史的方式转换您的回购协议。因此,值得考虑避免这种情况的方法:

a) 如果你能避免回购协议的中间副本,那将是最好的;您是否无法设置ssh访问或代理,以便您的家庭repo可以直接与您的工作repo对话?(反之亦然;如果其中一个位置能够联系到另一个位置就足够了)

b) 正如@vaclav的回答所示,你可以用U盘携带回购协议

c) 或者你应该咬紧牙关,在互联网上克隆整个回购协议