创建mercurial存储库的本地透明缓存

时间:2010-10-13 14:54:31

标签: caching mercurial

我有很多不同的克隆,我分开处理。当我想更新这些克隆时,从服务器更新它们可能会非常慢。所以我有一个“干净”的克隆,我定期从服务器更新,所有其他克隆克隆从干净的克隆(希望是有道理的)。

但现在我所拥有的是一个两步走的方法。首先进入干净的克隆并拉动,然后转到我正在处理的真正的克隆并从干净的克隆中拉出来。这可以分为一步吗?

理想情况下,“干净”的克隆是透明的:当它被拉出时,它会自行拉动。这样我们就有了缓存和一步。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

在本地保持一个干净的克隆是非常普遍的,一般来说是一个好主意。我一直坚持你描述的两步过程,但如果你愿意的话,你可以用钩子做到这一点。

在您的缓存存储库中,您可以在.hg/hgrc文件中添加如下内容:

[hooks]
preoutgoing = hg pull

告诉repo在捆绑更改以响应对其发出的hg pullpull请求之前执行clone

请注意,即使下游(真实克隆)repo使用pull -rclone -r请求更改集的子集,此缓存仓库也会撤消所有内容。这可能是你想要的,因为你的目标是一面镜子,但评论者指出值得指出。

答案 1 :(得分:1)

您可以使用hooks执行此操作。在<clean-clone>/.hg/hgrc中,将这些添加为初稿:

[hooks]

# Before a pull from this repository, pull from upstream.
preoutgoing.autopull = [ $HG_SOURCE = 'pull' ] && hg pull

# After a push to this repository, push to upstream.
changegroup.autopush = [ $HG_SOURCE = 'push' ] && hg push

(注意:“autopush”和“autopull”是可选标识符,没有特殊含义;如果没有定义其他挂钩,则可以将它们保留。)